gistools/readers/grib2/sections/_4/
tables.rs

1#![cfg_attr(feature = "nightly", coverage(off))]
2
3use alloc::string::String;
4
5/// Categories track a name with it's units and abbreviation
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct TableCategory {
8    /// The name of the category
9    pub parameter: String,
10    /// The units of the category
11    pub units: String,
12    /// The abbreviation of the category
13    pub abbrev: String,
14}
15impl core::fmt::Display for TableCategory {
16    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
17        write!(f, "{} ({}, {})", self.parameter, self.units, self.abbrev)
18    }
19}
20
21/// # GRIB2 - CODE TABLE 4.0 - PRODUCT DEFINITION TEMPLATE NUMBER
22///
23/// **Details**:
24/// - **Section**: 4
25/// - **Octets**: 8-9
26/// - **Revised**: 07/12/2024
27///
28/// **Reserved Ranges**:
29/// - `16-19`: Reserved
30/// - `21-29`: Reserved
31/// - `36-39`: Reserved
32/// - `50`: Reserved
33/// - `52`: Reserved
34/// - `64-66`: Reserved
35/// - `69`: Reserved
36/// - `74-75`: Reserved
37/// - `128-253`: Reserved
38/// - `255-999`: Reserved
39/// - `1003-1099`: Reserved
40/// - `1102-32767`: Reserved
41/// - `32768-65534`: Reserved for Local Use
42///
43/// **Special Value**:
44/// - `65535`: Missing
45///
46/// ## Links
47/// - [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-0.shtml)
48///
49/// ## Notes
50/// - Red text depicts changes made since 08/23/2023.
51#[repr(u16)]
52#[allow(missing_docs)]
53#[derive(Debug, Clone, Copy, PartialEq, Eq)]
54pub enum Grib2Table4_0 {
55    AnalysisOrForecastAtHorizontalLevelOrLayerPointInTime = 0,
56    IndividualEnsembleForecastAtHorizontalLevelOrLayerPointInTime = 1,
57    DerivedForecastsBasedOnAllEnsembleMembersAtHorizontalLevelOrLayerPointInTime = 2,
58    DerivedForecastsBasedOnClusterRectangularAreaAtHorizontalLevelOrLayerPointInTime = 3,
59    DerivedForecastsBasedOnClusterCircularAreaAtHorizontalLevelOrLayerPointInTime = 4,
60    ProbabilityForecastsAtHorizontalLevelOrLayerPointInTime = 5,
61    PercentileForecastsAtHorizontalLevelOrLayerPointInTime = 6,
62    AnalysisOrForecastErrorAtHorizontalLevelOrLayerPointInTime = 7,
63    AverageAccumulationExtremeValuesStatisticallyProcessedContinuousNonContinuousTimeInterval = 8,
64    ProbabilityForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval = 9,
65    PercentileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval = 10,
66    IndividualEnsembleForecastContinuousNonContinuousTimeInterval = 11,
67    DerivedForecastsAllEnsembleMembersContinuousNonContinuousTimeInterval = 12,
68    DerivedForecastsClusterRectangularAreaContinuousNonContinuousTimeInterval = 13,
69    DerivedForecastsClusterCircularAreaContinuousNonContinuousTimeInterval = 14,
70    AverageAccumulationExtremeValuesStatisticallyProcessedSpatialAreaPointInTime = 15,
71    AnalysisOrForecastSimulatedSatelliteData = 32,
72    IndividualEnsembleForecastSimulatedSatelliteData = 33,
73    IndividualEnsembleForecastContinuousNonContinuousIntervalSimulatedSatelliteData = 34,
74    SatelliteProductWithOrWithoutQualityValues = 35,
75    AnalysisOrForecastAtmosphericChemicalConstituents = 40,
76    IndividualEnsembleForecastAtmosphericChemicalConstituents = 41,
77    AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituents = 42,
78    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituents =
79        43,
80    AnalysisOrForecastAerosol = 44,
81    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol = 45,
82    AverageAccumulationExtremeValuesStatisticallyProcessedAerosol = 46,
83    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol2 = 47, /* Note: Duplicate description, distinguished by value */
84    AnalysisOrForecastOpticalPropertiesAerosol = 48,
85    IndividualEnsembleForecastOpticalPropertiesAerosol = 49,
86    CategoricalForecastAtHorizontalLevelOrLayerPointInTime = 51,
87    PartitionedParametersAtHorizontalLevelOrLayerPointInTime = 53,
88    IndividualEnsembleForecastPartitionedParameters = 54,
89    SpatioTemporalChangingTilesAtHorizontalLevelOrLayerPointInTime = 55,
90    IndividualEnsembleForecastSpatioTemporalChangingTileParametersDeprecated = 56,
91    AnalysisOrForecastAtmosphericChemicalConstituentsDistributionFunction = 57,
92    IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction = 58,
93    IndividualEnsembleForecastSpatioTemporalChangingTileParametersCorrected = 59,
94    IndividualEnsembleReforecastPointInTime = 60,
95    IndividualEnsembleReforecastContinuousNonContinuousTimeInterval = 61,
96    AverageAccumulationExtremeValuesStatisticallyProcessedSpatioTemporalChangingTiles = 62,
97    IndividualEnsembleForecastSpatioTemporalChangingTiles = 63,
98    AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsDistributionFunction =
99        67,
100    IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction2 = 68, /* Note: Duplicate description, distinguished by value */
101    PostProcessingAnalysisOrForecastPointInTime = 70,
102    PostProcessingIndividualEnsembleForecastPointInTime = 71,
103    PostProcessingAverageAccumulationExtremeValuesStatisticallyProcessed = 72,
104    PostProcessingIndividualEnsembleForecastContinuousNonContinuousTimeInterval = 73,
105    AnalysisOrForecastAtmosphericChemicalConstituentsSourceSink = 76,
106    IndividualEnsembleForecastAtmosphericChemicalConstituentsSourceSink = 77,
107    AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsSourceSink =
108        78,
109    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituentsSourceSink =
110        79,
111    AnalysisOrForecastOpticalPropertiesAerosolSourceSink = 80,
112    IndividualEnsembleForecastOpticalPropertiesAerosolSourceSink = 81,
113    AverageAccumulationExtremeValuesStatisticallyProcessedAerosolSourceSink = 82,
114    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink = 83,
115    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol3 = 84, /* Note: Duplicate description, distinguished by value */
116    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink2 = 85, /* Note: Duplicate description, distinguished by value */
117    QuantileForecastsAtHorizontalLevelOrLayerPointInTime = 86,
118    QuantileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval = 87,
119    AnalysisOrForecastAtHorizontalLevelOrLayerSpecifiedLocalTime = 88,
120    PostProcessedQuantileForecastsPointInTime = 89,
121    PostProcessedQuantileForecastsContinuousNonContinuousTimeInterval = 90,
122    CategoricalForecastAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval = 91,
123    IndividualEnsembleForecastSpecifiedLocalTime = 92,
124    PostProcessingAnalysisOrForecastSpecifiedLocalTime = 93,
125    PostProcessingIndividualEnsembleForecastSpecifiedLocalTime = 94,
126    AverageAccumulationExtremeValuesStatisticallyProcessedSpecifiedLocalTime = 95,
127    AverageAccumulationExtremeValuesStatisticallyProcessedIndividualEnsembleForecastSpecifiedLocalTime =
128        96,
129    AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingAnalysisOrForecastSpecifiedLocalTime =
130        97,
131    AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingIndividualEnsembleForecastSpecifiedLocalTime =
132        98,
133    AnalysisOrForecastWave2DSpectraExplicitList = 99,
134    IndividualEnsembleForecastWave2DSpectraExplicitList = 100,
135    AnalysisOrForecastWave2DSpectraFormulae = 101,
136    IndividualEnsembleForecastWave2DSpectraFormulae = 102,
137    AnalysisOrForecastWavesSelectedByPeriodRange = 103,
138    IndividualEnsembleForecastWavesSelectedByPeriodRange = 104,
139    AnomaliesSignificanceDerivedProductsAnalysisForecastReferencePeriod = 105,
140    AnomaliesSignificanceDerivedProductsIndividualEnsembleForecastReferencePeriod = 106,
141    AnomaliesSignificanceDerivedProductsDerivedForecastsAllEnsembleMembersReferencePeriod = 107,
142    AnalysisOrForecastGenericOpticalProducts = 108,
143    IndividualEnsembleForecastGenericOpticalProducts = 109,
144    AverageAccumulationExtremeValuesStatisticallyProcessedGenericOpticalProducts = 110,
145    IndividualEnsembleForecastContinuousNonContinuousIntervalGenericOpticalProducts = 111,
146    AnomaliesSignificanceDerivedProductsProbabilityForecastsReferencePeriod = 112,
147    GeneralizedTilesAtHorizontalLevelOrLayerPointInTime = 113,
148    AverageAccumulationExtremeValuesStatisticallyProcessedGeneralizedTiles = 114,
149    IndividualEnsembleForecastGeneralizedTiles = 115,
150    IndividualEnsembleForecastGeneralizedTilesContinuousNonContinuousTimeInterval = 116,
151    IndividualLargeEnsembleForecastPointInTime = 117,
152    IndividualLargeEnsembleForecastContinuousNonContinuousInterval = 118,
153    ProbabilityForecastsFromLargeEnsemblesPointInTime = 119,
154    ProbabilityForecastsFromLargeEnsemblesContinuousNonContinuousTimeInterval = 120,
155    ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsPointInTime = 121,
156    ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsContinuousNonContinuousTimeInterval =
157        122,
158    ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsReferencePeriod = 123,
159    AnalysisOrForecastRadionuclides = 124,
160    IndividualEnsembleForecastRadionuclides = 125,
161    AverageAccumulationExtremeValuesStatisticallyProcessedRadionuclides = 126,
162    IndividualEnsembleForecastContinuousNonContinuousTimeIntervalRadionuclides = 127,
163    CcittIa5CharacterString = 254,
164    CrossSectionAnalysisAndForecastPointInTime = 1000,
165    CrossSectionAveragedStatisticallyProcessedAnalysisOrForecastTimeRange = 1001,
166    CrossSectionAnalysisAndForecastAveragedStatisticallyProcessedLatitudeLongitude = 1002,
167    HovmollerTypeGridNoAveragingStatisticalProcessing = 1100,
168    HovmollerTypeGridAveragingStatisticalProcessing = 1101,
169    Missing = 65535,
170}
171impl From<u16> for Grib2Table4_0 {
172    fn from(val: u16) -> Self {
173        match val {
174            0 => Self::AnalysisOrForecastAtHorizontalLevelOrLayerPointInTime,
175            1 => Self::IndividualEnsembleForecastAtHorizontalLevelOrLayerPointInTime,
176            2 => Self::DerivedForecastsBasedOnAllEnsembleMembersAtHorizontalLevelOrLayerPointInTime,
177            3 => Self::DerivedForecastsBasedOnClusterRectangularAreaAtHorizontalLevelOrLayerPointInTime,
178            4 => Self::DerivedForecastsBasedOnClusterCircularAreaAtHorizontalLevelOrLayerPointInTime,
179            5 => Self::ProbabilityForecastsAtHorizontalLevelOrLayerPointInTime,
180            6 => Self::PercentileForecastsAtHorizontalLevelOrLayerPointInTime,
181            7 => Self::AnalysisOrForecastErrorAtHorizontalLevelOrLayerPointInTime,
182            8 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedContinuousNonContinuousTimeInterval,
183            9 => Self::ProbabilityForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval,
184            10 => Self::PercentileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval,
185            11 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeInterval,
186            12 => Self::DerivedForecastsAllEnsembleMembersContinuousNonContinuousTimeInterval,
187            13 => Self::DerivedForecastsClusterRectangularAreaContinuousNonContinuousTimeInterval,
188            14 => Self::DerivedForecastsClusterCircularAreaContinuousNonContinuousTimeInterval,
189            15 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpatialAreaPointInTime,
190            32 => Self::AnalysisOrForecastSimulatedSatelliteData,
191            33 => Self::IndividualEnsembleForecastSimulatedSatelliteData,
192            34 => Self::IndividualEnsembleForecastContinuousNonContinuousIntervalSimulatedSatelliteData,
193            35 => Self::SatelliteProductWithOrWithoutQualityValues,
194            40 => Self::AnalysisOrForecastAtmosphericChemicalConstituents,
195            41 => Self::IndividualEnsembleForecastAtmosphericChemicalConstituents,
196            42 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituents,
197            43 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituents,
198            44 => Self::AnalysisOrForecastAerosol,
199            45 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol,
200            46 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedAerosol,
201            47 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol2,
202            48 => Self::AnalysisOrForecastOpticalPropertiesAerosol,
203            49 => Self::IndividualEnsembleForecastOpticalPropertiesAerosol,
204            51 => Self::CategoricalForecastAtHorizontalLevelOrLayerPointInTime,
205            53 => Self::PartitionedParametersAtHorizontalLevelOrLayerPointInTime,
206            54 => Self::IndividualEnsembleForecastPartitionedParameters,
207            55 => Self::SpatioTemporalChangingTilesAtHorizontalLevelOrLayerPointInTime,
208            56 => Self::IndividualEnsembleForecastSpatioTemporalChangingTileParametersDeprecated,
209            57 => Self::AnalysisOrForecastAtmosphericChemicalConstituentsDistributionFunction,
210            58 => Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction,
211            59 => Self::IndividualEnsembleForecastSpatioTemporalChangingTileParametersCorrected,
212            60 => Self::IndividualEnsembleReforecastPointInTime,
213            61 => Self::IndividualEnsembleReforecastContinuousNonContinuousTimeInterval,
214            62 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpatioTemporalChangingTiles,
215            63 => Self::IndividualEnsembleForecastSpatioTemporalChangingTiles,
216            67 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsDistributionFunction,
217            68 => Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction2,
218            70 => Self::PostProcessingAnalysisOrForecastPointInTime,
219            71 => Self::PostProcessingIndividualEnsembleForecastPointInTime,
220            72 => Self::PostProcessingAverageAccumulationExtremeValuesStatisticallyProcessed,
221            73 => Self::PostProcessingIndividualEnsembleForecastContinuousNonContinuousTimeInterval,
222            76 => Self::AnalysisOrForecastAtmosphericChemicalConstituentsSourceSink,
223            77 => Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsSourceSink,
224            78 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsSourceSink,
225            79 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituentsSourceSink,
226            80 => Self::AnalysisOrForecastOpticalPropertiesAerosolSourceSink,
227            81 => Self::IndividualEnsembleForecastOpticalPropertiesAerosolSourceSink,
228            82 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedAerosolSourceSink,
229            83 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink,
230            84 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol3,
231            85 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink2,
232            86 => Self::QuantileForecastsAtHorizontalLevelOrLayerPointInTime,
233            87 => Self::QuantileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval,
234            88 => Self::AnalysisOrForecastAtHorizontalLevelOrLayerSpecifiedLocalTime,
235            89 => Self::PostProcessedQuantileForecastsPointInTime,
236            90 => Self::PostProcessedQuantileForecastsContinuousNonContinuousTimeInterval,
237            91 => Self::CategoricalForecastAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval,
238            92 => Self::IndividualEnsembleForecastSpecifiedLocalTime,
239            93 => Self::PostProcessingAnalysisOrForecastSpecifiedLocalTime,
240            94 => Self::PostProcessingIndividualEnsembleForecastSpecifiedLocalTime,
241            95 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpecifiedLocalTime,
242            96 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedIndividualEnsembleForecastSpecifiedLocalTime,
243            97 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingAnalysisOrForecastSpecifiedLocalTime,
244            98 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingIndividualEnsembleForecastSpecifiedLocalTime,
245            99 => Self::AnalysisOrForecastWave2DSpectraExplicitList,
246            100 => Self::IndividualEnsembleForecastWave2DSpectraExplicitList,
247            101 => Self::AnalysisOrForecastWave2DSpectraFormulae,
248            102 => Self::IndividualEnsembleForecastWave2DSpectraFormulae,
249            103 => Self::AnalysisOrForecastWavesSelectedByPeriodRange,
250            104 => Self::IndividualEnsembleForecastWavesSelectedByPeriodRange,
251            105 => Self::AnomaliesSignificanceDerivedProductsAnalysisForecastReferencePeriod,
252            106 => Self::AnomaliesSignificanceDerivedProductsIndividualEnsembleForecastReferencePeriod,
253            107 => Self::AnomaliesSignificanceDerivedProductsDerivedForecastsAllEnsembleMembersReferencePeriod,
254            108 => Self::AnalysisOrForecastGenericOpticalProducts,
255            109 => Self::IndividualEnsembleForecastGenericOpticalProducts,
256            110 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedGenericOpticalProducts,
257            111 => Self::IndividualEnsembleForecastContinuousNonContinuousIntervalGenericOpticalProducts,
258            112 => Self::AnomaliesSignificanceDerivedProductsProbabilityForecastsReferencePeriod,
259            113 => Self::GeneralizedTilesAtHorizontalLevelOrLayerPointInTime,
260            114 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedGeneralizedTiles,
261            115 => Self::IndividualEnsembleForecastGeneralizedTiles,
262            116 => Self::IndividualEnsembleForecastGeneralizedTilesContinuousNonContinuousTimeInterval,
263            117 => Self::IndividualLargeEnsembleForecastPointInTime,
264            118 => Self::IndividualLargeEnsembleForecastContinuousNonContinuousInterval,
265            119 => Self::ProbabilityForecastsFromLargeEnsemblesPointInTime,
266            120 => Self::ProbabilityForecastsFromLargeEnsemblesContinuousNonContinuousTimeInterval,
267            121 => Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsPointInTime,
268            122 => Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsContinuousNonContinuousTimeInterval,
269            123 => Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsReferencePeriod,
270            124 => Self::AnalysisOrForecastRadionuclides,
271            125 => Self::IndividualEnsembleForecastRadionuclides,
272            126 => Self::AverageAccumulationExtremeValuesStatisticallyProcessedRadionuclides,
273            127 => Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalRadionuclides,
274            254 => Self::CcittIa5CharacterString,
275            1000 => Self::CrossSectionAnalysisAndForecastPointInTime,
276            1001 => Self::CrossSectionAveragedStatisticallyProcessedAnalysisOrForecastTimeRange,
277            1002 => Self::CrossSectionAnalysisAndForecastAveragedStatisticallyProcessedLatitudeLongitude,
278            1100 => Self::HovmollerTypeGridNoAveragingStatisticalProcessing,
279            1101 => Self::HovmollerTypeGridAveragingStatisticalProcessing,
280            _ => Self::Missing,
281        }
282    }
283}
284impl core::fmt::Display for Grib2Table4_0 {
285    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
286        let desc = match self {
287            Self::AnalysisOrForecastAtHorizontalLevelOrLayerPointInTime => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time.",
288            Self::IndividualEnsembleForecastAtHorizontalLevelOrLayerPointInTime => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.",
289            Self::DerivedForecastsBasedOnAllEnsembleMembersAtHorizontalLevelOrLayerPointInTime => "Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time.",
290            Self::DerivedForecastsBasedOnClusterRectangularAreaAtHorizontalLevelOrLayerPointInTime => "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.",
291            Self::DerivedForecastsBasedOnClusterCircularAreaAtHorizontalLevelOrLayerPointInTime => "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.",
292            Self::ProbabilityForecastsAtHorizontalLevelOrLayerPointInTime => "Probability forecasts at a horizontal level or in a horizontal layer at a point in time.",
293            Self::PercentileForecastsAtHorizontalLevelOrLayerPointInTime => "Percentile forecasts at a horizontal level or in a horizontal layer at a point in time.",
294            Self::AnalysisOrForecastErrorAtHorizontalLevelOrLayerPointInTime => "Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time.",
295            Self::AverageAccumulationExtremeValuesStatisticallyProcessedContinuousNonContinuousTimeInterval => "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.",
296            Self::ProbabilityForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval => "Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
297            Self::PercentileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval => "Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
298            Self::IndividualEnsembleForecastContinuousNonContinuousTimeInterval => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.",
299            Self::DerivedForecastsAllEnsembleMembersContinuousNonContinuousTimeInterval => "Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.",
300            Self::DerivedForecastsClusterRectangularAreaContinuousNonContinuousTimeInterval => "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.",
301            Self::DerivedForecastsClusterCircularAreaContinuousNonContinuousTimeInterval => "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.",
302            Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpatialAreaPointInTime => "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.",
303            Self::AnalysisOrForecastSimulatedSatelliteData => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulate (synthetic) satellite data.",
304            Self::IndividualEnsembleForecastSimulatedSatelliteData => "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.",
305            Self::IndividualEnsembleForecastContinuousNonContinuousIntervalSimulatedSatelliteData => "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.",
306            Self::SatelliteProductWithOrWithoutQualityValues => "Satellite product with or without associated quality values.",
307            Self::AnalysisOrForecastAtmosphericChemicalConstituents => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents.",
308            Self::IndividualEnsembleForecastAtmosphericChemicalConstituents => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents.",
309            Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituents => "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.",
310            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituents => "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.",
311            Self::AnalysisOrForecastAerosol => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol.",
312            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol => "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.",
313            Self::AverageAccumulationExtremeValuesStatisticallyProcessedAerosol => "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.",
314            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol2 => "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.",
315            Self::AnalysisOrForecastOpticalPropertiesAerosol => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol.",
316            Self::IndividualEnsembleForecastOpticalPropertiesAerosol => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol.",
317            Self::CategoricalForecastAtHorizontalLevelOrLayerPointInTime => "Categorical forecast at a horizontal level or in a horizontal layer at a point in time.",
318            Self::PartitionedParametersAtHorizontalLevelOrLayerPointInTime => "Partitioned parameters at a horizontal level or horizontal layer at a point in time.",
319            Self::IndividualEnsembleForecastPartitionedParameters => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters.",
320            Self::SpatioTemporalChangingTilesAtHorizontalLevelOrLayerPointInTime => "Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time.",
321            Self::IndividualEnsembleForecastSpatioTemporalChangingTileParametersDeprecated => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (DEPRECATED).",
322            Self::AnalysisOrForecastAtmosphericChemicalConstituentsDistributionFunction => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function.",
323            Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time interval for atmospheric chemical constituents based on a distribution function.",
324            Self::IndividualEnsembleForecastSpatioTemporalChangingTileParametersCorrected => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56).",
325            Self::IndividualEnsembleReforecastPointInTime => "Individual Ensemble Reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.",
326            Self::IndividualEnsembleReforecastContinuousNonContinuousTimeInterval => "Individual Ensemble Reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.",
327            Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpatioTemporalChangingTiles => "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 spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time.",
328            Self::IndividualEnsembleForecastSpatioTemporalChangingTiles => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for spatio-temporal changing tiles.",
329            Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsDistributionFunction => "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 based on a distribution function.",
330            Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsDistributionFunction2 => "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 based on a distribution function.",
331            Self::PostProcessingAnalysisOrForecastPointInTime => "Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time.",
332            Self::PostProcessingIndividualEnsembleForecastPointInTime => "Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.",
333            Self::PostProcessingAverageAccumulationExtremeValuesStatisticallyProcessed => "Post-processing 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.",
334            Self::PostProcessingIndividualEnsembleForecastContinuousNonContinuousTimeInterval => "Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.",
335            Self::AnalysisOrForecastAtmosphericChemicalConstituentsSourceSink => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink.",
336            Self::IndividualEnsembleForecastAtmosphericChemicalConstituentsSourceSink => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents with source or sink.",
337            Self::AverageAccumulationExtremeValuesStatisticallyProcessedAtmosphericChemicalConstituentsSourceSink => "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 with source or sink.",
338            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAtmosphericChemicalConstituentsSourceSink => "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 with source or sink.",
339            Self::AnalysisOrForecastOpticalPropertiesAerosolSourceSink => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink.",
340            Self::IndividualEnsembleForecastOpticalPropertiesAerosolSourceSink => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol with source or sink.",
341            Self::AverageAccumulationExtremeValuesStatisticallyProcessedAerosolSourceSink => "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 with source or sink.",
342            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink => "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 with source or sink.",
343            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosol3 => "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.",
344            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalAerosolSourceSink2 => "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 with source or sink.",
345            Self::QuantileForecastsAtHorizontalLevelOrLayerPointInTime => "Quantile forecasts at a horizontal level or in a horizontal layer at a point in time.",
346            Self::QuantileForecastsAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval => "Quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
347            Self::AnalysisOrForecastAtHorizontalLevelOrLayerSpecifiedLocalTime => "Analysis or forecast at a horizontal level or in a horizontal layer at a specified local time.",
348            Self::PostProcessedQuantileForecastsPointInTime => "Post-processed quantile forecasts at a horizontal level or in a horizontal layer at a point in time.",
349            Self::PostProcessedQuantileForecastsContinuousNonContinuousTimeInterval => "Post-processed quantile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
350            Self::CategoricalForecastAtHorizontalLevelOrLayerContinuousNonContinuousTimeInterval => "Categorical forecast at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
351            Self::IndividualEnsembleForecastSpecifiedLocalTime => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time.",
352            Self::PostProcessingAnalysisOrForecastSpecifiedLocalTime => "Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time.",
353            Self::PostProcessingIndividualEnsembleForecastSpecifiedLocalTime => "Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time.",
354            Self::AverageAccumulationExtremeValuesStatisticallyProcessedSpecifiedLocalTime => "Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer at a specified local time.",
355            Self::AverageAccumulationExtremeValuesStatisticallyProcessedIndividualEnsembleForecastSpecifiedLocalTime => "Average, accumulation, extreme values or other statistically processed values of an individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time.",
356            Self::AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingAnalysisOrForecastSpecifiedLocalTime => "Average, accumulation, extreme values or other statistically processed values of post-processing analysis or forecast at a horizontal level or in a horizontal layer at a specified local time.",
357            Self::AverageAccumulationExtremeValuesStatisticallyProcessedPostProcessingIndividualEnsembleForecastSpecifiedLocalTime => "Average, accumulation, extreme values or other statistically processed values of a post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a specified local time.",
358            Self::AnalysisOrForecastWave2DSpectraExplicitList => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions.",
359            Self::IndividualEnsembleForecastWave2DSpectraExplicitList => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with explicit list of frequencies and directions.",
360            Self::AnalysisOrForecastWave2DSpectraFormulae => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae.",
361            Self::IndividualEnsembleForecastWave2DSpectraFormulae => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for wave 2D spectra with frequencies and directions defined by formulae.",
362            Self::AnalysisOrForecastWavesSelectedByPeriodRange => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for waves selected by period range.",
363            Self::IndividualEnsembleForecastWavesSelectedByPeriodRange => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for waves selected by period range.",
364            Self::AnomaliesSignificanceDerivedProductsAnalysisForecastReferencePeriod => "Anomalies, significance and other derived products from an analysis or forecast in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
365            Self::AnomaliesSignificanceDerivedProductsIndividualEnsembleForecastReferencePeriod => "Anomalies, significance and other derived products from an individual ensemble forecast, control and perturbed in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
366            Self::AnomaliesSignificanceDerivedProductsDerivedForecastsAllEnsembleMembersReferencePeriod => "Anomalies, significance and other derived products from derived forecasts based on all ensemble members in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
367            Self::AnalysisOrForecastGenericOpticalProducts => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for generic optical products.",
368            Self::IndividualEnsembleForecastGenericOpticalProducts => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for generic optical products.",
369            Self::AverageAccumulationExtremeValuesStatisticallyProcessedGenericOpticalProducts => "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 generic optical products.",
370            Self::IndividualEnsembleForecastContinuousNonContinuousIntervalGenericOpticalProducts => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for generic optical products.",
371            Self::AnomaliesSignificanceDerivedProductsProbabilityForecastsReferencePeriod => "Anomalies, significance and other derived products as probability forecasts in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
372            Self::GeneralizedTilesAtHorizontalLevelOrLayerPointInTime => "Generalized tiles at a horizontal level or horizontal layer at a point in time.",
373            Self::AverageAccumulationExtremeValuesStatisticallyProcessedGeneralizedTiles => "Average, accumulation, and/or extreme values or other statistically processed values on generalized tiles at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
374            Self::IndividualEnsembleForecastGeneralizedTiles => "Individual ensemble forecast, control and perturbed on generalized tiles at a horizontal level or in a horizontal layer at a point in time.",
375            Self::IndividualEnsembleForecastGeneralizedTilesContinuousNonContinuousTimeInterval => "Individual ensemble forecast, control and perturbed on generalized tiles at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
376            Self::IndividualLargeEnsembleForecastPointInTime => "Individual large ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.",
377            Self::IndividualLargeEnsembleForecastContinuousNonContinuousInterval => "Individual large ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval.",
378            Self::ProbabilityForecastsFromLargeEnsemblesPointInTime => "Probability forecasts from large ensembles at a horizontal level or in a horizontal layer at a point in time.",
379            Self::ProbabilityForecastsFromLargeEnsemblesContinuousNonContinuousTimeInterval => "Probability forecasts from large ensembles at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
380            Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsPointInTime => "Probability forecasts from large ensembles with spatiotemporal processing based on focal (moving window) statistics at a horizontal level or in a horizontal layer at a point in time.",
381            Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsContinuousNonContinuousTimeInterval => "Probability forecasts from large ensembles with spatiotemporal processing based on focal (moving window) statistics at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
382            Self::ProbabilityForecastsLargeEnsemblesSpatiotemporalProcessingFocalStatisticsReferencePeriod => "Probability forecasts from large ensembles with spatiotemporal processing based on focal (moving window) statistics in relation to a reference period at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.",
383            Self::AnalysisOrForecastRadionuclides => "Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for radionuclides.",
384            Self::IndividualEnsembleForecastRadionuclides => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for radionuclides.",
385            Self::AverageAccumulationExtremeValuesStatisticallyProcessedRadionuclides => "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 radionuclides.",
386            Self::IndividualEnsembleForecastContinuousNonContinuousTimeIntervalRadionuclides => "Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for radionuclides.",
387            Self::CcittIa5CharacterString => "CCITT IA5 character string.",
388            Self::CrossSectionAnalysisAndForecastPointInTime => "Cross-section of analysis and forecast at a point in time.",
389            Self::CrossSectionAveragedStatisticallyProcessedAnalysisOrForecastTimeRange => "Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time.",
390            Self::CrossSectionAnalysisAndForecastAveragedStatisticallyProcessedLatitudeLongitude => "Cross-section of analysis and forecast, averaged or otherwise statistically-processed over latitude or longitude.",
391            Self::HovmollerTypeGridNoAveragingStatisticalProcessing => "Hovmoller-type grid with no averaging or other statistical processing.",
392            Self::HovmollerTypeGridAveragingStatisticalProcessing => "Hovmoller-type grid with averaging or other statistical processing.",
393            Self::Missing => "Missing",
394        };
395        f.write_str(desc)
396    }
397}
398
399/// GRIB2 - CODE TABLE 4.1: PARAMETER CATEGORY BY PRODUCT DISCIPLINE
400///
401/// **Created**: 12/07/2023
402/// **Revised**: 12/07/2023 (Red text depicts changes made since 10/30/2023)
403///
404/// ## Links
405/// - [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-1.shtml)
406///
407/// ## Notes
408/// - The disciplines are given in Section 0, Octet 7 of the GRIB2 message and are defined in Table 0.0.
409/// - When a new category is to be added to Code table 4.1 and more than one discipline applies,
410///   the choice of discipline should be made based on the intended use of the product.
411///
412/// This function provides a lookup for GRIB2 parameter categories based on the product
413/// discipline and category codes.
414///
415/// # Arguments
416/// * `discipline` - The product discipline (u8).
417/// * `category` - The parameter category within the discipline (u8).
418///
419/// # Returns
420/// A `String` containing the description of the parameter category.
421/// Returns "Missing" if the discipline or category is not found or is a special value.
422pub fn grib2_lookup_table4_1(discipline: u8, category: u8) -> String {
423    match discipline {
424        // Product Discipline 0 - Meteorological Products
425        0 => match category {
426            0 => String::from("Temperature (see Table 4.2-0-0)"),
427            1 => String::from("Moisture (see Table 4.2-0-1)"),
428            2 => String::from("Momentum (see Table 4.2-0-2)"),
429            3 => String::from("Mass (see Table 4.2-0-3)"),
430            4 => String::from("Short-wave radiation (see Table 4.2-0-4)"),
431            5 => String::from("Long-wave radiation (see Table 4.2-0-5)"),
432            6 => String::from("Cloud (see Table 4.2-0-6)"),
433            7 => String::from("Thermodynamic Stability indices (see Table 4.2-0-7)"),
434            8 => String::from("Kinematic Stability indices"),
435            9 => String::from("Temperature Probabilities*"),
436            10 => String::from("Moisture Probabilities*"),
437            11 => String::from("Momentum Probabilities*"),
438            12 => String::from("Mass Probabilities*"),
439            13 => String::from("Aerosols (see Table 4.2-0-13)"),
440            14 => String::from("Trace gases (e.g. Ozone, CO2) (see Table 4.2-0-14)"),
441            15 => String::from("Radar (see Table 4.2-0-15)"),
442            16 => String::from("Forecast Radar Imagery (see Table 4.2-0-16)"),
443            17 => String::from("Electrodynamics (see Table 4.2-0-17)"),
444            18 => String::from("Nuclear/radiology (see Table 4.2-0-18)"),
445            19 => String::from("Physical atmospheric properties (see Table 4.2-0-19)"),
446            20 => String::from("Atmospheric chemical Constituents (see Table 4.2-0-20)"),
447            21 => String::from("Thermodynamic Properties (see Table 4.2-0-21)"),
448            22 => String::from("Drought Indices (see Table 4.2-0-22)"),
449            // 23-189 Reserved
450            190 => String::from("CCITT IA5 string (see Table 4.2-0-190)"),
451            191 => String::from("Miscellaneous (see Table 4.2-0-191)"),
452            // 192-254 Reserved for Local Use
453            192 => String::from("Covariance (see Table 4.2-0-192)"),
454            255 => String::from("Missing"),
455            23..=189 => String::from("Reserved"),
456            193..=254 => String::from("Reserved for Local Use"),
457        },
458        // Product Discipline 1 - Hydrological Products
459        1 => match category {
460            0 => String::from("Hydrology basic products (see Table 4.2-1-0)"),
461            1 => String::from("Hydrology probabilities (see Table 4.2-1-1)"),
462            2 => String::from("Inland water and sediment properties (see Table 4.2-1-2)"),
463            255 => String::from("Missing"),
464            3..=191 => String::from("Reserved"),
465            192..=254 => String::from("Reserved for Local Use"),
466        },
467        // Product Discipline 2 - Land Surface Products
468        2 => match category {
469            0 => String::from("Vegetation/Biomass (see Table 4.2-2-0)"),
470            1 => String::from("Agricultural/Aquacultural Special Products (see Table 4.2-2-1)"),
471            2 => String::from("Transportation-related Products"),
472            3 => String::from("Soil Products (see Table 4.2-2-3)"),
473            4 => String::from("Fire Weather Products (see Table 4.2-2-4)"),
474            5 => String::from("Land Surface Products (see Table 4.2-2-5)"),
475            6 => String::from("Urban areas (see Table 4.2-2-6)"),
476            255 => String::from("Missing"),
477            7..=191 => String::from("Reserved"),
478            192..=254 => String::from("Reserved for Local Use"),
479        },
480        // Product Discipline 3 - Satellite Remote Sensing Products
481        3 => match category {
482            0 => String::from("Image format products (See note 1) (see Table 4.2-3-0)"),
483            1 => String::from("Quantitative products (See note 2) (see Table 4.2-3-1)"),
484            2 => String::from("Cloud Properties (see Table 4.2-3-2)"),
485            3 => String::from("Flight Rules Conditions (see Table 4.2-3-3)"),
486            4 => String::from("Volcanic Ash (see Table 4.2-3-4)"),
487            5 => String::from("Sea-surface Temperature (see Table 4.2-3-5)"),
488            6 => String::from("Solar Radiation (see Table 4.2-3-6)"),
489            192 => String::from("Forecast Satellite Imagery (See note 2) (see Table 4.2-3-192)"),
490            255 => String::from("Missing"),
491            7..=191 => String::from("Reserved"),
492            193..=254 => String::from("Reserved for Local Use"),
493        },
494        // Product Discipline 4 - Space Weather Products
495        4 => match category {
496            0 => String::from("Temperature (see Table 4.2-4-0)"),
497            1 => String::from("Momentum (see Table 4.2-4-1)"),
498            2 => String::from("Charged Particle Mass and Number (see Table 4.2-4-2)"),
499            3 => String::from("Electric and Magnetic Fields (see Table 4.2-4-3)"),
500            4 => String::from("Energetic Particles (see Table 4.2-4-4)"),
501            5 => String::from("Waves (see Table 4.2-4-5)"),
502            6 => String::from("Solar Electromagnetic Emissions (see Table 4.2-4-6)"),
503            7 => String::from("Terrestrial Electromagnetic Emissions (see Table 4.2-4-7)"),
504            8 => String::from("Imagery (see Table 4.2-4-8)"),
505            9 => String::from("Ion-Neutral Coupling (see Table 4.2-4-9)"),
506            10 => String::from("Space Weather Indices (see Table 4.2-4-10)"),
507            255 => String::from("Missing"),
508            11..=191 => String::from("Reserved"),
509            192..=254 => String::from("Reserved for Local Use"),
510        },
511        // Product Discipline 10 - Oceanographic Products
512        10 => match category {
513            0 => String::from("Waves (see Table 4.2-10-0)"),
514            1 => String::from("Currents (see Table 4.2-10-1)"),
515            2 => String::from("Ice (see Table 4.2-10-2)"),
516            3 => String::from("Surface Properties (see Table 4.2-10-3)"),
517            4 => String::from("Sub-surface Properties (see Table 4.2-10-4)"),
518            191 => String::from("Miscellaneous (see Table 4.2-10-191)"),
519            255 => String::from("Missing"),
520            5..=190 => String::from("Reserved"),
521            192..=254 => String::from("Reserved for Local Use"),
522        },
523        // Product Discipline 20 - Health and Socioeconomic impacts
524        20 => match category {
525            0 => String::from("Health Indicators (see Table 4.2-20-0)"),
526            1 => String::from("Epidemiology (see Table 4.2-20-1)"),
527            2 => String::from("Socioeconomic indicators (see Table 4.2-20-2)"),
528            3 => String::from("Renewable energy sector (see Table 4.2-20-3)"),
529            255 => String::from("Missing"),
530            4..=191 => String::from("Reserved"),
531            192..=254 => String::from("Reserved for Local Use"),
532        },
533        _ => String::from("Missing"), // Default for unknown disciplines
534    }
535}
536
537/// # GRIB2 - CODE TABLE 4.2-0-0
538///
539/// **Classification**: Meteorological products, Temperature category
540///
541/// **Available forms**: GRIB2
542///
543/// **Defined area**: Meteorological parameters
544///
545/// **Alias**: N/A
546///
547/// **Domain**: Global
548///
549/// **Input type**: Numeric (GRIB2 octets)
550///
551/// **Output type**: Numeric (GRIB2 octets)
552///
553/// ## Links
554/// - [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-2.shtml)
555///
556/// ## Required Parameters
557/// - `Parameter`: The name of the meteorological parameter.
558/// - `Units`: The units of measurement for the parameter.
559/// - `Abbrev`: The abbreviation for the parameter.
560///
561/// ## Optional Parameters
562/// - `Reserved`: Reserved values are placeholders for future use or non-used categories.
563///
564/// ## Notes
565/// (1) Parameter deprecated. See Regulation 92.6.2 and use another parameter instead.
566/// (2) Apparent temperature is the perceived outdoor temperature, caused by a combination of phenomena, such as air temperature, relative humidity, and wind speed.
567///
568/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 0.
569///
570/// # Arguments
571/// * `category` - The parameter category within Discipline 0, Category 0 (u8).
572///
573/// # Returns
574/// A `TableCategory` struct containing the description of the parameter category.
575/// Returns a "Missing" TableCategory if the category is not found or is a special value.
576pub fn grib2_lookup_table42_00(category: u8) -> TableCategory {
577    match category {
578        0 => TableCategory {
579            parameter: String::from("Temperature"),
580            units: String::from("K"),
581            abbrev: String::from("TMP"),
582        },
583        1 => TableCategory {
584            parameter: String::from("Virtual Temperature"),
585            units: String::from("K"),
586            abbrev: String::from("VTMP"),
587        },
588        2 => TableCategory {
589            parameter: String::from("Potential Temperature"),
590            units: String::from("K"),
591            abbrev: String::from("POT"),
592        },
593        3 => TableCategory {
594            parameter: String::from(
595                "Pseudo-Adiabatic Potential Temperature (or Equivalent Potential Temperature)",
596            ),
597            units: String::from("K"),
598            abbrev: String::from("EPOT"),
599        },
600        4 => TableCategory {
601            parameter: String::from("Maximum Temperature"),
602            units: String::from("K"),
603            abbrev: String::from("TMAX"),
604        },
605        5 => TableCategory {
606            parameter: String::from("Minimum Temperature"),
607            units: String::from("K"),
608            abbrev: String::from("TMIN"),
609        },
610        6 => TableCategory {
611            parameter: String::from("Dew Point Temperature"),
612            units: String::from("K"),
613            abbrev: String::from("DPT"),
614        },
615        7 => TableCategory {
616            parameter: String::from("Dew Point Depression (or Deficit)"),
617            units: String::from("K"),
618            abbrev: String::from("DEPR"),
619        },
620        8 => TableCategory {
621            parameter: String::from("Lapse Rate"),
622            units: String::from("K m-1"),
623            abbrev: String::from("LAPR"),
624        },
625        9 => TableCategory {
626            parameter: String::from("Temperature Anomaly"),
627            units: String::from("K"),
628            abbrev: String::from("TMPA"),
629        },
630        10 => TableCategory {
631            parameter: String::from("Latent Heat Net Flux"),
632            units: String::from("W m-2"),
633            abbrev: String::from("LHTFL"),
634        },
635        11 => TableCategory {
636            parameter: String::from("Sensible Heat Net Flux"),
637            units: String::from("W m-2"),
638            abbrev: String::from("SHTFL"),
639        },
640        12 => TableCategory {
641            parameter: String::from("Heat Index"),
642            units: String::from("K"),
643            abbrev: String::from("HEATX"),
644        },
645        13 => TableCategory {
646            parameter: String::from("Wind Chill Factor"),
647            units: String::from("K"),
648            abbrev: String::from("WCF"),
649        },
650        14 => TableCategory {
651            parameter: String::from("Minimum Dew Point Depression"),
652            units: String::from("K"),
653            abbrev: String::from("MINDPD"),
654        },
655        15 => TableCategory {
656            parameter: String::from("Virtual Potential Temperature"),
657            units: String::from("K"),
658            abbrev: String::from("VPTMP"),
659        },
660        16 => TableCategory {
661            parameter: String::from("Snow Phase Change Heat Flux"),
662            units: String::from("W m-2"),
663            abbrev: String::from("SNOHF"),
664        },
665        17 => TableCategory {
666            parameter: String::from("Skin Temperature"),
667            units: String::from("K"),
668            abbrev: String::from("SKINT"),
669        },
670        18 => TableCategory {
671            parameter: String::from("Snow Temperature (top of snow)"),
672            units: String::from("K"),
673            abbrev: String::from("SNOT"),
674        },
675        19 => TableCategory {
676            parameter: String::from("Turbulent Transfer Coefficient for Heat"),
677            units: String::from("Numeric"),
678            abbrev: String::from("TTCHT"),
679        },
680        20 => TableCategory {
681            parameter: String::from("Turbulent Diffusion Coefficient for Heat"),
682            units: String::from("m2s-1"),
683            abbrev: String::from("TDCHT"),
684        },
685        21 => TableCategory {
686            parameter: String::from("Apparent Temperature"),
687            units: String::from("K"),
688            abbrev: String::from("APTMP"),
689        },
690        22 => TableCategory {
691            parameter: String::from("Temperature Tendency due to Short-Wave Radiation"),
692            units: String::from("K s-1"),
693            abbrev: String::from("TTSWR"),
694        },
695        23 => TableCategory {
696            parameter: String::from("Temperature Tendency due to Long-Wave Radiation"),
697            units: String::from("K s-1"),
698            abbrev: String::from("TTLWR"),
699        },
700        24 => TableCategory {
701            parameter: String::from("Temperature Tendency due to Short-Wave Radiation, Clear Sky"),
702            units: String::from("K s-1"),
703            abbrev: String::from("TTSWRCS"),
704        },
705        25 => TableCategory {
706            parameter: String::from("Temperature Tendency due to Long-Wave Radiation, Clear Sky"),
707            units: String::from("K s-1"),
708            abbrev: String::from("TTLWRCS"),
709        },
710        26 => TableCategory {
711            parameter: String::from("Temperature Tendency due to parameterizations"),
712            units: String::from("K s-1"),
713            abbrev: String::from("TTPARM"),
714        },
715        27 => TableCategory {
716            parameter: String::from("Wet Bulb Temperature"),
717            units: String::from("K"),
718            abbrev: String::from("WETBT"),
719        },
720        28 => TableCategory {
721            parameter: String::from("Unbalanced Component of Temperature"),
722            units: String::from("K"),
723            abbrev: String::from("UCTMP"),
724        },
725        29 => TableCategory {
726            parameter: String::from("Temperature Advection"),
727            units: String::from("K s-1"),
728            abbrev: String::from("TMPADV"),
729        },
730        30 => TableCategory {
731            parameter: String::from("Latent Heat Net Flux Due to Evaporation"),
732            units: String::from("W m-2"),
733            abbrev: String::from("LHFLXE"),
734        },
735        31 => TableCategory {
736            parameter: String::from("Latent Heat Net Flux Due to Sublimation"),
737            units: String::from("W m-2"),
738            abbrev: String::from("LHFLXS"),
739        },
740        32 => TableCategory {
741            parameter: String::from("Wet-Bulb Potential Temperature"),
742            units: String::from("K"),
743            abbrev: String::from("WETBPT"),
744        },
745        192 => TableCategory {
746            parameter: String::from("Snow Phase Change Heat Flux"),
747            units: String::from("W m-2"),
748            abbrev: String::from("SNOHF"),
749        },
750        193 => TableCategory {
751            parameter: String::from("Temperature Tendency by All Radiation"),
752            units: String::from("K s-1"),
753            abbrev: String::from("TTRAD"),
754        },
755        194 => TableCategory {
756            parameter: String::from("Relative Error Variance"),
757            units: String::from(""),
758            abbrev: String::from("REV"),
759        },
760        195 => TableCategory {
761            parameter: String::from("Large Scale Condensate Heating Rate"),
762            units: String::from("K s-1"),
763            abbrev: String::from("LRGHR"),
764        },
765        196 => TableCategory {
766            parameter: String::from("Deep Convective Heating Rate"),
767            units: String::from("K s-1"),
768            abbrev: String::from("CNVHR"),
769        },
770        197 => TableCategory {
771            parameter: String::from("Total Downward Heat Flux at Surface"),
772            units: String::from("W m-2"),
773            abbrev: String::from("THFLX"),
774        },
775        198 => TableCategory {
776            parameter: String::from("Temperature Tendency by All Physics"),
777            units: String::from("K s-1"),
778            abbrev: String::from("TTDIA"),
779        },
780        199 => TableCategory {
781            parameter: String::from("Temperature Tendency by Non-radiation Physics"),
782            units: String::from("K s-1"),
783            abbrev: String::from("TTPHY"),
784        },
785        200 => TableCategory {
786            parameter: String::from("Standard Dev. of IR Temp. over 1x1 deg. area"),
787            units: String::from("K"),
788            abbrev: String::from("TSD1D"),
789        },
790        201 => TableCategory {
791            parameter: String::from("Shallow Convective Heating Rate"),
792            units: String::from("K s-1"),
793            abbrev: String::from("SHAHR"),
794        },
795        202 => TableCategory {
796            parameter: String::from("Vertical Diffusion Heating rate"),
797            units: String::from("K s-1"),
798            abbrev: String::from("VDFHR"),
799        },
800        203 => TableCategory {
801            parameter: String::from("Potential Temperature at Top of Viscous Sublayer"),
802            units: String::from("K"),
803            abbrev: String::from("THZ0"),
804        },
805        204 => TableCategory {
806            parameter: String::from("Tropical Cyclone Heat Potential"),
807            units: String::from("J m-2 K"),
808            abbrev: String::from("TCHP"),
809        },
810        205 => TableCategory {
811            parameter: String::from("Effective Layer (EL) Temperature"),
812            units: String::from("C"),
813            abbrev: String::from("ELMELT"),
814        },
815        206 => TableCategory {
816            parameter: String::from("Wet Bulb Globe Temperature"),
817            units: String::from("K"),
818            abbrev: String::from("WETGLBT"),
819        },
820        255 => TableCategory {
821            parameter: String::from("Missing"),
822            units: String::from(""),
823            abbrev: String::from(""),
824        },
825        33..=191 => TableCategory {
826            parameter: String::from("Reserved"),
827            units: String::from(""),
828            abbrev: String::from("Reserved"),
829        },
830        _ => TableCategory {
831            parameter: String::from("Reserved for Local Use"),
832            units: String::from(""),
833            abbrev: String::from("Reserved for Local Use"),
834        },
835    }
836}
837
838/// # GRIB2 - CODE TABLE 4.2-0-1
839///
840/// **Classification**: Meteorological products, Moisture category
841///
842/// **Available forms**: GRIB2
843///
844/// **Defined area**: Meteorological parameters
845///
846/// **Alias**: N/A
847///
848/// **Domain**: Global
849///
850/// **Input type**: Numeric (GRIB2 octets)
851///
852/// **Output type**: Numeric (GRIB2 octets)
853///
854/// **Used by**:
855/// - Section 0, Octet 7 = 0
856/// - Section 4, Octet 10 = 1
857///
858/// ## Links
859/// - [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-2.shtml)
860///
861/// ## Required Parameters
862/// - `Parameter`: The name of the meteorological parameter.
863/// - `Units`: The units of measurement for the parameter.
864/// - `Abbrev`: The abbreviation for the parameter.
865///
866/// ## Optional Parameters
867/// - `Reserved`: Reserved values are placeholders for future use or non-used categories.
868///
869/// ## Notes
870/// (1) Parameter deprecated - See Regulation 92.6.2 and use another parameter instead.
871/// (2) Total precipitation/snowfall rate stands for the sum of convective and large-scale precipitation/snowfall rate.
872/// (3) Statistical process 1 (Accumulation) does not change units. It is recommended to use another parameter with "rate" in its name and accumulation in PDT.
873/// (4) The listed units for this parameter appear to be inappropriate for the potential evaporation rate. Instead, it is recommended to use parameter 143.
874/// (5) Total solid precipitation includes the sum of all types of solid water, e.g. graupel, snow, and hail.
875/// (6) Assuming a cloud containing a bi-modal ice particle distribution, "cloud ice" refers to the small particle mode, whereas the large mode is usually called "snow". ("Ice pellets", in contrast, may refer to the precipitation of sleet, formed from freezing raindrops or refreezing (partially) melted snowflakes, or the precipitation of small hail.)
876/// (7) It is recommended to use Snow melt rate instead (discipline 2, category 0, number 41).
877/// (8) It is recommended to use parameter 148.
878/// (9) Snow evaporation is the accumulated amount of water that has evaporated from snow from within the snow-covered area of a grid-box.
879///
880/// Local Use Notes:
881/// (A) The numeric value is a reference to a weather string and key table stored in the Local Use Section (Section 2) of the same GRIB2 message. See MDL Template 2.1 page and this page for more details.
882///
883/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 1.
884///
885/// # Arguments
886/// * `category` - The parameter category within Discipline 0, Category 1 (u8).
887///
888/// # Returns
889/// A `TableCategory` struct containing the description of the parameter category.
890/// Returns a "Missing" TableCategory if the category is not found or is a special value.
891pub fn grib2_lookup_table42_01(category: u8) -> TableCategory {
892    match category {
893        0 => TableCategory {
894            parameter: String::from("Specific Humidity"),
895            units: String::from("kg kg-1"),
896            abbrev: String::from("SPFH"),
897        },
898        1 => TableCategory {
899            parameter: String::from("Relative Humidity"),
900            units: String::from("%"),
901            abbrev: String::from("RH"),
902        },
903        2 => TableCategory {
904            parameter: String::from("Humidity Mixing Ratio"),
905            units: String::from("kg kg-1"),
906            abbrev: String::from("MIXR"),
907        },
908        3 => TableCategory {
909            parameter: String::from("Precipitable Water"),
910            units: String::from("kg m-2"),
911            abbrev: String::from("PWAT"),
912        },
913        4 => TableCategory {
914            parameter: String::from("Vapour Pressure"),
915            units: String::from("Pa"),
916            abbrev: String::from("VAPP"),
917        },
918        5 => TableCategory {
919            parameter: String::from("Saturation Deficit"),
920            units: String::from("Pa"),
921            abbrev: String::from("SATD"),
922        },
923        6 => TableCategory {
924            parameter: String::from("Evaporation"),
925            units: String::from("kg m-2"),
926            abbrev: String::from("EVP"),
927        },
928        7 => TableCategory {
929            parameter: String::from("Precipitation Rate"),
930            units: String::from("kg m-2 s-1"),
931            abbrev: String::from("PRATE"),
932        },
933        8 => TableCategory {
934            parameter: String::from("Total Precipitation"),
935            units: String::from("kg m-2"),
936            abbrev: String::from("APCP"),
937        },
938        9 => TableCategory {
939            parameter: String::from("Large-Scale Precipitation (non-convective)"),
940            units: String::from("kg m-2"),
941            abbrev: String::from("NCPCP"),
942        },
943        10 => TableCategory {
944            parameter: String::from("Convective Precipitation"),
945            units: String::from("kg m-2"),
946            abbrev: String::from("ACPCP"),
947        },
948        11 => TableCategory {
949            parameter: String::from("Snow Depth"),
950            units: String::from("m"),
951            abbrev: String::from("SNOD"),
952        },
953        12 => TableCategory {
954            parameter: String::from("Snowfall Rate Water Equivalent"),
955            units: String::from("kg m-2 s-1"),
956            abbrev: String::from("SRWEQ"),
957        },
958        13 => TableCategory {
959            parameter: String::from("Water Equivalent of Accumulated Snow Depth"),
960            units: String::from("kg m-2"),
961            abbrev: String::from("WEASD"),
962        },
963        14 => TableCategory {
964            parameter: String::from("Convective Snow"),
965            units: String::from("kg m-2"),
966            abbrev: String::from("SNOC"),
967        },
968        15 => TableCategory {
969            parameter: String::from("Large-Scale Snow"),
970            units: String::from("kg m-2"),
971            abbrev: String::from("SNOL"),
972        },
973        16 => TableCategory {
974            parameter: String::from("Snow Melt"),
975            units: String::from("kg m-2"),
976            abbrev: String::from("SNOM"),
977        },
978        17 => TableCategory {
979            parameter: String::from("Snow Age"),
980            units: String::from("day"),
981            abbrev: String::from("SNOAG"),
982        },
983        18 => TableCategory {
984            parameter: String::from("Absolute Humidity"),
985            units: String::from("kg m-3"),
986            abbrev: String::from("ABSH"),
987        },
988        19 => TableCategory {
989            parameter: String::from("Precipitation Type"),
990            units: String::from("See Table 4.201"),
991            abbrev: String::from("PTYPE"),
992        },
993        20 => TableCategory {
994            parameter: String::from("Integrated Liquid Water"),
995            units: String::from("kg m-2"),
996            abbrev: String::from("ILIQW"),
997        },
998        21 => TableCategory {
999            parameter: String::from("Condensate"),
1000            units: String::from("kg kg-1"),
1001            abbrev: String::from("TCOND"),
1002        },
1003        22 => TableCategory {
1004            parameter: String::from("Cloud Mixing Ratio"),
1005            units: String::from("kg kg-1"),
1006            abbrev: String::from("CLMR"),
1007        },
1008        23 => TableCategory {
1009            parameter: String::from("Ice Water Mixing Ratio"),
1010            units: String::from("kg kg-1"),
1011            abbrev: String::from("ICMR"),
1012        },
1013        24 => TableCategory {
1014            parameter: String::from("Rain Mixing Ratio"),
1015            units: String::from("kg kg-1"),
1016            abbrev: String::from("RWMR"),
1017        },
1018        25 => TableCategory {
1019            parameter: String::from("Snow Mixing Ratio"),
1020            units: String::from("kg kg-1"),
1021            abbrev: String::from("SNMR"),
1022        },
1023        26 => TableCategory {
1024            parameter: String::from("Horizontal Moisture Convergence"),
1025            units: String::from("kg kg-1 s-1"),
1026            abbrev: String::from("MCONV"),
1027        },
1028        27 => TableCategory {
1029            parameter: String::from("Maximum Relative Humidity"),
1030            units: String::from("%"),
1031            abbrev: String::from("MAXRH"),
1032        },
1033        28 => TableCategory {
1034            parameter: String::from("Maximum Absolute Humidity"),
1035            units: String::from("kg m-3"),
1036            abbrev: String::from("MAXAH"),
1037        },
1038        29 => TableCategory {
1039            parameter: String::from("Total Snowfall"),
1040            units: String::from("m"),
1041            abbrev: String::from("ASNOW"),
1042        },
1043        30 => TableCategory {
1044            parameter: String::from("Precipitable Water Category"),
1045            units: String::from("See Table 4.202"),
1046            abbrev: String::from("PWCAT"),
1047        },
1048        31 => TableCategory {
1049            parameter: String::from("Hail"),
1050            units: String::from("m"),
1051            abbrev: String::from("HAIL"),
1052        },
1053        32 => TableCategory {
1054            parameter: String::from("Graupel"),
1055            units: String::from("kg kg-1"),
1056            abbrev: String::from("GRLE"),
1057        },
1058        33 => TableCategory {
1059            parameter: String::from("Categorical Rain"),
1060            units: String::from("Code table 4.222"),
1061            abbrev: String::from("CRAIN"),
1062        },
1063        34 => TableCategory {
1064            parameter: String::from("Categorical Freezing Rain"),
1065            units: String::from("Code table 4.222"),
1066            abbrev: String::from("CFRZR"),
1067        },
1068        35 => TableCategory {
1069            parameter: String::from("Categorical Ice Pellets"),
1070            units: String::from("Code table 4.222"),
1071            abbrev: String::from("CICEP"),
1072        },
1073        36 => TableCategory {
1074            parameter: String::from("Categorical Snow"),
1075            units: String::from("Code table 4.222"),
1076            abbrev: String::from("CSNOW"),
1077        },
1078        37 => TableCategory {
1079            parameter: String::from("Convective Precipitation Rate"),
1080            units: String::from("kg m-2 s-1"),
1081            abbrev: String::from("CPRAT"),
1082        },
1083        38 => TableCategory {
1084            parameter: String::from("Horizontal Moisture Divergence"),
1085            units: String::from("kg kg-1 s-1"),
1086            abbrev: String::from("MDIVER"),
1087        },
1088        39 => TableCategory {
1089            parameter: String::from("Percent frozen precipitation"),
1090            units: String::from("%"),
1091            abbrev: String::from("CPOFP"),
1092        },
1093        40 => TableCategory {
1094            parameter: String::from("Potential Evaporation"),
1095            units: String::from("kg m-2"),
1096            abbrev: String::from("PEVAP"),
1097        },
1098        41 => TableCategory {
1099            parameter: String::from("Potential Evaporation Rate"),
1100            units: String::from("W m-2"),
1101            abbrev: String::from("PEVPR"),
1102        },
1103        42 => TableCategory {
1104            parameter: String::from("Snow Cover"),
1105            units: String::from("%"),
1106            abbrev: String::from("SNOWC"),
1107        },
1108        43 => TableCategory {
1109            parameter: String::from("Rain Fraction of Total Cloud Water"),
1110            units: String::from("Proportion"),
1111            abbrev: String::from("FRAIN"),
1112        },
1113        44 => TableCategory {
1114            parameter: String::from("Rime Factor"),
1115            units: String::from("Numeric"),
1116            abbrev: String::from("RIME"),
1117        },
1118        45 => TableCategory {
1119            parameter: String::from("Total Column Integrated Rain"),
1120            units: String::from("kg m-2"),
1121            abbrev: String::from("TCOLR"),
1122        },
1123        46 => TableCategory {
1124            parameter: String::from("Total Column Integrated Snow"),
1125            units: String::from("kg m-2"),
1126            abbrev: String::from("TCOLS"),
1127        },
1128        47 => TableCategory {
1129            parameter: String::from("Large Scale Water Precipitation"),
1130            units: String::from("kg m-2"),
1131            abbrev: String::from("LSWP"),
1132        },
1133        48 => TableCategory {
1134            parameter: String::from("Convective Water Precipitation"),
1135            units: String::from("kg m-2"),
1136            abbrev: String::from("CWP"),
1137        },
1138        49 => TableCategory {
1139            parameter: String::from("Total Water Precipitation"),
1140            units: String::from("kg m-2"),
1141            abbrev: String::from("TWATP"),
1142        },
1143        50 => TableCategory {
1144            parameter: String::from("Total Snow Precipitation"),
1145            units: String::from("kg m-2"),
1146            abbrev: String::from("TSNOWP"),
1147        },
1148        51 => TableCategory {
1149            parameter: String::from("Total Column Water"),
1150            units: String::from("kg m-2"),
1151            abbrev: String::from("TCWAT"),
1152        },
1153        52 => TableCategory {
1154            parameter: String::from("Total Precipitation Rate"),
1155            units: String::from("kg m-2 s-1"),
1156            abbrev: String::from("TPRATE"),
1157        },
1158        53 => TableCategory {
1159            parameter: String::from("Total Snowfall Rate Water Equivalent"),
1160            units: String::from("kg m-2 s-1"),
1161            abbrev: String::from("TSRWE"),
1162        },
1163        54 => TableCategory {
1164            parameter: String::from("Large Scale Precipitation Rate"),
1165            units: String::from("kg m-2 s-1"),
1166            abbrev: String::from("LSPRATE"),
1167        },
1168        55 => TableCategory {
1169            parameter: String::from("Convective Snowfall Rate Water Equivalent"),
1170            units: String::from("kg m-2 s-1"),
1171            abbrev: String::from("CSRWE"),
1172        },
1173        56 => TableCategory {
1174            parameter: String::from("Large Scale Snowfall Rate Water Equivalent"),
1175            units: String::from("kg m-2 s-1"),
1176            abbrev: String::from("LSSRWE"),
1177        },
1178        57 => TableCategory {
1179            parameter: String::from("Total Snowfall Rate"),
1180            units: String::from("m s-1"),
1181            abbrev: String::from("TSRATE"),
1182        },
1183        58 => TableCategory {
1184            parameter: String::from("Convective Snowfall Rate"),
1185            units: String::from("m s-1"),
1186            abbrev: String::from("CSRATE"),
1187        },
1188        59 => TableCategory {
1189            parameter: String::from("Large Scale Snowfall Rate"),
1190            units: String::from("m s-1"),
1191            abbrev: String::from("LSSRATE"),
1192        },
1193        60 => TableCategory {
1194            parameter: String::from("Snow Depth Water Equivalent"),
1195            units: String::from("kg m-2"),
1196            abbrev: String::from("SDWE"),
1197        },
1198        61 => TableCategory {
1199            parameter: String::from("Snow Density"),
1200            units: String::from("kg m-3"),
1201            abbrev: String::from("SDEN"),
1202        },
1203        62 => TableCategory {
1204            parameter: String::from("Snow Evaporation"),
1205            units: String::from("kg m-2"),
1206            abbrev: String::from("SEVAP"),
1207        },
1208        63 => TableCategory {
1209            parameter: String::from("Reserved"),
1210            units: String::from(""),
1211            abbrev: String::from("Reserved"),
1212        }, // Reserved
1213        64 => TableCategory {
1214            parameter: String::from("Total Column Integrated Water Vapour"),
1215            units: String::from("kg m-2"),
1216            abbrev: String::from("TCIWV"),
1217        },
1218        65 => TableCategory {
1219            parameter: String::from("Rain Precipitation Rate"),
1220            units: String::from("kg m-2 s-1"),
1221            abbrev: String::from("RPRATE"),
1222        },
1223        66 => TableCategory {
1224            parameter: String::from("Snow Precipitation Rate"),
1225            units: String::from("kg m-2 s-1"),
1226            abbrev: String::from("SPRATE"),
1227        },
1228        67 => TableCategory {
1229            parameter: String::from("Freezing Rain Precipitation Rate"),
1230            units: String::from("kg m-2 s-1"),
1231            abbrev: String::from("FPRATE"),
1232        },
1233        68 => TableCategory {
1234            parameter: String::from("Ice Pellets Precipitation Rate"),
1235            units: String::from("kg m-2 s-1"),
1236            abbrev: String::from("IPRATE"),
1237        },
1238        69 => TableCategory {
1239            parameter: String::from("Total Column Integrated Cloud Water"),
1240            units: String::from("kg m-2"),
1241            abbrev: String::from("TCOLW"),
1242        },
1243        70 => TableCategory {
1244            parameter: String::from("Total Column Integrated Cloud Ice"),
1245            units: String::from("kg m-2"),
1246            abbrev: String::from("TCOLI"),
1247        },
1248        71 => TableCategory {
1249            parameter: String::from("Hail Mixing Ratio"),
1250            units: String::from("kg kg-1"),
1251            abbrev: String::from("HAILMXR"),
1252        },
1253        72 => TableCategory {
1254            parameter: String::from("Total Column Integrated Hail"),
1255            units: String::from("kg m-2"),
1256            abbrev: String::from("TCOLH"),
1257        },
1258        73 => TableCategory {
1259            parameter: String::from("Hail Precipitation Rate"),
1260            units: String::from("kg m-2 s-1"),
1261            abbrev: String::from("HAILPR"),
1262        },
1263        74 => TableCategory {
1264            parameter: String::from("Total Column Integrated Graupel"),
1265            units: String::from("kg m-2"),
1266            abbrev: String::from("TCOLG"),
1267        },
1268        75 => TableCategory {
1269            parameter: String::from("Graupel (Snow Pellets) Precipitation Rate"),
1270            units: String::from("kg m-2 s-1"),
1271            abbrev: String::from("GPRATE"),
1272        },
1273        76 => TableCategory {
1274            parameter: String::from("Convective Rain Rate"),
1275            units: String::from("kg m-2 s-1"),
1276            abbrev: String::from("CRRATE"),
1277        },
1278        77 => TableCategory {
1279            parameter: String::from("Large Scale Rain Rate"),
1280            units: String::from("kg m-2 s-1"),
1281            abbrev: String::from("LSRRATE"),
1282        },
1283        78 => TableCategory {
1284            parameter: String::from(
1285                "Total Column Integrated Water (All components including precipitation)",
1286            ),
1287            units: String::from("kg m-2"),
1288            abbrev: String::from("TCOLWA"),
1289        },
1290        79 => TableCategory {
1291            parameter: String::from("Evaporation Rate"),
1292            units: String::from("kg m-2 s-1"),
1293            abbrev: String::from("EVARATE"),
1294        },
1295        80 => TableCategory {
1296            parameter: String::from("Total Condensate"),
1297            units: String::from("kg kg-1"),
1298            abbrev: String::from("TOTCON"),
1299        },
1300        81 => TableCategory {
1301            parameter: String::from("Total Column-Integrated Condensate"),
1302            units: String::from("kg m-2"),
1303            abbrev: String::from("TCICON"),
1304        },
1305        82 => TableCategory {
1306            parameter: String::from("Cloud Ice Mixing Ratio"),
1307            units: String::from("kg kg-1"),
1308            abbrev: String::from("CIMIXR"),
1309        },
1310        83 => TableCategory {
1311            parameter: String::from("Specific Cloud Liquid Water Content"),
1312            units: String::from("kg kg-1"),
1313            abbrev: String::from("SCLLWC"),
1314        },
1315        84 => TableCategory {
1316            parameter: String::from("Specific Cloud Ice Water Content"),
1317            units: String::from("kg kg-1"),
1318            abbrev: String::from("SCLIWC"),
1319        },
1320        85 => TableCategory {
1321            parameter: String::from("Specific Rain Water Content"),
1322            units: String::from("kg kg-1"),
1323            abbrev: String::from("SRAINW"),
1324        },
1325        86 => TableCategory {
1326            parameter: String::from("Specific Snow Water Content"),
1327            units: String::from("kg kg-1"),
1328            abbrev: String::from("SSNOWW"),
1329        },
1330        87 => TableCategory {
1331            parameter: String::from("Stratiform Precipitation Rate"),
1332            units: String::from("kg m-2 s-1"),
1333            abbrev: String::from("STRPRATE"),
1334        },
1335        88 => TableCategory {
1336            parameter: String::from("Categorical Convective Precipitation"),
1337            units: String::from("Code table 4.222"),
1338            abbrev: String::from("CATCP"),
1339        },
1340        89 => TableCategory {
1341            parameter: String::from("Reserved"),
1342            units: String::from(""),
1343            abbrev: String::from("Reserved"),
1344        }, // Reserved
1345        90 => TableCategory {
1346            parameter: String::from("Total Kinematic Moisture Flux"),
1347            units: String::from("kg kg-1 m s-1"),
1348            abbrev: String::from("TKMFLX"),
1349        },
1350        91 => TableCategory {
1351            parameter: String::from("U-component (zonal) Kinematic Moisture Flux"),
1352            units: String::from("kg kg-1 m s-1"),
1353            abbrev: String::from("UKMFLX"),
1354        },
1355        92 => TableCategory {
1356            parameter: String::from("V-component (meridional) Kinematic Moisture Flux"),
1357            units: String::from("kg kg-1 m s-1"),
1358            abbrev: String::from("VKMFLX"),
1359        },
1360        93 => TableCategory {
1361            parameter: String::from("Relative Humidity With Respect to Water"),
1362            units: String::from("%"),
1363            abbrev: String::from("RHWATER"),
1364        },
1365        94 => TableCategory {
1366            parameter: String::from("Relative Humidity With Respect to Ice"),
1367            units: String::from("%"),
1368            abbrev: String::from("RHICE"),
1369        },
1370        95 => TableCategory {
1371            parameter: String::from("Freezing or Frozen Precipitation Rate"),
1372            units: String::from("kg m-2 s-1"),
1373            abbrev: String::from("FZPRATE"),
1374        },
1375        96 => TableCategory {
1376            parameter: String::from("Mass Density of Rain"),
1377            units: String::from("kg m-3"),
1378            abbrev: String::from("MASSDR"),
1379        },
1380        97 => TableCategory {
1381            parameter: String::from("Mass Density of Snow"),
1382            units: String::from("kg m-3"),
1383            abbrev: String::from("MASSDS"),
1384        },
1385        98 => TableCategory {
1386            parameter: String::from("Mass Density of Graupel"),
1387            units: String::from("kg m-3"),
1388            abbrev: String::from("MASSDG"),
1389        },
1390        99 => TableCategory {
1391            parameter: String::from("Mass Density of Hail"),
1392            units: String::from("kg m-3"),
1393            abbrev: String::from("MASSDH"),
1394        },
1395        100 => TableCategory {
1396            parameter: String::from("Specific Number Concentration of Rain"),
1397            units: String::from("kg-1"),
1398            abbrev: String::from("SPNCR"),
1399        },
1400        101 => TableCategory {
1401            parameter: String::from("Specific Number Concentration of Snow"),
1402            units: String::from("kg-1"),
1403            abbrev: String::from("SPNCS"),
1404        },
1405        102 => TableCategory {
1406            parameter: String::from("Specific Number Concentration of Graupel"),
1407            units: String::from("kg-1"),
1408            abbrev: String::from("SPNCG"),
1409        },
1410        103 => TableCategory {
1411            parameter: String::from("Specific Number Concentration of Hail"),
1412            units: String::from("kg-1"),
1413            abbrev: String::from("SPNCH"),
1414        },
1415        104 => TableCategory {
1416            parameter: String::from("Number Density of Rain"),
1417            units: String::from("m-3"),
1418            abbrev: String::from("NUMDR"),
1419        },
1420        105 => TableCategory {
1421            parameter: String::from("Number Density of Snow"),
1422            units: String::from("m-3"),
1423            abbrev: String::from("NUMDS"),
1424        },
1425        106 => TableCategory {
1426            parameter: String::from("Number Density of Graupel"),
1427            units: String::from("m-3"),
1428            abbrev: String::from("NUMDG"),
1429        },
1430        107 => TableCategory {
1431            parameter: String::from("Number Density of Hail"),
1432            units: String::from("m-3"),
1433            abbrev: String::from("NUMDH"),
1434        },
1435        108 => TableCategory {
1436            parameter: String::from("Specific Humidity Tendency due to Parameterizations"),
1437            units: String::from("kg kg-1 s-1"),
1438            abbrev: String::from("SHTPRM"),
1439        },
1440        109 => TableCategory {
1441            parameter: String::from(
1442                "Mass Density of Liquid Water Coating on Hail Expressed as Mass of Liquid Water \
1443                 per Unit Volume of Air",
1444            ),
1445            units: String::from("kg m-3"),
1446            abbrev: String::from("MDLWHVA"),
1447        },
1448        110 => TableCategory {
1449            parameter: String::from(
1450                "Specific Mass of Liquid Water Coating on Hail Expressed as Mass of Liquid Water \
1451                 per Unit Mass of Moist Air",
1452            ),
1453            units: String::from("kg kg-1"),
1454            abbrev: String::from("SMLWHMA"),
1455        },
1456        111 => TableCategory {
1457            parameter: String::from(
1458                "Mass Mixing Ratio of Liquid Water Coating on Hail Expressed as Mass of Liquid \
1459                 Water per Unit Mass of Dry Air",
1460            ),
1461            units: String::from("kg kg-1"),
1462            abbrev: String::from("MMLWHDA"),
1463        },
1464        112 => TableCategory {
1465            parameter: String::from(
1466                "Mass Density of Liquid Water Coating on Graupel Expressed as Mass of Liquid \
1467                 Water per Unit Volume of Air",
1468            ),
1469            units: String::from("kg m-3"),
1470            abbrev: String::from("MDLWGVA"),
1471        },
1472        113 => TableCategory {
1473            parameter: String::from(
1474                "Specific Mass of Liquid Water Coating on Graupel Expressed as Mass of Liquid \
1475                 Water per Unit Mass of Moist Air",
1476            ),
1477            units: String::from("kg kg-1"),
1478            abbrev: String::from("SMLWGMA"),
1479        },
1480        114 => TableCategory {
1481            parameter: String::from(
1482                "Mass Mixing Ratio of Liquid Water Coating on Graupel Expressed as Mass of Liquid \
1483                 Water per Unit Mass of Dry Air",
1484            ),
1485            units: String::from("kg kg-1"),
1486            abbrev: String::from("MMLWGDA"),
1487        },
1488        115 => TableCategory {
1489            parameter: String::from(
1490                "Mass Density of Liquid Water Coating on Snow Expressed as Mass of Liquid Water \
1491                 per Unit Volume of Air",
1492            ),
1493            units: String::from("kg m-3"),
1494            abbrev: String::from("MDLWSVA"),
1495        },
1496        116 => TableCategory {
1497            parameter: String::from(
1498                "Specific Mass of Liquid Water Coating on Snow Expressed as Mass of Liquid Water \
1499                 per Unit Mass of Moist Air",
1500            ),
1501            units: String::from("kg kg-1"),
1502            abbrev: String::from("SMLWSMA"),
1503        },
1504        117 => TableCategory {
1505            parameter: String::from(
1506                "Mass Mixing Ratio of Liquid Water Coating on Snow Expressed as Mass of Liquid \
1507                 Water per Unit Mass of Dry Air",
1508            ),
1509            units: String::from("kg kg-1"),
1510            abbrev: String::from("MMLWSDA"),
1511        },
1512        118 => TableCategory {
1513            parameter: String::from("Unbalanced Component of Specific Humidity"),
1514            units: String::from("kg kg-1"),
1515            abbrev: String::from("UNCSH"),
1516        },
1517        119 => TableCategory {
1518            parameter: String::from("Unbalanced Component of Specific Cloud Liquid Water content"),
1519            units: String::from("kg kg-1"),
1520            abbrev: String::from("UCSCLW"),
1521        },
1522        120 => TableCategory {
1523            parameter: String::from("Unbalanced Component of Specific Cloud Ice Water content"),
1524            units: String::from("kg kg-1"),
1525            abbrev: String::from("UCSCIW"),
1526        },
1527        121 => TableCategory {
1528            parameter: String::from("Fraction of Snow Cover"),
1529            units: String::from("Proportion"),
1530            abbrev: String::from("FSNOWC"),
1531        },
1532        122 => TableCategory {
1533            parameter: String::from("Precipitation intensity index"),
1534            units: String::from("See Table 4.247"),
1535            abbrev: String::from("PIIDX"),
1536        },
1537        123 => TableCategory {
1538            parameter: String::from("Dominant precipitation type"),
1539            units: String::from("See Table 4.201"),
1540            abbrev: String::from("DPTYPE"),
1541        },
1542        124 => TableCategory {
1543            parameter: String::from("Presence of showers"),
1544            units: String::from("See Table 4.222"),
1545            abbrev: String::from("PSHOW"),
1546        },
1547        125 => TableCategory {
1548            parameter: String::from("Presence of blowing snow"),
1549            units: String::from("See Table 4.222"),
1550            abbrev: String::from("PBSNOW"),
1551        },
1552        126 => TableCategory {
1553            parameter: String::from("Presence of blizzard"),
1554            units: String::from("See Table 4.222"),
1555            abbrev: String::from("PBLIZZ"),
1556        },
1557        127 => TableCategory {
1558            parameter: String::from("Ice pellets (non-water equivalent) precipitation rate"),
1559            units: String::from("m s-1"),
1560            abbrev: String::from("ICEP"),
1561        },
1562        128 => TableCategory {
1563            parameter: String::from("Total solid precipitation rate"),
1564            units: String::from("kg m-2 s-1"),
1565            abbrev: String::from("TSPRATE"),
1566        },
1567        129 => TableCategory {
1568            parameter: String::from("Effective Radius of Cloud Water"),
1569            units: String::from("m"),
1570            abbrev: String::from("EFRCWAT"),
1571        },
1572        130 => TableCategory {
1573            parameter: String::from("Effective Radius of Rain"),
1574            units: String::from("m"),
1575            abbrev: String::from("EFRRAIN"),
1576        },
1577        131 => TableCategory {
1578            parameter: String::from("Effective Radius of Cloud Ice"),
1579            units: String::from("m"),
1580            abbrev: String::from("EFRCICE"),
1581        },
1582        132 => TableCategory {
1583            parameter: String::from("Effective Radius of Snow"),
1584            units: String::from("m"),
1585            abbrev: String::from("EFRSNOW"),
1586        },
1587        133 => TableCategory {
1588            parameter: String::from("Effective Radius of Graupel"),
1589            units: String::from("m"),
1590            abbrev: String::from("EFRGRL"),
1591        },
1592        134 => TableCategory {
1593            parameter: String::from("Effective Radius of Hail"),
1594            units: String::from("m"),
1595            abbrev: String::from("EFRHAIL"),
1596        },
1597        135 => TableCategory {
1598            parameter: String::from("Effective Radius of Subgrid Liquid Clouds"),
1599            units: String::from("m"),
1600            abbrev: String::from("EFRSLC"),
1601        },
1602        136 => TableCategory {
1603            parameter: String::from("Effective Radius of Subgrid Ice Clouds"),
1604            units: String::from("m"),
1605            abbrev: String::from("EFRSICEC"),
1606        },
1607        137 => TableCategory {
1608            parameter: String::from("Effective Aspect Ratio of Rain"),
1609            units: String::from(""),
1610            abbrev: String::from("EFARRAIN"),
1611        },
1612        138 => TableCategory {
1613            parameter: String::from("Effective Aspect Ratio of Cloud Ice"),
1614            units: String::from(""),
1615            abbrev: String::from("EFARCICE"),
1616        },
1617        139 => TableCategory {
1618            parameter: String::from("Effective Aspect Ratio of Snow"),
1619            units: String::from(""),
1620            abbrev: String::from("EFARSNOW"),
1621        },
1622        140 => TableCategory {
1623            parameter: String::from("Effective Aspect Ratio of Graupel"),
1624            units: String::from(""),
1625            abbrev: String::from("EFARGRL"),
1626        },
1627        141 => TableCategory {
1628            parameter: String::from("Effective Aspect Ratio of Hail"),
1629            units: String::from(""),
1630            abbrev: String::from("EFARHAIL"),
1631        },
1632        142 => TableCategory {
1633            parameter: String::from("Effective Aspect Ratio of Subgrid Ice Clouds"),
1634            units: String::from(""),
1635            abbrev: String::from("EFARSIC"),
1636        },
1637        143 => TableCategory {
1638            parameter: String::from("Potential evaporation rate"),
1639            units: String::from("kg m-2 s-1"),
1640            abbrev: String::from("PERATE"),
1641        },
1642        144 => TableCategory {
1643            parameter: String::from("Specific rain water content (convective)"),
1644            units: String::from("kg kg-1"),
1645            abbrev: String::from("SRWATERC"),
1646        },
1647        145 => TableCategory {
1648            parameter: String::from("Specific snow water content (convective)"),
1649            units: String::from("kg kg-1"),
1650            abbrev: String::from("SSNOWWC"),
1651        },
1652        146 => TableCategory {
1653            parameter: String::from("Cloud ice precipitation rate"),
1654            units: String::from("kg m-2 s-1"),
1655            abbrev: String::from("CICEPR"),
1656        },
1657        147 => TableCategory {
1658            parameter: String::from("Character of precipitation"),
1659            units: String::from("See Table 4.249"),
1660            abbrev: String::from("CHPRECIP"),
1661        },
1662        148 => TableCategory {
1663            parameter: String::from("Snow evaporation rate"),
1664            units: String::from("kg m-2 s-1"),
1665            abbrev: String::from("SNOWERAT"),
1666        },
1667        149 => TableCategory {
1668            parameter: String::from("Cloud water mixing ratio"),
1669            units: String::from("kg kg-1"),
1670            abbrev: String::from("CWATERMR"),
1671        },
1672        150 => TableCategory {
1673            parameter: String::from("Column integrated eastward water vapour mass flux"),
1674            units: String::from("kg m-1s-1"),
1675            abbrev: String::from("CEWVMF"),
1676        },
1677        151 => TableCategory {
1678            parameter: String::from("Column integrated northward water vapour mass flux"),
1679            units: String::from("kg m-1s-1"),
1680            abbrev: String::from("CNWVMF"),
1681        },
1682        152 => TableCategory {
1683            parameter: String::from("Column integrated eastward cloud liquid water mass flux"),
1684            units: String::from("kg m-1s-1"),
1685            abbrev: String::from("CECLWMF"),
1686        },
1687        153 => TableCategory {
1688            parameter: String::from("Column integrated northward cloud liquid water mass flux"),
1689            units: String::from("kg m-1s-1"),
1690            abbrev: String::from("CNCLWMF"),
1691        },
1692        154 => TableCategory {
1693            parameter: String::from("Column integrated eastward cloud ice mass flux"),
1694            units: String::from("kg m-1s-1"),
1695            abbrev: String::from("CECIMF"),
1696        },
1697        155 => TableCategory {
1698            parameter: String::from("Column integrated northward cloud ice mass flux"),
1699            units: String::from("kg m-1s-1"),
1700            abbrev: String::from("CNCIMF"),
1701        },
1702        156 => TableCategory {
1703            parameter: String::from("Column integrated eastward rain mass flux"),
1704            units: String::from("kg m-1s-1"),
1705            abbrev: String::from("CERMF"),
1706        },
1707        157 => TableCategory {
1708            parameter: String::from("Column integrated northward rain mass flux"),
1709            units: String::from("kg m-1s-1"),
1710            abbrev: String::from("CNRMF"),
1711        },
1712        158 => TableCategory {
1713            parameter: String::from("Column integrated eastward snow mass flux"),
1714            units: String::from("kg m-1s-1"),
1715            abbrev: String::from("CEFMF"),
1716        },
1717        159 => TableCategory {
1718            parameter: String::from("Column integrated northward snow mass flux"),
1719            units: String::from("kg m-1s-1"),
1720            abbrev: String::from("CNSMF"),
1721        },
1722        160 => TableCategory {
1723            parameter: String::from("Column integrated divergence of water vapour mass flux"),
1724            units: String::from("kg m-1s-1"),
1725            abbrev: String::from("CDWFMF"),
1726        },
1727        161 => TableCategory {
1728            parameter: String::from("Column integrated divergence of cloud liquid water mass flux"),
1729            units: String::from("kg m-1s-1"),
1730            abbrev: String::from("CDCLWMF"),
1731        },
1732        162 => TableCategory {
1733            parameter: String::from("Column integrated divergence of cloud ice mass flux"),
1734            units: String::from("kg m-1s-1"),
1735            abbrev: String::from("CDCIMF"),
1736        },
1737        163 => TableCategory {
1738            parameter: String::from("Column integrated divergence of rain mass flux"),
1739            units: String::from("kg m-1s-1"),
1740            abbrev: String::from("CDRMF"),
1741        },
1742        164 => TableCategory {
1743            parameter: String::from("Column integrated divergence of snow mass flux"),
1744            units: String::from("kg m-1s-1"),
1745            abbrev: String::from("CDSMF"),
1746        },
1747        165 => TableCategory {
1748            parameter: String::from("Column integrated divergence of total water mass flux"),
1749            units: String::from("kg m-1s-1"),
1750            abbrev: String::from("CDTWMF"),
1751        },
1752        166 => TableCategory {
1753            parameter: String::from("Column integrated water vapour flux"),
1754            units: String::from("kg m-1s-1"),
1755            abbrev: String::from("CWVF"),
1756        },
1757        167 => TableCategory {
1758            parameter: String::from("Total column supercooled liquid water"),
1759            units: String::from("kg m-2"),
1760            abbrev: String::from("TCSLW"),
1761        },
1762        168 => TableCategory {
1763            parameter: String::from("Saturation specific humidity with respect to water"),
1764            units: String::from("kg m-3"),
1765            abbrev: String::from("SSPFHW"),
1766        },
1767        169 => TableCategory {
1768            parameter: String::from(
1769                "Total column integrated saturation specific humidity with respect to water",
1770            ),
1771            units: String::from("kg m-2"),
1772            abbrev: String::from("TCISSPFHW"),
1773        },
1774        192 => TableCategory {
1775            parameter: String::from("Categorical Rain"),
1776            units: String::from("Code table 4.222"),
1777            abbrev: String::from("CRAIN"),
1778        },
1779        193 => TableCategory {
1780            parameter: String::from("Categorical Freezing Rain"),
1781            units: String::from("Code table 4.222"),
1782            abbrev: String::from("CFRZR"),
1783        },
1784        194 => TableCategory {
1785            parameter: String::from("Categorical Ice Pellets"),
1786            units: String::from("Code table 4.222"),
1787            abbrev: String::from("CICEP"),
1788        },
1789        195 => TableCategory {
1790            parameter: String::from("Categorical Snow"),
1791            units: String::from("Code table 4.222"),
1792            abbrev: String::from("CSNOW"),
1793        },
1794        196 => TableCategory {
1795            parameter: String::from("Convective Precipitation Rate"),
1796            units: String::from("kg m-2 s-1"),
1797            abbrev: String::from("CPRAT"),
1798        },
1799        197 => TableCategory {
1800            parameter: String::from("Horizontal Moisture Divergence"),
1801            units: String::from("kg kg-1 s-1"),
1802            abbrev: String::from("MDIV"),
1803        },
1804        198 => TableCategory {
1805            parameter: String::from("Minimum Relative Humidity"),
1806            units: String::from("%"),
1807            abbrev: String::from("MINRH"),
1808        },
1809        199 => TableCategory {
1810            parameter: String::from("Potential Evaporation"),
1811            units: String::from("kg m-2"),
1812            abbrev: String::from("PEVAP"),
1813        },
1814        200 => TableCategory {
1815            parameter: String::from("Potential Evaporation Rate"),
1816            units: String::from("W m-2"),
1817            abbrev: String::from("PEVPR"),
1818        },
1819        201 => TableCategory {
1820            parameter: String::from("Snow Cover"),
1821            units: String::from("%"),
1822            abbrev: String::from("SNOWC"),
1823        },
1824        202 => TableCategory {
1825            parameter: String::from("Rain Fraction of Total Liquid Water"),
1826            units: String::from("non-dim"),
1827            abbrev: String::from("FRAIN"),
1828        },
1829        203 => TableCategory {
1830            parameter: String::from("Rime Factor"),
1831            units: String::from("non-dim"),
1832            abbrev: String::from("RIME"),
1833        },
1834        204 => TableCategory {
1835            parameter: String::from("Total Column Integrated Rain"),
1836            units: String::from("kg m-2"),
1837            abbrev: String::from("TCOLR"),
1838        },
1839        205 => TableCategory {
1840            parameter: String::from("Total Column Integrated Snow"),
1841            units: String::from("kg m-2"),
1842            abbrev: String::from("TCOLS"),
1843        },
1844        206 => TableCategory {
1845            parameter: String::from("Total Icing Potential Diagnostic"),
1846            units: String::from("non-dim"),
1847            abbrev: String::from("TIPD"),
1848        },
1849        207 => TableCategory {
1850            parameter: String::from("Number concentration for ice particles"),
1851            units: String::from("non-dim"),
1852            abbrev: String::from("NCIP"),
1853        },
1854        208 => TableCategory {
1855            parameter: String::from("Snow temperature"),
1856            units: String::from("K"),
1857            abbrev: String::from("SNOT"),
1858        },
1859        209 => TableCategory {
1860            parameter: String::from("Total column-integrated supercooled liquid water"),
1861            units: String::from("kg m-2"),
1862            abbrev: String::from("TCLSW"),
1863        },
1864        210 => TableCategory {
1865            parameter: String::from("Total column-integrated melting ice"),
1866            units: String::from("kg m-2"),
1867            abbrev: String::from("TCOLM"),
1868        },
1869        211 => TableCategory {
1870            parameter: String::from("Evaporation - Precipitation"),
1871            units: String::from("cm/day"),
1872            abbrev: String::from("EMNP"),
1873        },
1874        212 => TableCategory {
1875            parameter: String::from("Sublimation (evaporation from snow)"),
1876            units: String::from("W m-2"),
1877            abbrev: String::from("SBSNO"),
1878        },
1879        213 => TableCategory {
1880            parameter: String::from("Deep Convective Moistening Rate"),
1881            units: String::from("kg kg-1 s-1"),
1882            abbrev: String::from("CNVMR"),
1883        },
1884        214 => TableCategory {
1885            parameter: String::from("Shallow Convective Moistening Rate"),
1886            units: String::from("kg kg-1 s-1"),
1887            abbrev: String::from("SHAMR"),
1888        },
1889        215 => TableCategory {
1890            parameter: String::from("Vertical Diffusion Moistening Rate"),
1891            units: String::from("kg kg-1 s-1"),
1892            abbrev: String::from("VDFMR"),
1893        },
1894        216 => TableCategory {
1895            parameter: String::from("Condensation Pressure of Parcali"),
1896            units: String::from("Pa"),
1897            abbrev: String::from("CONDP"),
1898        },
1899        217 => TableCategory {
1900            parameter: String::from("Large scale moistening rate"),
1901            units: String::from("kg kg-1 s-1"),
1902            abbrev: String::from("LRGMR"),
1903        },
1904        218 => TableCategory {
1905            parameter: String::from("Specific humidity at top of viscous sublayer"),
1906            units: String::from("kg kg-1"),
1907            abbrev: String::from("QZ0"),
1908        },
1909        219 => TableCategory {
1910            parameter: String::from("Maximum specific humidity at 2m"),
1911            units: String::from("kg kg-1"),
1912            abbrev: String::from("QMAX"),
1913        },
1914        220 => TableCategory {
1915            parameter: String::from("Minimum specific humidity at 2m"),
1916            units: String::from("kg kg-1"),
1917            abbrev: String::from("QMIN"),
1918        },
1919        221 => TableCategory {
1920            parameter: String::from("Liquid precipitation (Rainfall)"),
1921            units: String::from("kg m-2"),
1922            abbrev: String::from("ARAIN"),
1923        },
1924        222 => TableCategory {
1925            parameter: String::from("Snow temperature, depth-avg"),
1926            units: String::from("K"),
1927            abbrev: String::from("SNOWT"),
1928        },
1929        223 => TableCategory {
1930            parameter: String::from("Total precipitation (nearest grid point)"),
1931            units: String::from("kg m-2"),
1932            abbrev: String::from("APCPN"),
1933        },
1934        224 => TableCategory {
1935            parameter: String::from("Convective precipitation (nearest grid point)"),
1936            units: String::from("kg m-2"),
1937            abbrev: String::from("ACPCPN"),
1938        },
1939        225 => TableCategory {
1940            parameter: String::from("Freezing Rain"),
1941            units: String::from("kg m-2"),
1942            abbrev: String::from("FRZR"),
1943        },
1944        226 => TableCategory {
1945            parameter: String::from("Dominant Weather"),
1946            units: String::from("Numeric"),
1947            abbrev: String::from("PWTHER"),
1948        },
1949        227 => TableCategory {
1950            parameter: String::from("Frozen Rain"),
1951            units: String::from("kg m-2"),
1952            abbrev: String::from("FROZR"),
1953        },
1954        228 => TableCategory {
1955            parameter: String::from("Flat Ice Accumulation (FRAM)"),
1956            units: String::from("kg m-2"),
1957            abbrev: String::from("FICEAC"),
1958        },
1959        229 => TableCategory {
1960            parameter: String::from("Line Ice Accumulation (FRAM)"),
1961            units: String::from("kg m-2"),
1962            abbrev: String::from("LICEAC"),
1963        },
1964        230 => TableCategory {
1965            parameter: String::from("Sleet Accumulation"),
1966            units: String::from("kg m-2"),
1967            abbrev: String::from("SLACC"),
1968        },
1969        231 => TableCategory {
1970            parameter: String::from("Precipitation Potential Index"),
1971            units: String::from("%"),
1972            abbrev: String::from("PPINDX"),
1973        },
1974        232 => TableCategory {
1975            parameter: String::from("Probability Cloud Ice Present"),
1976            units: String::from("%"),
1977            abbrev: String::from("PROBCIP"),
1978        },
1979        233 => TableCategory {
1980            parameter: String::from("Snow Liquid Ratio"),
1981            units: String::from("kg kg-1"),
1982            abbrev: String::from("SNOWLR"),
1983        },
1984        234 => TableCategory {
1985            parameter: String::from("Precipitation Duration"),
1986            units: String::from("hour"),
1987            abbrev: String::from("PCPDUR"),
1988        },
1989        235 => TableCategory {
1990            parameter: String::from("Cloud Liquid Mixing Ratio"),
1991            units: String::from("kg kg-1"),
1992            abbrev: String::from("CLLMR"),
1993        },
1994        241 => TableCategory {
1995            parameter: String::from("Total Snow"),
1996            units: String::from("kg m-2"),
1997            abbrev: String::from("TSNOW"),
1998        },
1999        242 => TableCategory {
2000            parameter: String::from("Relative Humidity with Respect to Precipitable Water"),
2001            units: String::from("%"),
2002            abbrev: String::from("RHPW"),
2003        },
2004        245 => TableCategory {
2005            parameter: String::from("Hourly Maximum of Column Vertical Integrated Graupel"),
2006            units: String::from("kg m-2"),
2007            abbrev: String::from("MAXVIG"),
2008        },
2009        255 => TableCategory {
2010            parameter: String::from("Missing"),
2011            units: String::from(""),
2012            abbrev: String::from(""),
2013        },
2014        170..=191 => TableCategory {
2015            parameter: String::from("Reserved"),
2016            units: String::from(""),
2017            abbrev: String::from("Reserved"),
2018        },
2019        236..=240 => TableCategory {
2020            parameter: String::from("Reserved"),
2021            units: String::from(""),
2022            abbrev: String::from("Reserved"),
2023        },
2024        _ => TableCategory {
2025            parameter: String::from("Reserved for Local Use"),
2026            units: String::from(""),
2027            abbrev: String::from("Reserved for Local Use"),
2028        },
2029    }
2030}
2031
2032/// # GRIB2 - TABLE 4.2-0-2
2033///
2034/// **Classification**: Meteorological products, Momentum category
2035///
2036/// **Available forms**: Numerical values
2037///
2038/// **Defined area**: Meteorological domain
2039///
2040/// **Alias**: Momentum, wind
2041///
2042/// **Domain**: Meteorological
2043///
2044/// **Input type**: Numerical
2045///
2046/// **Output type**: Numerical
2047///
2048/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 2.
2049///
2050/// # Arguments
2051/// * `category` - The parameter category within Discipline 0, Category 2 (u8).
2052///
2053/// # Returns
2054/// A `TableCategory` struct containing the description of the parameter category.
2055/// Returns a "Missing" TableCategory if the category is not found or is a special value.
2056pub fn grib2_lookup_table42_02(category: u8) -> TableCategory {
2057    match category {
2058        0 => TableCategory {
2059            parameter: String::from("Wind Direction (from which blowing)"),
2060            units: String::from("°"),
2061            abbrev: String::from("WDIR"),
2062        },
2063        1 => TableCategory {
2064            parameter: String::from("Wind Speed"),
2065            units: String::from("m s-1"),
2066            abbrev: String::from("WIND"),
2067        },
2068        2 => TableCategory {
2069            parameter: String::from("U-Component of Wind"),
2070            units: String::from("m s-1"),
2071            abbrev: String::from("UGRD"),
2072        },
2073        3 => TableCategory {
2074            parameter: String::from("V-Component of Wind"),
2075            units: String::from("m s-1"),
2076            abbrev: String::from("VGRD"),
2077        },
2078        4 => TableCategory {
2079            parameter: String::from("Stream Function"),
2080            units: String::from("m2 s-1"),
2081            abbrev: String::from("STRM"),
2082        },
2083        5 => TableCategory {
2084            parameter: String::from("Velocity Potential"),
2085            units: String::from("m2 s-1"),
2086            abbrev: String::from("VPOT"),
2087        },
2088        6 => TableCategory {
2089            parameter: String::from("Montgomery Stream Function"),
2090            units: String::from("m2 s-2"),
2091            abbrev: String::from("MNTSF"),
2092        },
2093        7 => TableCategory {
2094            parameter: String::from("Sigma Coordinate Vertical Velocity"),
2095            units: String::from("s-1"),
2096            abbrev: String::from("SGCVV"),
2097        },
2098        8 => TableCategory {
2099            parameter: String::from("Vertical Velocity (Pressure)"),
2100            units: String::from("Pa s-1"),
2101            abbrev: String::from("VVEL"),
2102        },
2103        9 => TableCategory {
2104            parameter: String::from("Vertical Velocity (Geometric)"),
2105            units: String::from("m s-1"),
2106            abbrev: String::from("DZDT"),
2107        },
2108        10 => TableCategory {
2109            parameter: String::from("Absolute Vorticity"),
2110            units: String::from("s-1"),
2111            abbrev: String::from("ABSV"),
2112        },
2113        11 => TableCategory {
2114            parameter: String::from("Absolute Divergence"),
2115            units: String::from("s-1"),
2116            abbrev: String::from("ABSD"),
2117        },
2118        12 => TableCategory {
2119            parameter: String::from("Relative Vorticity"),
2120            units: String::from("s-1"),
2121            abbrev: String::from("RELV"),
2122        },
2123        13 => TableCategory {
2124            parameter: String::from("Relative Divergence"),
2125            units: String::from("s-1"),
2126            abbrev: String::from("RELD"),
2127        },
2128        14 => TableCategory {
2129            parameter: String::from("Potential Vorticity"),
2130            units: String::from("K m2 kg-1 s-1"),
2131            abbrev: String::from("PVORT"),
2132        },
2133        15 => TableCategory {
2134            parameter: String::from("Vertical U-Component Shear"),
2135            units: String::from("s-1"),
2136            abbrev: String::from("VUCSH"),
2137        },
2138        16 => TableCategory {
2139            parameter: String::from("Vertical V-Component Shear"),
2140            units: String::from("s-1"),
2141            abbrev: String::from("VVCSH"),
2142        },
2143        17 => TableCategory {
2144            parameter: String::from("Momentum Flux, U-Component"),
2145            units: String::from("N m-2"),
2146            abbrev: String::from("UFLX"),
2147        },
2148        18 => TableCategory {
2149            parameter: String::from("Momentum Flux, V-Component"),
2150            units: String::from("N m-2"),
2151            abbrev: String::from("VFLX"),
2152        },
2153        19 => TableCategory {
2154            parameter: String::from("Wind Mixing Energy"),
2155            units: String::from("J"),
2156            abbrev: String::from("WMIXE"),
2157        },
2158        20 => TableCategory {
2159            parameter: String::from("Boundary Layer Dissipation"),
2160            units: String::from("W m-2"),
2161            abbrev: String::from("BLYDP"),
2162        },
2163        21 => TableCategory {
2164            parameter: String::from("Maximum Wind Speed"),
2165            units: String::from("m s-1"),
2166            abbrev: String::from("MAXGUST"),
2167        },
2168        22 => TableCategory {
2169            parameter: String::from("Wind Speed (Gust)"),
2170            units: String::from("m s-1"),
2171            abbrev: String::from("GUST"),
2172        },
2173        23 => TableCategory {
2174            parameter: String::from("U-Component of Wind (Gust)"),
2175            units: String::from("m s-1"),
2176            abbrev: String::from("UGUST"),
2177        },
2178        24 => TableCategory {
2179            parameter: String::from("V-Component of Wind (Gust)"),
2180            units: String::from("m s-1"),
2181            abbrev: String::from("VGUST"),
2182        },
2183        25 => TableCategory {
2184            parameter: String::from("Vertical Speed Shear"),
2185            units: String::from("s-1"),
2186            abbrev: String::from("VWSH"),
2187        },
2188        26 => TableCategory {
2189            parameter: String::from("Horizontal Momentum Flux"),
2190            units: String::from("N m-2"),
2191            abbrev: String::from("MFLX"),
2192        },
2193        27 => TableCategory {
2194            parameter: String::from("U-Component Storm Motion"),
2195            units: String::from("m s-1"),
2196            abbrev: String::from("USTM"),
2197        },
2198        28 => TableCategory {
2199            parameter: String::from("V-Component Storm Motion"),
2200            units: String::from("m s-1"),
2201            abbrev: String::from("VSTM"),
2202        },
2203        29 => TableCategory {
2204            parameter: String::from("Drag Coefficient"),
2205            units: String::from("Numeric"),
2206            abbrev: String::from("CD"),
2207        },
2208        30 => TableCategory {
2209            parameter: String::from("Frictional Velocity"),
2210            units: String::from("m s-1"),
2211            abbrev: String::from("FRICV"),
2212        },
2213        31 => TableCategory {
2214            parameter: String::from("Turbulent Diffusion Coefficient for Momentum"),
2215            units: String::from("m2 s-1"),
2216            abbrev: String::from("TDCMOM"),
2217        },
2218        32 => TableCategory {
2219            parameter: String::from("Eta Coordinate Vertical Velocity"),
2220            units: String::from("s-1"),
2221            abbrev: String::from("ETACVV"),
2222        },
2223        33 => TableCategory {
2224            parameter: String::from("Wind Fetch"),
2225            units: String::from("m"),
2226            abbrev: String::from("WINDF"),
2227        },
2228        34 => TableCategory {
2229            parameter: String::from("Normal Wind Component"),
2230            units: String::from("m s-1"),
2231            abbrev: String::from("NWIND"),
2232        },
2233        35 => TableCategory {
2234            parameter: String::from("Tangential Wind Component"),
2235            units: String::from("m s-1"),
2236            abbrev: String::from("TWIND"),
2237        },
2238        36 => TableCategory {
2239            parameter: String::from("Amplitude Function for Rossby Wave Envelope"),
2240            units: String::from("m s-1"),
2241            abbrev: String::from("AFRWE"),
2242        },
2243        37 => TableCategory {
2244            parameter: String::from("Northward Turbulent Surface Stress"),
2245            units: String::from("N m-2 s"),
2246            abbrev: String::from("NTSS"),
2247        },
2248        38 => TableCategory {
2249            parameter: String::from("Eastward Turbulent Surface Stress"),
2250            units: String::from("N m-2 s"),
2251            abbrev: String::from("ETSS"),
2252        },
2253        39 => TableCategory {
2254            parameter: String::from("Eastward Wind Tendency Due to Parameterizations"),
2255            units: String::from("m s-2"),
2256            abbrev: String::from("EWTPARM"),
2257        },
2258        40 => TableCategory {
2259            parameter: String::from("Northward Wind Tendency Due to Parameterizations"),
2260            units: String::from("m s-2"),
2261            abbrev: String::from("NWTPARM"),
2262        },
2263        41 => TableCategory {
2264            parameter: String::from("U-Component of Geostrophic Wind"),
2265            units: String::from("m s-1"),
2266            abbrev: String::from("UGWIND"),
2267        },
2268        42 => TableCategory {
2269            parameter: String::from("V-Component of Geostrophic Wind"),
2270            units: String::from("m s-1"),
2271            abbrev: String::from("VGWIND"),
2272        },
2273        43 => TableCategory {
2274            parameter: String::from("Geostrophic Wind Direction"),
2275            units: String::from("°"),
2276            abbrev: String::from("GEOWD"),
2277        },
2278        44 => TableCategory {
2279            parameter: String::from("Geostrophic Wind Speed"),
2280            units: String::from("m s-1"),
2281            abbrev: String::from("GEOWS"),
2282        },
2283        45 => TableCategory {
2284            parameter: String::from("Unbalanced Component of Divergence"),
2285            units: String::from("s-1"),
2286            abbrev: String::from("UNDIV"),
2287        },
2288        46 => TableCategory {
2289            parameter: String::from("Vorticity Advection"),
2290            units: String::from("s-2"),
2291            abbrev: String::from("VORTADV"),
2292        },
2293        47 => TableCategory {
2294            parameter: String::from("Surface Roughness for Heat"),
2295            units: String::from("m"),
2296            abbrev: String::from("SFRHEAT"),
2297        },
2298        48 => TableCategory {
2299            parameter: String::from("Surface Roughness for Moisture"),
2300            units: String::from("m"),
2301            abbrev: String::from("SFRMOIST"),
2302        },
2303        49 => TableCategory {
2304            parameter: String::from("Wind Stress"),
2305            units: String::from("N m-2"),
2306            abbrev: String::from("WINDSTR"),
2307        },
2308        50 => TableCategory {
2309            parameter: String::from("Eastward Wind Stress"),
2310            units: String::from("N m-2"),
2311            abbrev: String::from("EWINDSTR"),
2312        },
2313        51 => TableCategory {
2314            parameter: String::from("Northward Wind Stress"),
2315            units: String::from("N m-2"),
2316            abbrev: String::from("NWINDSTR"),
2317        },
2318        52 => TableCategory {
2319            parameter: String::from("U-Component of Wind Stress"),
2320            units: String::from("N m-2"),
2321            abbrev: String::from("UWINDSTR"),
2322        },
2323        53 => TableCategory {
2324            parameter: String::from("V-Component of Wind Stress"),
2325            units: String::from("N m-2"),
2326            abbrev: String::from("VWINDSTR"),
2327        },
2328        54 => TableCategory {
2329            parameter: String::from("Natural Logarithm of Surface Roughness Length for Heat"),
2330            units: String::from("m"),
2331            abbrev: String::from("NLSRLH"),
2332        },
2333        55 => TableCategory {
2334            parameter: String::from("Natural Logarithm of Surface Roughness Length for Moisture"),
2335            units: String::from("m"),
2336            abbrev: String::from("NLSRLM"),
2337        },
2338        56 => TableCategory {
2339            parameter: String::from("U-Component of Neutral Wind"),
2340            units: String::from("m s-1"),
2341            abbrev: String::from("UNWIND"),
2342        },
2343        57 => TableCategory {
2344            parameter: String::from("V-Component of Neutral Wind"),
2345            units: String::from("m s-1"),
2346            abbrev: String::from("VNWIND"),
2347        },
2348        58 => TableCategory {
2349            parameter: String::from("Magnitude of Turbulent Surface Stress"),
2350            units: String::from("N m-2"),
2351            abbrev: String::from("TSFCSTR"),
2352        },
2353        59 => TableCategory {
2354            parameter: String::from("Vertical Divergence"),
2355            units: String::from("s-1"),
2356            abbrev: String::from("VDIV"),
2357        },
2358        60 => TableCategory {
2359            parameter: String::from("Drag Thermal Coefficient"),
2360            units: String::from("Numeric"),
2361            abbrev: String::from("DTC"),
2362        },
2363        61 => TableCategory {
2364            parameter: String::from("Drag Evaporation Coefficient"),
2365            units: String::from("Numeric"),
2366            abbrev: String::from("DEC"),
2367        },
2368        62 => TableCategory {
2369            parameter: String::from("Eastward Turbulent Surface Stress"),
2370            units: String::from("N m-2"),
2371            abbrev: String::from("EASTTSS"),
2372        },
2373        63 => TableCategory {
2374            parameter: String::from("Northward Turbulent Surface Stress"),
2375            units: String::from("N m-2"),
2376            abbrev: String::from("NRTHTSS"),
2377        },
2378        192 => TableCategory {
2379            parameter: String::from("Vertical Speed Shear"),
2380            units: String::from("s-1"),
2381            abbrev: String::from("VWSH"),
2382        },
2383        193 => TableCategory {
2384            parameter: String::from("Horizontal Momentum Flux"),
2385            units: String::from("N m-2"),
2386            abbrev: String::from("MFLX"),
2387        },
2388        194 => TableCategory {
2389            parameter: String::from("U-Component Storm Motion"),
2390            units: String::from("m s-1"),
2391            abbrev: String::from("USTM"),
2392        },
2393        195 => TableCategory {
2394            parameter: String::from("V-Component Storm Motion"),
2395            units: String::from("m s-1"),
2396            abbrev: String::from("VSTM"),
2397        },
2398        196 => TableCategory {
2399            parameter: String::from("Drag Coefficient"),
2400            units: String::from("non-dim"),
2401            abbrev: String::from("CD"),
2402        },
2403        197 => TableCategory {
2404            parameter: String::from("Frictional Velocity"),
2405            units: String::from("m s-1"),
2406            abbrev: String::from("FRICV"),
2407        },
2408        198 => TableCategory {
2409            parameter: String::from("Latitude of U Wind Component of Velocity"),
2410            units: String::from("deg"),
2411            abbrev: String::from("LAUV"),
2412        },
2413        199 => TableCategory {
2414            parameter: String::from("Longitude of U Wind Component of Velocity"),
2415            units: String::from("deg"),
2416            abbrev: String::from("LOUV"),
2417        },
2418        200 => TableCategory {
2419            parameter: String::from("Latitude of V Wind Component of Velocity"),
2420            units: String::from("deg"),
2421            abbrev: String::from("LAVV"),
2422        },
2423        201 => TableCategory {
2424            parameter: String::from("Longitude of V Wind Component of Velocity"),
2425            units: String::from("deg"),
2426            abbrev: String::from("LOVV"),
2427        },
2428        202 => TableCategory {
2429            parameter: String::from("Latitude of Pressure Point"),
2430            units: String::from("deg"),
2431            abbrev: String::from("LAPP"),
2432        },
2433        203 => TableCategory {
2434            parameter: String::from("Longitude of Pressure Point"),
2435            units: String::from("deg"),
2436            abbrev: String::from("LOPP"),
2437        },
2438        204 => TableCategory {
2439            parameter: String::from("Vertical Eddy Diffusivity Heat Exchange"),
2440            units: String::from("m2 s-1"),
2441            abbrev: String::from("VEDH"),
2442        },
2443        205 => TableCategory {
2444            parameter: String::from(
2445                "Covariance between Meridional and Zonal Components of the Wind",
2446            ),
2447            units: String::from("m2 s-2"),
2448            abbrev: String::from("COVMZ"),
2449        },
2450        206 => TableCategory {
2451            parameter: String::from(
2452                "Covariance between Temperature and Zonal Components of the Wind",
2453            ),
2454            units: String::from("K*m s-1"),
2455            abbrev: String::from("COVTZ"),
2456        },
2457        207 => TableCategory {
2458            parameter: String::from(
2459                "Covariance between Temperature and Meridional Components of the Wind",
2460            ),
2461            units: String::from("K*m s-1"),
2462            abbrev: String::from("COVTM"),
2463        },
2464        208 => TableCategory {
2465            parameter: String::from("Vertical Diffusion Zonal Acceleration"),
2466            units: String::from("m s-2"),
2467            abbrev: String::from("VDFUA"),
2468        },
2469        209 => TableCategory {
2470            parameter: String::from("Vertical Diffusion Meridional Acceleration"),
2471            units: String::from("m s-2"),
2472            abbrev: String::from("VDFVA"),
2473        },
2474        210 => TableCategory {
2475            parameter: String::from("Gravity Wave Drag Zonal Acceleration"),
2476            units: String::from("m s-2"),
2477            abbrev: String::from("GWDU"),
2478        },
2479        211 => TableCategory {
2480            parameter: String::from("Gravity Wave Drag Meridional Acceleration"),
2481            units: String::from("m s-2"),
2482            abbrev: String::from("GWDV"),
2483        },
2484        212 => TableCategory {
2485            parameter: String::from("Convective Zonal Momentum Mixing Acceleration"),
2486            units: String::from("m s-2"),
2487            abbrev: String::from("CNVU"),
2488        },
2489        213 => TableCategory {
2490            parameter: String::from("Convective Meridional Momentum Mixing Acceleration"),
2491            units: String::from("m s-2"),
2492            abbrev: String::from("CNVV"),
2493        },
2494        214 => TableCategory {
2495            parameter: String::from("Tendency of Vertical Velocity"),
2496            units: String::from("m s-2"),
2497            abbrev: String::from("WTEND"),
2498        },
2499        215 => TableCategory {
2500            parameter: String::from("Omega (Dp/Dt) Divide by Density"),
2501            units: String::from("K"),
2502            abbrev: String::from("OMGALF"),
2503        },
2504        216 => TableCategory {
2505            parameter: String::from("Convective Gravity Wave Drag Zonal Acceleration"),
2506            units: String::from("m s-2"),
2507            abbrev: String::from("CNGWDU"),
2508        },
2509        217 => TableCategory {
2510            parameter: String::from("Convective Gravity Wave Drag Meridional Acceleration"),
2511            units: String::from("m s-2"),
2512            abbrev: String::from("CNGWDV"),
2513        },
2514        218 => TableCategory {
2515            parameter: String::from("Velocity Point Model Surface"),
2516            units: String::from("m"),
2517            abbrev: String::from("LMV"),
2518        },
2519        219 => TableCategory {
2520            parameter: String::from("Potential Vorticity (Mass-Weighted)"),
2521            units: String::from("1/s/m"),
2522            abbrev: String::from("PVMWW"),
2523        },
2524        220 => TableCategory {
2525            parameter: String::from("Hourly Maximum of Upward Vertical Velocity"),
2526            units: String::from("m s-1"),
2527            abbrev: String::from("MAXUVV"),
2528        },
2529        221 => TableCategory {
2530            parameter: String::from("Hourly Maximum of Downward Vertical Velocity"),
2531            units: String::from("m s-1"),
2532            abbrev: String::from("MAXDVV"),
2533        },
2534        222 => TableCategory {
2535            parameter: String::from("U Component of Hourly Maximum 10m Wind Speed"),
2536            units: String::from("m s-1"),
2537            abbrev: String::from("MAXUW"),
2538        },
2539        223 => TableCategory {
2540            parameter: String::from("V Component of Hourly Maximum 10m Wind Speed"),
2541            units: String::from("m s-1"),
2542            abbrev: String::from("MAXVW"),
2543        },
2544        224 => TableCategory {
2545            parameter: String::from("Ventilation Rate"),
2546            units: String::from("m2 s-1"),
2547            abbrev: String::from("VRATE"),
2548        },
2549        225 => TableCategory {
2550            parameter: String::from("Transport Wind Speed"),
2551            units: String::from("m s-1"),
2552            abbrev: String::from("TRWSPD"),
2553        },
2554        226 => TableCategory {
2555            parameter: String::from("Transport Wind Direction"),
2556            units: String::from("°"),
2557            abbrev: String::from("TRWDIR"),
2558        },
2559        227 => TableCategory {
2560            parameter: String::from("Earliest Reasonable Arrival Time (10% Exceedance)"),
2561            units: String::from("s"),
2562            abbrev: String::from("TOA10"),
2563        },
2564        228 => TableCategory {
2565            parameter: String::from("Most Likely Arrival Time (50% Exceedance)"),
2566            units: String::from("s"),
2567            abbrev: String::from("TOA50"),
2568        },
2569        229 => TableCategory {
2570            parameter: String::from("Most Likely Departure Time (50% Exceedance)"),
2571            units: String::from("s"),
2572            abbrev: String::from("TOD50"),
2573        },
2574        230 => TableCategory {
2575            parameter: String::from("Latest Reasonable Departure Time (90% Exceedance)"),
2576            units: String::from("s"),
2577            abbrev: String::from("TOD90"),
2578        },
2579        231 => TableCategory {
2580            parameter: String::from("Tropical Wind Direction"),
2581            units: String::from("°"),
2582            abbrev: String::from("TPWDIR"),
2583        },
2584        232 => TableCategory {
2585            parameter: String::from("Tropical Wind Speed"),
2586            units: String::from("m s-1"),
2587            abbrev: String::from("TPWSPD"),
2588        },
2589        233 => TableCategory {
2590            parameter: String::from("Inflow Based (ESFC) to 50% EL Shear Magnitude"),
2591            units: String::from("kt"),
2592            abbrev: String::from("ESHR"),
2593        },
2594        234 => TableCategory {
2595            parameter: String::from("U Component Inflow Based to 50% EL Shear Vector"),
2596            units: String::from("kt"),
2597            abbrev: String::from("UESH"),
2598        },
2599        235 => TableCategory {
2600            parameter: String::from("V Component Inflow Based to 50% EL Shear Vector"),
2601            units: String::from("kt"),
2602            abbrev: String::from("VESH"),
2603        },
2604        236 => TableCategory {
2605            parameter: String::from("U Component Bunkers Effective Right Motion"),
2606            units: String::from("kt"),
2607            abbrev: String::from("UEID"),
2608        },
2609        237 => TableCategory {
2610            parameter: String::from("V Component Bunkers Effective Right Motion"),
2611            units: String::from("kt"),
2612            abbrev: String::from("VEID"),
2613        },
2614        255 => TableCategory {
2615            parameter: String::from("Missing"),
2616            units: String::from(""),
2617            abbrev: String::from("Missing"),
2618        },
2619        64..=191 => TableCategory {
2620            parameter: String::from("Reserved"),
2621            units: String::from(""),
2622            abbrev: String::from("Reserved"),
2623        },
2624        _ => TableCategory {
2625            parameter: String::from("Reserved for Local Use"),
2626            units: String::from(""),
2627            abbrev: String::from("Reserved for Local Use"),
2628        },
2629    }
2630}
2631
2632/// # GRIB2 - TABLE 4.2-0-3
2633/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 3
2634/// (Meteorological products, Mass category)
2635/// In Section 0, Octet 7 = 0
2636/// In Section 4, Octet 10 = 3
2637/// Revised 12/07/2023
2638/// Red text depicts changes made since 06/23/2022
2639/// @see [GRIB2 - Table 4.2-0-3: Parameters for Discipline 0 Category 3 (Mass category)](https://www.example.com)
2640///
2641/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 3.
2642///
2643/// # Arguments
2644/// * `category` - The parameter category within Discipline 0, Category 3 (u8).
2645///
2646/// # Returns
2647/// A `TableCategory` struct containing the description of the parameter category.
2648/// Returns a "Missing" TableCategory if the category is not found or is a special value.
2649pub fn grib2_lookup_table42_03(category: u8) -> TableCategory {
2650    match category {
2651        0 => TableCategory {
2652            parameter: String::from("Pressure"),
2653            units: String::from("Pa"),
2654            abbrev: String::from("PRES"),
2655        },
2656        1 => TableCategory {
2657            parameter: String::from("Pressure Reduced to MSL"),
2658            units: String::from("Pa"),
2659            abbrev: String::from("PRMSL"),
2660        },
2661        2 => TableCategory {
2662            parameter: String::from("Pressure Tendency"),
2663            units: String::from("Pa s-1"),
2664            abbrev: String::from("PTEND"),
2665        },
2666        3 => TableCategory {
2667            parameter: String::from("ICAO Standard Atmosphere Reference Height"),
2668            units: String::from("m"),
2669            abbrev: String::from("ICAHT"),
2670        },
2671        4 => TableCategory {
2672            parameter: String::from("Geopotential"),
2673            units: String::from("m2 s-2"),
2674            abbrev: String::from("GP"),
2675        },
2676        5 => TableCategory {
2677            parameter: String::from("Geopotential Height"),
2678            units: String::from("gpm"),
2679            abbrev: String::from("HGT"),
2680        },
2681        6 => TableCategory {
2682            parameter: String::from("Geometric Height"),
2683            units: String::from("m"),
2684            abbrev: String::from("DIST"),
2685        },
2686        7 => TableCategory {
2687            parameter: String::from("Standard Deviation of Height"),
2688            units: String::from("m"),
2689            abbrev: String::from("HSTDV"),
2690        },
2691        8 => TableCategory {
2692            parameter: String::from("Pressure Anomaly"),
2693            units: String::from("Pa"),
2694            abbrev: String::from("PRESA"),
2695        },
2696        9 => TableCategory {
2697            parameter: String::from("Geopotential Height Anomaly"),
2698            units: String::from("gpm"),
2699            abbrev: String::from("GPA"),
2700        },
2701        10 => TableCategory {
2702            parameter: String::from("Density"),
2703            units: String::from("kg m-3"),
2704            abbrev: String::from("DEN"),
2705        },
2706        11 => TableCategory {
2707            parameter: String::from("Altimeter Setting"),
2708            units: String::from("Pa"),
2709            abbrev: String::from("ALTS"),
2710        },
2711        12 => TableCategory {
2712            parameter: String::from("Thickness"),
2713            units: String::from("m"),
2714            abbrev: String::from("THICK"),
2715        },
2716        13 => TableCategory {
2717            parameter: String::from("Pressure Altitude"),
2718            units: String::from("m"),
2719            abbrev: String::from("PRESALT"),
2720        },
2721        14 => TableCategory {
2722            parameter: String::from("Density Altitude"),
2723            units: String::from("m"),
2724            abbrev: String::from("DENALT"),
2725        },
2726        15 => TableCategory {
2727            parameter: String::from("5-Wave Geopotential Height"),
2728            units: String::from("gpm"),
2729            abbrev: String::from("5WAVH"),
2730        },
2731        16 => TableCategory {
2732            parameter: String::from("Zonal Flux of Gravity Wave Stress"),
2733            units: String::from("N m-2"),
2734            abbrev: String::from("U-GWD"),
2735        },
2736        17 => TableCategory {
2737            parameter: String::from("Meridional Flux of Gravity Wave Stress"),
2738            units: String::from("N m-2"),
2739            abbrev: String::from("V-GWD"),
2740        },
2741        18 => TableCategory {
2742            parameter: String::from("Planetary Boundary Layer Height"),
2743            units: String::from("m"),
2744            abbrev: String::from("HPBL"),
2745        },
2746        19 => TableCategory {
2747            parameter: String::from("5-Wave Geopotential Height Anomaly"),
2748            units: String::from("gpm"),
2749            abbrev: String::from("5WAVA"),
2750        },
2751        20 => TableCategory {
2752            parameter: String::from("Standard Deviation of Sub-Grid Scale Orography"),
2753            units: String::from("m"),
2754            abbrev: String::from("SDSGSO"),
2755        },
2756        21 => TableCategory {
2757            parameter: String::from("Angle of Sub-Grid Scale Orography"),
2758            units: String::from("rad"),
2759            abbrev: String::from("AOSGSO"),
2760        },
2761        22 => TableCategory {
2762            parameter: String::from("Slope of Sub-Grid Scale Orography"),
2763            units: String::from("Numeric"),
2764            abbrev: String::from("SSGSO"),
2765        },
2766        23 => TableCategory {
2767            parameter: String::from("Gravity Wave Dissipation"),
2768            units: String::from("W m-2"),
2769            abbrev: String::from("GWD"),
2770        },
2771        24 => TableCategory {
2772            parameter: String::from("Anisotropy of Sub-Grid Scale Orography"),
2773            units: String::from("Numeric"),
2774            abbrev: String::from("ASGSO"),
2775        },
2776        25 => TableCategory {
2777            parameter: String::from("Natural Logarithm of Pressure in Pa"),
2778            units: String::from("Numeric"),
2779            abbrev: String::from("NLPRES"),
2780        },
2781        26 => TableCategory {
2782            parameter: String::from("Exner Pressure"),
2783            units: String::from("Numeric"),
2784            abbrev: String::from("EXPRES"),
2785        },
2786        27 => TableCategory {
2787            parameter: String::from("Updraught Mass Flux"),
2788            units: String::from("kg m-2 s-1"),
2789            abbrev: String::from("UMFLX"),
2790        },
2791        28 => TableCategory {
2792            parameter: String::from("Downdraught Mass Flux"),
2793            units: String::from("kg m-2 s-1"),
2794            abbrev: String::from("DMFLX"),
2795        },
2796        29 => TableCategory {
2797            parameter: String::from("Updraught Detrainment Rate"),
2798            units: String::from("kg m-3 s-1"),
2799            abbrev: String::from("UDRATE"),
2800        },
2801        30 => TableCategory {
2802            parameter: String::from("Downdraught Detrainment Rate"),
2803            units: String::from("kg m-3 s-1"),
2804            abbrev: String::from("DDRATE"),
2805        },
2806        31 => TableCategory {
2807            parameter: String::from("Unbalanced Component of Logarithm of Surface Pressure"),
2808            units: String::from("-"),
2809            abbrev: String::from("UCLSPRS"),
2810        },
2811        32 => TableCategory {
2812            parameter: String::from("Saturation water vapour pressure"),
2813            units: String::from("Pa"),
2814            abbrev: String::from("SWATERVP"),
2815        },
2816        33 => TableCategory {
2817            parameter: String::from("Geometric altitude above mean sea level"),
2818            units: String::from("m"),
2819            abbrev: String::from("GAMSL"),
2820        },
2821        34 => TableCategory {
2822            parameter: String::from("Geometric height above ground level"),
2823            units: String::from("m"),
2824            abbrev: String::from("GHAGRD"),
2825        },
2826        35 => TableCategory {
2827            parameter: String::from("Column integrated divergence of total mass flux"),
2828            units: String::from("kg m-2 s-1"),
2829            abbrev: String::from("CDTMF"),
2830        },
2831        36 => TableCategory {
2832            parameter: String::from("Column integrated eastward total mass flux"),
2833            units: String::from("kg m-2 s-1"),
2834            abbrev: String::from("CETMF"),
2835        },
2836        37 => TableCategory {
2837            parameter: String::from("Column integrated northward total mass flux"),
2838            units: String::from("kg m-2 s-1"),
2839            abbrev: String::from("CNTMF"),
2840        },
2841        38 => TableCategory {
2842            parameter: String::from("Standard deviation of filtered subgrid orography"),
2843            units: String::from("m"),
2844            abbrev: String::from("SDFSO"),
2845        },
2846        39 => TableCategory {
2847            parameter: String::from("Column integrated mass of atmosphere"),
2848            units: String::from("kg m-2 s-1"),
2849            abbrev: String::from("CMATMOS"),
2850        },
2851        40 => TableCategory {
2852            parameter: String::from("Column integrated eastward geopotential flux"),
2853            units: String::from("W m-1"),
2854            abbrev: String::from("CEGFLUX"),
2855        },
2856        41 => TableCategory {
2857            parameter: String::from("Column integrated northward geopotential flux"),
2858            units: String::from("W m-1"),
2859            abbrev: String::from("CNGFLUX"),
2860        },
2861        42 => TableCategory {
2862            parameter: String::from("Column integrated divergence of water geopotential flux"),
2863            units: String::from("W m-2"),
2864            abbrev: String::from("CDWGFLUX"),
2865        },
2866        43 => TableCategory {
2867            parameter: String::from("Column integrated divergence of geopotential flux"),
2868            units: String::from("W m-2"),
2869            abbrev: String::from("CDGFLUX"),
2870        },
2871        44 => TableCategory {
2872            parameter: String::from("Height of zero-degree wet-bulb temperature"),
2873            units: String::from("m"),
2874            abbrev: String::from("HWBT"),
2875        },
2876        45 => TableCategory {
2877            parameter: String::from("Height of one-degree wet-bulb temperature"),
2878            units: String::from("m"),
2879            abbrev: String::from("WOBT"),
2880        },
2881        46 => TableCategory {
2882            parameter: String::from("Pressure departure from hydrostatic state"),
2883            units: String::from("Pa"),
2884            abbrev: String::from("PRESDHS"),
2885        },
2886        192 => TableCategory {
2887            parameter: String::from("MSLP (Eta model reduction)"),
2888            units: String::from("Pa"),
2889            abbrev: String::from("MSLET"),
2890        },
2891        193 => TableCategory {
2892            parameter: String::from("5-Wave Geopotential Height"),
2893            units: String::from("gpm"),
2894            abbrev: String::from("5WAVH"),
2895        },
2896        194 => TableCategory {
2897            parameter: String::from("Zonal Flux of Gravity Wave Stress"),
2898            units: String::from("N m-2"),
2899            abbrev: String::from("U-GWD"),
2900        },
2901        195 => TableCategory {
2902            parameter: String::from("Meridional Flux of Gravity Wave Stress"),
2903            units: String::from("N m-2"),
2904            abbrev: String::from("V-GWD"),
2905        },
2906        196 => TableCategory {
2907            parameter: String::from("Planetary Boundary Layer Height"),
2908            units: String::from("m"),
2909            abbrev: String::from("HPBL"),
2910        },
2911        197 => TableCategory {
2912            parameter: String::from("5-Wave Geopotential Height Anomaly"),
2913            units: String::from("gpm"),
2914            abbrev: String::from("5WAVA"),
2915        },
2916        198 => TableCategory {
2917            parameter: String::from("MSLP (MAPS System Reduction)"),
2918            units: String::from("Pa"),
2919            abbrev: String::from("MSLMA"),
2920        },
2921        199 => TableCategory {
2922            parameter: String::from("3-hr pressure tendency (Std. Atmos. Reduction)"),
2923            units: String::from("Pa s-1"),
2924            abbrev: String::from("TSLSA"),
2925        },
2926        200 => TableCategory {
2927            parameter: String::from("Pressure of level from which parcel was lifted"),
2928            units: String::from("Pa"),
2929            abbrev: String::from("PLPL"),
2930        },
2931        201 => TableCategory {
2932            parameter: String::from("X-gradient of Log Pressure"),
2933            units: String::from("m-1"),
2934            abbrev: String::from("LPSX"),
2935        },
2936        202 => TableCategory {
2937            parameter: String::from("Y-gradient of Log Pressure"),
2938            units: String::from("m-1"),
2939            abbrev: String::from("LPSY"),
2940        },
2941        203 => TableCategory {
2942            parameter: String::from("X-gradient of Height"),
2943            units: String::from("m-1"),
2944            abbrev: String::from("HGTX"),
2945        },
2946        204 => TableCategory {
2947            parameter: String::from("Y-gradient of Height"),
2948            units: String::from("m-1"),
2949            abbrev: String::from("HGTY"),
2950        },
2951        205 => TableCategory {
2952            parameter: String::from("Layer Thickness"),
2953            units: String::from("m"),
2954            abbrev: String::from("LAYTH"),
2955        },
2956        206 => TableCategory {
2957            parameter: String::from("Natural Log of Surface Pressure"),
2958            units: String::from("ln (kPa)"),
2959            abbrev: String::from("NLGSP"),
2960        },
2961        207 => TableCategory {
2962            parameter: String::from("Convective updraft mass flux"),
2963            units: String::from("kg m-2 s-1"),
2964            abbrev: String::from("CNVUMF"),
2965        },
2966        208 => TableCategory {
2967            parameter: String::from("Convective downdraft mass flux"),
2968            units: String::from("kg m-2 s-1"),
2969            abbrev: String::from("CNVDMF"),
2970        },
2971        209 => TableCategory {
2972            parameter: String::from("Convective detrainment mass flux"),
2973            units: String::from("kg m-2 s-1"),
2974            abbrev: String::from("CNVDEMF"),
2975        },
2976        210 => TableCategory {
2977            parameter: String::from("Mass Point Model Surface"),
2978            units: String::from(""),
2979            abbrev: String::from("LMH"),
2980        },
2981        211 => TableCategory {
2982            parameter: String::from("Geopotential Height (nearest grid point)"),
2983            units: String::from("gpm"),
2984            abbrev: String::from("HGTN"),
2985        },
2986        212 => TableCategory {
2987            parameter: String::from("Pressure (nearest grid point)"),
2988            units: String::from("Pa"),
2989            abbrev: String::from("PRESN"),
2990        },
2991        213 => TableCategory {
2992            parameter: String::from("Orographic Convexity"),
2993            units: String::from(""),
2994            abbrev: String::from("ORCONV"),
2995        },
2996        214 => TableCategory {
2997            parameter: String::from("Orographic Asymmetry, W Component"),
2998            units: String::from(""),
2999            abbrev: String::from("ORASW"),
3000        },
3001        215 => TableCategory {
3002            parameter: String::from("Orographic Asymmetry, S Component"),
3003            units: String::from(""),
3004            abbrev: String::from("ORASS"),
3005        },
3006        216 => TableCategory {
3007            parameter: String::from("Orographic Asymmetry, SW Component"),
3008            units: String::from(""),
3009            abbrev: String::from("ORASSW"),
3010        },
3011        217 => TableCategory {
3012            parameter: String::from("Orographic Asymmetry, NW Component"),
3013            units: String::from(""),
3014            abbrev: String::from("ORASNW"),
3015        },
3016        218 => TableCategory {
3017            parameter: String::from("Orographic Length Scale, W Component"),
3018            units: String::from(""),
3019            abbrev: String::from("ORLSW"),
3020        },
3021        219 => TableCategory {
3022            parameter: String::from("Orographic Length Scale, S Component"),
3023            units: String::from(""),
3024            abbrev: String::from("ORLSS"),
3025        },
3026        220 => TableCategory {
3027            parameter: String::from("Orographic Length Scale, SW Component"),
3028            units: String::from(""),
3029            abbrev: String::from("ORLSSW"),
3030        },
3031        221 => TableCategory {
3032            parameter: String::from("Orographic Length Scale, NW Component"),
3033            units: String::from(""),
3034            abbrev: String::from("ORLSNW"),
3035        },
3036        222 => TableCategory {
3037            parameter: String::from("Effective Surface Height"),
3038            units: String::from("m"),
3039            abbrev: String::from("EFSH"),
3040        },
3041        255 => TableCategory {
3042            parameter: String::from("Missing"),
3043            units: String::from(""),
3044            abbrev: String::from("Missing"),
3045        },
3046        47..=191 => TableCategory {
3047            parameter: String::from("Reserved"),
3048            units: String::from(""),
3049            abbrev: String::from("Reserved"),
3050        },
3051        _ => TableCategory {
3052            parameter: String::from("Reserved for Local Use"),
3053            units: String::from(""),
3054            abbrev: String::from("Reserved for Local Use"),
3055        },
3056    }
3057}
3058
3059/// # GRIB2 - TABLE 4.2-0-4
3060/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 4
3061/// (Meteorological products, Short-wave radiation category)
3062/// In Section 0, Octet 7 = 0
3063/// In Section 4, Octet 10 = 4
3064/// Revised 11/02/2023
3065/// Red text depicts changes made since 06/23/2022
3066/// @see [GRIB2 - Table 4.2-0-4: Parameters for Discipline 0 Category 4 (Short-wave radiation category)](https://www.example.com)
3067///
3068/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 4.
3069///
3070/// # Arguments
3071/// * `category` - The parameter category within Discipline 0, Category 4 (u8).
3072///
3073/// # Returns
3074/// A `TableCategory` struct containing the description of the parameter category.
3075/// Returns a "Missing" TableCategory if the category is not found or is a special value.
3076pub fn grib2_lookup_table42_04(category: u8) -> TableCategory {
3077    match category {
3078        0 => TableCategory {
3079            parameter: String::from("Net Short-Wave Radiation Flux (Surface)"),
3080            units: String::from("W m-2"),
3081            abbrev: String::from("NSWRS"),
3082        },
3083        1 => TableCategory {
3084            parameter: String::from("Net Short-Wave Radiation Flux (Top of Atmosphere)"),
3085            units: String::from("W m-2"),
3086            abbrev: String::from("NSWRT"),
3087        },
3088        2 => TableCategory {
3089            parameter: String::from("Short-Wave Radiation Flux"),
3090            units: String::from("W m-2"),
3091            abbrev: String::from("SWAVR"),
3092        },
3093        3 => TableCategory {
3094            parameter: String::from("Global Radiation Flux"),
3095            units: String::from("W m-2"),
3096            abbrev: String::from("GRAD"),
3097        },
3098        4 => TableCategory {
3099            parameter: String::from("Brightness Temperature"),
3100            units: String::from("K"),
3101            abbrev: String::from("BRTMP"),
3102        },
3103        5 => TableCategory {
3104            parameter: String::from("Radiance (with respect to wave number)"),
3105            units: String::from("W m-1 sr-1"),
3106            abbrev: String::from("LWRAD"),
3107        },
3108        6 => TableCategory {
3109            parameter: String::from("Radiance (with respect to wavelength)"),
3110            units: String::from("W m-3 sr-1"),
3111            abbrev: String::from("SWRAD"),
3112        },
3113        7 => TableCategory {
3114            parameter: String::from("Downward Short-Wave Radiation Flux"),
3115            units: String::from("W m-2"),
3116            abbrev: String::from("DSWRF"),
3117        },
3118        8 => TableCategory {
3119            parameter: String::from("Upward Short-Wave Radiation Flux"),
3120            units: String::from("W m-2"),
3121            abbrev: String::from("USWRF"),
3122        },
3123        9 => TableCategory {
3124            parameter: String::from("Net Short Wave Radiation Flux"),
3125            units: String::from("W m-2"),
3126            abbrev: String::from("NSWRF"),
3127        },
3128        10 => TableCategory {
3129            parameter: String::from("Photosynthetically Active Radiation"),
3130            units: String::from("W m-2"),
3131            abbrev: String::from("PHOTAR"),
3132        },
3133        11 => TableCategory {
3134            parameter: String::from("Net Short-Wave Radiation Flux, Clear Sky"),
3135            units: String::from("W m-2"),
3136            abbrev: String::from("NSWRFCS"),
3137        },
3138        12 => TableCategory {
3139            parameter: String::from("Downward UV Radiation"),
3140            units: String::from("W m-2"),
3141            abbrev: String::from("DWUVR"),
3142        },
3143        13 => TableCategory {
3144            parameter: String::from("Direct Short Wave Radiation Flux"),
3145            units: String::from("W m-2"),
3146            abbrev: String::from("DSWRFLX"),
3147        },
3148        14 => TableCategory {
3149            parameter: String::from("Diffuse Short Wave Radiation Flux"),
3150            units: String::from("W m-2"),
3151            abbrev: String::from("DIFSWRF"),
3152        },
3153        15 => TableCategory {
3154            parameter: String::from(
3155                "Upward UV radiation emitted/reflected from the Earth's surface",
3156            ),
3157            units: String::from("W m-2"),
3158            abbrev: String::from("UVVEARTH"),
3159        },
3160        50 => TableCategory {
3161            parameter: String::from("UV Index (Under Clear Sky)"),
3162            units: String::from("Numeric"),
3163            abbrev: String::from("UVIUCS"),
3164        },
3165        51 => TableCategory {
3166            parameter: String::from("UV Index"),
3167            units: String::from("Numeric"),
3168            abbrev: String::from("UVI"),
3169        },
3170        52 => TableCategory {
3171            parameter: String::from("Downward Short-Wave Radiation Flux, Clear Sky"),
3172            units: String::from("W m-2"),
3173            abbrev: String::from("DSWRFCS"),
3174        },
3175        53 => TableCategory {
3176            parameter: String::from("Upward Short-Wave Radiation Flux, Clear Sky"),
3177            units: String::from("W m-2"),
3178            abbrev: String::from("USWRFCS"),
3179        },
3180        54 => TableCategory {
3181            parameter: String::from("Direct normal short-wave radiation flux"),
3182            units: String::from("W m-2"),
3183            abbrev: String::from("DNSWRFLX"),
3184        },
3185        55 => TableCategory {
3186            parameter: String::from("UV visible albedo for diffuse radiation"),
3187            units: String::from("%"),
3188            abbrev: String::from("UVALBDIF"),
3189        },
3190        56 => TableCategory {
3191            parameter: String::from("UV visible albedo for direct radiation"),
3192            units: String::from("%"),
3193            abbrev: String::from("UVALBDIR"),
3194        },
3195        57 => TableCategory {
3196            parameter: String::from("UV visible albedo for direct radiation, geometric component"),
3197            units: String::from("%"),
3198            abbrev: String::from("UBALBDIRG"),
3199        },
3200        58 => TableCategory {
3201            parameter: String::from("UV visible albedo for direct radiation, isotropic component"),
3202            units: String::from("%"),
3203            abbrev: String::from("UVALBDIRI"),
3204        },
3205        59 => TableCategory {
3206            parameter: String::from("UV visible albedo for direct radiation, volumetric component"),
3207            units: String::from("%"),
3208            abbrev: String::from("UVBDIRV"),
3209        },
3210        60 => TableCategory {
3211            parameter: String::from("Photosynthetically active radiation flux, clear sky"),
3212            units: String::from("W m-2"),
3213            abbrev: String::from("PHOARFCS"),
3214        },
3215        61 => TableCategory {
3216            parameter: String::from("Direct short-wave radiation flux, clear sky"),
3217            units: String::from("W m-2"),
3218            abbrev: String::from("DSWRFLXCS"),
3219        },
3220        192 => TableCategory {
3221            parameter: String::from("Downward Short-Wave Radiation Flux"),
3222            units: String::from("W m-2"),
3223            abbrev: String::from("DSWRF"),
3224        },
3225        193 => TableCategory {
3226            parameter: String::from("Upward Short-Wave Radiation Flux"),
3227            units: String::from("W m-2"),
3228            abbrev: String::from("USWRF"),
3229        },
3230        194 => TableCategory {
3231            parameter: String::from("UV-B Downward Solar Flux"),
3232            units: String::from("W m-2"),
3233            abbrev: String::from("DUVB"),
3234        },
3235        195 => TableCategory {
3236            parameter: String::from("Clear sky UV-B Downward Solar Flux"),
3237            units: String::from("W m-2"),
3238            abbrev: String::from("CDUVB"),
3239        },
3240        196 => TableCategory {
3241            parameter: String::from("Clear Sky Downward Solar Flux"),
3242            units: String::from("W m-2"),
3243            abbrev: String::from("CSDSF"),
3244        },
3245        197 => TableCategory {
3246            parameter: String::from("Solar Radiative Heating Rate"),
3247            units: String::from("K s-1"),
3248            abbrev: String::from("SWHR"),
3249        },
3250        198 => TableCategory {
3251            parameter: String::from("Clear Sky Upward Solar Flux"),
3252            units: String::from("W m-2"),
3253            abbrev: String::from("CSUSF"),
3254        },
3255        199 => TableCategory {
3256            parameter: String::from("Cloud Forcing Net Solar Flux"),
3257            units: String::from("W m-2"),
3258            abbrev: String::from("CFNSF"),
3259        },
3260        200 => TableCategory {
3261            parameter: String::from("Visible Beam Downward Solar Flux"),
3262            units: String::from("W m-2"),
3263            abbrev: String::from("VBDSF"),
3264        },
3265        201 => TableCategory {
3266            parameter: String::from("Visible Diffuse Downward Solar Flux"),
3267            units: String::from("W m-2"),
3268            abbrev: String::from("VDDSF"),
3269        },
3270        202 => TableCategory {
3271            parameter: String::from("Near IR Beam Downward Solar Flux"),
3272            units: String::from("W m-2"),
3273            abbrev: String::from("NBDSF"),
3274        },
3275        203 => TableCategory {
3276            parameter: String::from("Near IR Diffuse Downward Solar Flux"),
3277            units: String::from("W m-2"),
3278            abbrev: String::from("NDDSF"),
3279        },
3280        204 => TableCategory {
3281            parameter: String::from("Downward Total Radiation Flux"),
3282            units: String::from("W m-2"),
3283            abbrev: String::from("DTRF"),
3284        },
3285        205 => TableCategory {
3286            parameter: String::from("Upward Total Radiation Flux"),
3287            units: String::from("W m-2"),
3288            abbrev: String::from("UTRF"),
3289        },
3290        255 => TableCategory {
3291            parameter: String::from("Missing"),
3292            units: String::from(""),
3293            abbrev: String::from("Missing"),
3294        },
3295        16..=49 => TableCategory {
3296            parameter: String::from("Reserved"),
3297            units: String::from(""),
3298            abbrev: String::from("Reserved"),
3299        },
3300        62..=191 => TableCategory {
3301            parameter: String::from("Reserved"),
3302            units: String::from(""),
3303            abbrev: String::from("Reserved"),
3304        },
3305        _ => TableCategory {
3306            parameter: String::from("Reserved for Local Use"),
3307            units: String::from(""),
3308            abbrev: String::from("Reserved for Local Use"),
3309        },
3310    }
3311}
3312
3313/// # GRIB2 - TABLE 4.2-0-5
3314/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 5
3315/// (Meteorological products, Long-wave radiation category)
3316/// In Section 0, Octet 7 = 0
3317/// In Section 4, Octet 10 = 5
3318/// Revised 11/02/2023
3319/// Red text depicts changes made since 11/02/2023
3320/// @see [GRIB2 - Table 4.2-0-5: Parameters for Discipline 0 Category 5 (Long-wave radiation category)](https://www.example.com)
3321///
3322/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 5.
3323///
3324/// # Arguments
3325/// * `category` - The parameter category within Discipline 0, Category 5 (u8).
3326///
3327/// # Returns
3328/// A `TableCategory` struct containing the description of the parameter category.
3329/// Returns a "Missing" TableCategory if the category is not found or is a special value.
3330pub fn grib2_lookup_table42_05(category: u8) -> TableCategory {
3331    match category {
3332        0 => TableCategory {
3333            parameter: String::from("Net Long-Wave Radiation Flux (Surface)"),
3334            units: String::from("W m-2"),
3335            abbrev: String::from("NLWRS"),
3336        },
3337        1 => TableCategory {
3338            parameter: String::from("Net Long-Wave Radiation Flux (Top of Atmosphere)"),
3339            units: String::from("W m-2"),
3340            abbrev: String::from("NLWRT"),
3341        },
3342        2 => TableCategory {
3343            parameter: String::from("Long-Wave Radiation Flux"),
3344            units: String::from("W m-2"),
3345            abbrev: String::from("LWAVR"),
3346        },
3347        3 => TableCategory {
3348            parameter: String::from("Downward Long-Wave Rad. Flux"),
3349            units: String::from("W m-2"),
3350            abbrev: String::from("DLWRF"),
3351        },
3352        4 => TableCategory {
3353            parameter: String::from("Upward Long-Wave Rad. Flux"),
3354            units: String::from("W m-2"),
3355            abbrev: String::from("ULWRF"),
3356        },
3357        5 => TableCategory {
3358            parameter: String::from("Net Long-Wave Radiation Flux"),
3359            units: String::from("W m-2"),
3360            abbrev: String::from("NLWRF"),
3361        },
3362        6 => TableCategory {
3363            parameter: String::from("Net Long-Wave Radiation Flux, Clear Sky"),
3364            units: String::from("W m-2"),
3365            abbrev: String::from("NLWRCS"),
3366        },
3367        7 => TableCategory {
3368            parameter: String::from("Brightness Temperature"),
3369            units: String::from("K"),
3370            abbrev: String::from("BRTEMP"),
3371        },
3372        8 => TableCategory {
3373            parameter: String::from("Downward Long-Wave Radiation Flux, Clear Sky"),
3374            units: String::from("W m-2"),
3375            abbrev: String::from("DLWRFCS"),
3376        },
3377        9 => TableCategory {
3378            parameter: String::from("Near IR albedo for diffuse radiation"),
3379            units: String::from("%"),
3380            abbrev: String::from("NIRALBDIF"),
3381        },
3382        10 => TableCategory {
3383            parameter: String::from("Near IR albedo for direct radiation"),
3384            units: String::from("%"),
3385            abbrev: String::from("NIRALBDIR"),
3386        },
3387        11 => TableCategory {
3388            parameter: String::from("Near IR albedo for direct radiation, geometric component"),
3389            units: String::from("%"),
3390            abbrev: String::from("NIRALBDIRG"),
3391        },
3392        12 => TableCategory {
3393            parameter: String::from("Near IR albedo for direct radiation, isotropic component"),
3394            units: String::from("%"),
3395            abbrev: String::from("NIRALBDIRI"),
3396        },
3397        13 => TableCategory {
3398            parameter: String::from("Near IR albedo for direct radiation, volumetric component"),
3399            units: String::from("%"),
3400            abbrev: String::from("NIRALBDIRV"),
3401        },
3402        192 => TableCategory {
3403            parameter: String::from("Downward Long-Wave Rad. Flux"),
3404            units: String::from("W m-2"),
3405            abbrev: String::from("DLWRF"),
3406        },
3407        193 => TableCategory {
3408            parameter: String::from("Upward Long-Wave Rad. Flux"),
3409            units: String::from("W m-2"),
3410            abbrev: String::from("ULWRF"),
3411        },
3412        194 => TableCategory {
3413            parameter: String::from("Long-Wave Radiative Heating Rate"),
3414            units: String::from("K s-1"),
3415            abbrev: String::from("LWHR"),
3416        },
3417        195 => TableCategory {
3418            parameter: String::from("Clear Sky Upward Long Wave Flux"),
3419            units: String::from("W m-2"),
3420            abbrev: String::from("CSULF"),
3421        },
3422        196 => TableCategory {
3423            parameter: String::from("Clear Sky Downward Long Wave Flux"),
3424            units: String::from("W m-2"),
3425            abbrev: String::from("CSDLF"),
3426        },
3427        197 => TableCategory {
3428            parameter: String::from("Cloud Forcing Net Long Wave Flux"),
3429            units: String::from("W m-2"),
3430            abbrev: String::from("CFNLF"),
3431        },
3432        255 => TableCategory {
3433            parameter: String::from("Missing"),
3434            units: String::from(""),
3435            abbrev: String::from("Missing"),
3436        },
3437        14..=191 => TableCategory {
3438            parameter: String::from("Reserved"),
3439            units: String::from(""),
3440            abbrev: String::from("Reserved"),
3441        },
3442        _ => TableCategory {
3443            parameter: String::from("Reserved for Local Use"),
3444            units: String::from(""),
3445            abbrev: String::from("Reserved for Local Use"),
3446        },
3447    }
3448}
3449
3450/// # GRIB2 - TABLE 4.2-0-6
3451/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 6
3452/// (Meteorological products, Cloud category)
3453/// In Section 0, Octet 7 = 0
3454/// In Section 4, Octet 10 = 6
3455/// Revised 10/24/2023
3456/// Red text depicts changes made since 10/24/2023
3457///
3458/// **Notes:**
3459/// - Parameter deprecated - Use another parameter in parameter category 1: moisture instead.
3460/// - The sum of the water and ice fractions may exceed the total due to overlap between the volumes containing ice and those containing liquid water.
3461/// - Fog is defined as cloud cover in the lowest model level.
3462/// - This parameter is the amount of sunshine in seconds over a given length of time in seconds. Sunshine is defined as a radiation intensity above 120 W m-2.
3463///   @see [GRIB2 - Table 4.2-0-6: Parameters for Discipline 0 Category 6 (Cloud category)](https://www.example.com)
3464///
3465/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 6.
3466///
3467/// # Arguments
3468/// * `category` - The parameter category within Discipline 0, Category 6 (u8).
3469///
3470/// # Returns
3471/// A `TableCategory` struct containing the description of the parameter category.
3472/// Returns a "Missing" TableCategory if the category is not found or is a special value.
3473pub fn grib2_lookup_table42_06(category: u8) -> TableCategory {
3474    match category {
3475        0 => TableCategory {
3476            parameter: String::from("Cloud Ice"),
3477            units: String::from("kg m-2"),
3478            abbrev: String::from("CICE"),
3479        },
3480        1 => TableCategory {
3481            parameter: String::from("Total Cloud Cover"),
3482            units: String::from("%"),
3483            abbrev: String::from("TCDC"),
3484        },
3485        2 => TableCategory {
3486            parameter: String::from("Convective Cloud Cover"),
3487            units: String::from("%"),
3488            abbrev: String::from("CDCON"),
3489        },
3490        3 => TableCategory {
3491            parameter: String::from("Low Cloud Cover"),
3492            units: String::from("%"),
3493            abbrev: String::from("LCDC"),
3494        },
3495        4 => TableCategory {
3496            parameter: String::from("Medium Cloud Cover"),
3497            units: String::from("%"),
3498            abbrev: String::from("MCDC"),
3499        },
3500        5 => TableCategory {
3501            parameter: String::from("High Cloud Cover"),
3502            units: String::from("%"),
3503            abbrev: String::from("HCDC"),
3504        },
3505        6 => TableCategory {
3506            parameter: String::from("Cloud Water"),
3507            units: String::from("kg m-2"),
3508            abbrev: String::from("CWAT"),
3509        },
3510        7 => TableCategory {
3511            parameter: String::from("Cloud Amount"),
3512            units: String::from("%"),
3513            abbrev: String::from("CDCA"),
3514        },
3515        8 => TableCategory {
3516            parameter: String::from("Cloud Type"),
3517            units: String::from("See Table 4.203"),
3518            abbrev: String::from("CDCT"),
3519        },
3520        9 => TableCategory {
3521            parameter: String::from("Thunderstorm Maximum Tops"),
3522            units: String::from("m"),
3523            abbrev: String::from("TMAXT"),
3524        },
3525        10 => TableCategory {
3526            parameter: String::from("Thunderstorm Coverage"),
3527            units: String::from("See Table 4.204"),
3528            abbrev: String::from("THUNC"),
3529        },
3530        11 => TableCategory {
3531            parameter: String::from("Cloud Base"),
3532            units: String::from("m"),
3533            abbrev: String::from("CDCB"),
3534        },
3535        12 => TableCategory {
3536            parameter: String::from("Cloud Top"),
3537            units: String::from("m"),
3538            abbrev: String::from("CDCTOP"),
3539        },
3540        13 => TableCategory {
3541            parameter: String::from("Ceiling"),
3542            units: String::from("m"),
3543            abbrev: String::from("CEIL"),
3544        },
3545        14 => TableCategory {
3546            parameter: String::from("Non-Convective Cloud Cover"),
3547            units: String::from("%"),
3548            abbrev: String::from("CDLYR"),
3549        },
3550        15 => TableCategory {
3551            parameter: String::from("Cloud Work Function"),
3552            units: String::from("J kg-1"),
3553            abbrev: String::from("CWORK"),
3554        },
3555        16 => TableCategory {
3556            parameter: String::from("Convective Cloud Efficiency"),
3557            units: String::from("Proportion"),
3558            abbrev: String::from("CUEFI"),
3559        },
3560        17 => TableCategory {
3561            parameter: String::from("Total Condensate"),
3562            units: String::from("kg kg-1"),
3563            abbrev: String::from("TCONDO"),
3564        }, // Deprecated
3565        18 => TableCategory {
3566            parameter: String::from("Total Column-Integrated Cloud Water"),
3567            units: String::from("kg m-2"),
3568            abbrev: String::from("TCOLWO"),
3569        }, // Deprecated
3570        19 => TableCategory {
3571            parameter: String::from("Total Column-Integrated Cloud Ice"),
3572            units: String::from("kg m-2"),
3573            abbrev: String::from("TCOLIO"),
3574        }, // Deprecated
3575        20 => TableCategory {
3576            parameter: String::from("Total Column-Integrated Condensate"),
3577            units: String::from("kg m-2"),
3578            abbrev: String::from("TCOLC"),
3579        }, // Deprecated
3580        21 => TableCategory {
3581            parameter: String::from("Ice fraction of total condensate"),
3582            units: String::from("Proportion"),
3583            abbrev: String::from("FICE"),
3584        },
3585        22 => TableCategory {
3586            parameter: String::from("Cloud Cover"),
3587            units: String::from("%"),
3588            abbrev: String::from("CDCC"),
3589        },
3590        23 => TableCategory {
3591            parameter: String::from("Cloud Ice Mixing Ratio"),
3592            units: String::from("kg kg-1"),
3593            abbrev: String::from("CDCIMR"),
3594        }, // Deprecated
3595        24 => TableCategory {
3596            parameter: String::from("Sunshine"),
3597            units: String::from("Numeric"),
3598            abbrev: String::from("SUNS"),
3599        },
3600        25 => TableCategory {
3601            parameter: String::from("Horizontal Extent of Cumulonimbus (CB)"),
3602            units: String::from("%"),
3603            abbrev: String::from("CBHE"),
3604        },
3605        26 => TableCategory {
3606            parameter: String::from("Height of Convective Cloud Base"),
3607            units: String::from("m"),
3608            abbrev: String::from("HCONCB"),
3609        },
3610        27 => TableCategory {
3611            parameter: String::from("Height of Convective Cloud Top"),
3612            units: String::from("m"),
3613            abbrev: String::from("HCONCT"),
3614        },
3615        28 => TableCategory {
3616            parameter: String::from("Number Concentration of Cloud Droplets"),
3617            units: String::from("kg-1"),
3618            abbrev: String::from("NCONCD"),
3619        },
3620        29 => TableCategory {
3621            parameter: String::from("Number Concentration of Cloud Ice"),
3622            units: String::from("kg-1"),
3623            abbrev: String::from("NCCICE"),
3624        },
3625        30 => TableCategory {
3626            parameter: String::from("Number Density of Cloud Droplets"),
3627            units: String::from("m-3"),
3628            abbrev: String::from("NDENCD"),
3629        },
3630        31 => TableCategory {
3631            parameter: String::from("Number Density of Cloud Ice"),
3632            units: String::from("m-3"),
3633            abbrev: String::from("NDCICE"),
3634        },
3635        32 => TableCategory {
3636            parameter: String::from("Fraction of Cloud Cover"),
3637            units: String::from("Numeric"),
3638            abbrev: String::from("FRACCC"),
3639        },
3640        33 => TableCategory {
3641            parameter: String::from("Sunshine Duration"),
3642            units: String::from("s"),
3643            abbrev: String::from("SUNSD"),
3644        },
3645        34 => TableCategory {
3646            parameter: String::from("Surface Long Wave Effective Total Cloudiness"),
3647            units: String::from("Numeric"),
3648            abbrev: String::from("SLWTC"),
3649        },
3650        35 => TableCategory {
3651            parameter: String::from("Surface Short Wave Effective Total Cloudiness"),
3652            units: String::from("Numeric"),
3653            abbrev: String::from("SSWTC"),
3654        },
3655        36 => TableCategory {
3656            parameter: String::from("Fraction of Stratiform Precipitation Cover"),
3657            units: String::from("Proportion"),
3658            abbrev: String::from("FSTRPC"),
3659        },
3660        37 => TableCategory {
3661            parameter: String::from("Fraction of Convective Precipitation Cover"),
3662            units: String::from("Proportion"),
3663            abbrev: String::from("FCONPC"),
3664        },
3665        38 => TableCategory {
3666            parameter: String::from("Mass Density of Cloud Droplets"),
3667            units: String::from("kg m-3"),
3668            abbrev: String::from("MASSDCD"),
3669        },
3670        39 => TableCategory {
3671            parameter: String::from("Mass Density of Cloud Ice"),
3672            units: String::from("kg m-3"),
3673            abbrev: String::from("MASSDCI"),
3674        },
3675        40 => TableCategory {
3676            parameter: String::from("Mass Density of Convective Cloud Water Droplets"),
3677            units: String::from("kg m-3"),
3678            abbrev: String::from("MDCCWD"),
3679        },
3680        47 => TableCategory {
3681            parameter: String::from("Volume Fraction of Cloud Water Droplets"),
3682            units: String::from("Numeric"),
3683            abbrev: String::from("VFRCWD"),
3684        }, // Note 2
3685        48 => TableCategory {
3686            parameter: String::from("Volume Fraction of Cloud Ice Particles"),
3687            units: String::from("Numeric"),
3688            abbrev: String::from("VFRCICE"),
3689        }, // Note 2
3690        49 => TableCategory {
3691            parameter: String::from("Volume Fraction of Cloud (Ice and/or Water)"),
3692            units: String::from("Numeric"),
3693            abbrev: String::from("VFRCIW"),
3694        }, // Note 2
3695        50 => TableCategory {
3696            parameter: String::from("Fog"),
3697            units: String::from("%"),
3698            abbrev: String::from("FOG"),
3699        }, // Note 3
3700        51 => TableCategory {
3701            parameter: String::from("Sunshine Duration Fraction"),
3702            units: String::from("Proportion"),
3703            abbrev: String::from("SUNFRAC"),
3704        }, // Note 4
3705        192 => TableCategory {
3706            parameter: String::from("Non-Convective Cloud Cover"),
3707            units: String::from("%"),
3708            abbrev: String::from("CDLYR"),
3709        },
3710        193 => TableCategory {
3711            parameter: String::from("Cloud Work Function"),
3712            units: String::from("J kg-1"),
3713            abbrev: String::from("CWORK"),
3714        },
3715        194 => TableCategory {
3716            parameter: String::from("Convective Cloud Efficiency"),
3717            units: String::from("non-dim"),
3718            abbrev: String::from("CUEFI"),
3719        },
3720        195 => TableCategory {
3721            parameter: String::from("Total Condensate"),
3722            units: String::from("kg kg-1"),
3723            abbrev: String::from("TCOND"),
3724        },
3725        196 => TableCategory {
3726            parameter: String::from("Total Column-Integrated Cloud Water"),
3727            units: String::from("kg m-2"),
3728            abbrev: String::from("TCOLW"),
3729        },
3730        197 => TableCategory {
3731            parameter: String::from("Total Column-Integrated Cloud Ice"),
3732            units: String::from("kg m-2"),
3733            abbrev: String::from("TCOLI"),
3734        },
3735        198 => TableCategory {
3736            parameter: String::from("Total Column-Integrated Condensate"),
3737            units: String::from("kg m-2"),
3738            abbrev: String::from("TCOLC"),
3739        },
3740        199 => TableCategory {
3741            parameter: String::from("Ice fraction of total condensate"),
3742            units: String::from("non-dim"),
3743            abbrev: String::from("FICE"),
3744        },
3745        200 => TableCategory {
3746            parameter: String::from("Convective Cloud Mass Flux"),
3747            units: String::from("Pa s-1"),
3748            abbrev: String::from("MFLUX"),
3749        },
3750        201 => TableCategory {
3751            parameter: String::from("Sunshine Duration"),
3752            units: String::from("s"),
3753            abbrev: String::from("SUNSD"),
3754        },
3755        255 => TableCategory {
3756            parameter: String::from("Missing"),
3757            units: String::from(""),
3758            abbrev: String::from("Missing"),
3759        },
3760        41..=46 => TableCategory {
3761            parameter: String::from("Reserved"),
3762            units: String::from(""),
3763            abbrev: String::from("Reserved"),
3764        },
3765        52..=191 => TableCategory {
3766            parameter: String::from("Reserved"),
3767            units: String::from(""),
3768            abbrev: String::from("Reserved"),
3769        },
3770        _ => TableCategory {
3771            parameter: String::from("Reserved for Local Use"),
3772            units: String::from(""),
3773            abbrev: String::from("Reserved for Local Use"),
3774        },
3775    }
3776}
3777
3778/// # GRIB2 - TABLE 4.2-0-7
3779/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 7
3780/// (Meteorological products, Thermodynamic Stability category)
3781/// In Section 0, Octet 7 = 0
3782/// In Section 4, Octet 10 = 7
3783/// Revised 06/23/2022
3784/// Red text depicts changes made since 01/25/2021
3785///
3786/// **Notes:**
3787/// - Parameter deprecated - Use another parameter in parameter category 1: moisture instead.
3788///   @see [GRIB2 - Table 4.2-0-7: Parameters for Discipline 0 Category 7 (Thermodynamic Stability category)](https://www.example.com)
3789///
3790/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 7.
3791///
3792/// # Arguments
3793/// * `category` - The parameter category within Discipline 0, Category 7 (u8).
3794///
3795/// # Returns
3796/// A `TableCategory` struct containing the description of the parameter category.
3797/// Returns a "Missing" TableCategory if the category is not found or is a special value.
3798pub fn grib2_lookup_table42_07(category: u8) -> TableCategory {
3799    match category {
3800        0 => TableCategory {
3801            parameter: String::from("Parcel Lifted Index (to 500 hPa)"),
3802            units: String::from("K"),
3803            abbrev: String::from("PLI"),
3804        },
3805        1 => TableCategory {
3806            parameter: String::from("Best Lifted Index (to 500 hPa)"),
3807            units: String::from("K"),
3808            abbrev: String::from("BLI"),
3809        },
3810        2 => TableCategory {
3811            parameter: String::from("K Index"),
3812            units: String::from("K"),
3813            abbrev: String::from("KX"),
3814        },
3815        3 => TableCategory {
3816            parameter: String::from("KO Index"),
3817            units: String::from("K"),
3818            abbrev: String::from("KOX"),
3819        },
3820        4 => TableCategory {
3821            parameter: String::from("Total Totals Index"),
3822            units: String::from("K"),
3823            abbrev: String::from("TOTALX"),
3824        },
3825        5 => TableCategory {
3826            parameter: String::from("Sweat Index"),
3827            units: String::from("Numeric"),
3828            abbrev: String::from("SX"),
3829        },
3830        6 => TableCategory {
3831            parameter: String::from("Convective Available Potential Energy"),
3832            units: String::from("J kg-1"),
3833            abbrev: String::from("CAPE"),
3834        },
3835        7 => TableCategory {
3836            parameter: String::from("Convective Inhibition"),
3837            units: String::from("J kg-1"),
3838            abbrev: String::from("CIN"),
3839        },
3840        8 => TableCategory {
3841            parameter: String::from("Storm Relative Helicity"),
3842            units: String::from("m2 s-2"),
3843            abbrev: String::from("HLCY"),
3844        },
3845        9 => TableCategory {
3846            parameter: String::from("Energy Helicity Index"),
3847            units: String::from("Numeric"),
3848            abbrev: String::from("EHLX"),
3849        },
3850        10 => TableCategory {
3851            parameter: String::from("Surface Lifted Index"),
3852            units: String::from("K"),
3853            abbrev: String::from("LFT X"),
3854        },
3855        11 => TableCategory {
3856            parameter: String::from("Best (4 layer) Lifted Index"),
3857            units: String::from("K"),
3858            abbrev: String::from("4LFTX"),
3859        },
3860        12 => TableCategory {
3861            parameter: String::from("Richardson Number"),
3862            units: String::from("Numeric"),
3863            abbrev: String::from("RI"),
3864        },
3865        13 => TableCategory {
3866            parameter: String::from("Showalter Index"),
3867            units: String::from("K"),
3868            abbrev: String::from("SHWINX"),
3869        },
3870        15 => TableCategory {
3871            parameter: String::from("Updraft Helicity"),
3872            units: String::from("m2 s-2"),
3873            abbrev: String::from("UPHL"),
3874        },
3875        16 => TableCategory {
3876            parameter: String::from("Bulk Richardson Number"),
3877            units: String::from("Numeric"),
3878            abbrev: String::from("BLKRN"),
3879        },
3880        17 => TableCategory {
3881            parameter: String::from("Gradient Richardson Number"),
3882            units: String::from("Numeric"),
3883            abbrev: String::from("GRDRN"),
3884        },
3885        18 => TableCategory {
3886            parameter: String::from("Flux Richardson Number"),
3887            units: String::from("Numeric"),
3888            abbrev: String::from("FLXRN"),
3889        },
3890        19 => TableCategory {
3891            parameter: String::from("Convective Available Potential Energy Shear"),
3892            units: String::from("m2 s-2"),
3893            abbrev: String::from("CONAPES"),
3894        },
3895        20 => TableCategory {
3896            parameter: String::from("Thunderstorm intensity index"),
3897            units: String::from("See Table 4.246"),
3898            abbrev: String::from("TIIDEX"),
3899        },
3900        192 => TableCategory {
3901            parameter: String::from("Surface Lifted Index"),
3902            units: String::from("K"),
3903            abbrev: String::from("LFT X"),
3904        },
3905        193 => TableCategory {
3906            parameter: String::from("Best (4 layer) Lifted Index"),
3907            units: String::from("K"),
3908            abbrev: String::from("4LFTX"),
3909        },
3910        194 => TableCategory {
3911            parameter: String::from("Richardson Number"),
3912            units: String::from("Numeric"),
3913            abbrev: String::from("RI"),
3914        },
3915        195 => TableCategory {
3916            parameter: String::from("Convective Weather Detection Index"),
3917            units: String::from(""),
3918            abbrev: String::from("CWDI"),
3919        },
3920        196 => TableCategory {
3921            parameter: String::from("Ultra Violet Index"),
3922            units: String::from("W m-2"),
3923            abbrev: String::from("UVI"),
3924        },
3925        197 => TableCategory {
3926            parameter: String::from("Updraft Helicity"),
3927            units: String::from("m2 s-2"),
3928            abbrev: String::from("UPHL"),
3929        },
3930        198 => TableCategory {
3931            parameter: String::from("Leaf Area Index"),
3932            units: String::from("Numeric"),
3933            abbrev: String::from("LAI"),
3934        },
3935        199 => TableCategory {
3936            parameter: String::from("Hourly Maximum of Updraft Helicity"),
3937            units: String::from("m2 s-2"),
3938            abbrev: String::from("MXUPHL"),
3939        },
3940        200 => TableCategory {
3941            parameter: String::from("Hourly Minimum of Updraft Helicity"),
3942            units: String::from("m2 s-2"),
3943            abbrev: String::from("MNUPHL"),
3944        },
3945        201 => TableCategory {
3946            parameter: String::from("Bourgoiun Negative Energy Layer (surface to freezing level)"),
3947            units: String::from("J kg-1"),
3948            abbrev: String::from("BNEGELAY"),
3949        },
3950        202 => TableCategory {
3951            parameter: String::from("Bourgoiun Positive Energy Layer (2k ft AGL to 400 hPa)"),
3952            units: String::from("J kg-1"),
3953            abbrev: String::from("BPOSELAY"),
3954        },
3955        203 => TableCategory {
3956            parameter: String::from("Downdraft CAPE"),
3957            units: String::from("J kg-1"),
3958            abbrev: String::from("DCAPE"),
3959        },
3960        204 => TableCategory {
3961            parameter: String::from("Effective Storm Relative Helicity"),
3962            units: String::from("m2 s-2"),
3963            abbrev: String::from("EFHL"),
3964        },
3965        205 => TableCategory {
3966            parameter: String::from("Enhanced Stretching Potential"),
3967            units: String::from("Numeric"),
3968            abbrev: String::from("ESP"),
3969        },
3970        206 => TableCategory {
3971            parameter: String::from("Critical Angle"),
3972            units: String::from("Degree"),
3973            abbrev: String::from("CANGLE"),
3974        },
3975        207 => TableCategory {
3976            parameter: String::from("Effective Surface Helicity"),
3977            units: String::from("m2 s-2"),
3978            abbrev: String::from("E3KH"),
3979        },
3980        208 => TableCategory {
3981            parameter: String::from("Significant Tornado Parameter with CIN-Effective Layer"),
3982            units: String::from("numeric"),
3983            abbrev: String::from("STPC"),
3984        },
3985        209 => TableCategory {
3986            parameter: String::from("Significant Hail Parameter"),
3987            units: String::from("numeric"),
3988            abbrev: String::from("SIGH"),
3989        },
3990        210 => TableCategory {
3991            parameter: String::from("Supercell Composite Parameter-Effective Layer"),
3992            units: String::from("numeric"),
3993            abbrev: String::from("SCCP"),
3994        },
3995        211 => TableCategory {
3996            parameter: String::from("Significant Tornado parameter-Fixed Layer"),
3997            units: String::from("numeric"),
3998            abbrev: String::from("SIGT"),
3999        },
4000        212 => TableCategory {
4001            parameter: String::from("Mixed Layer (100 mb) Virtual LFC"),
4002            units: String::from("numeric"),
4003            abbrev: String::from("MLFC"),
4004        },
4005        255 => TableCategory {
4006            parameter: String::from("Missing"),
4007            units: String::from(""),
4008            abbrev: String::from("Missing"),
4009        },
4010        14 => TableCategory {
4011            parameter: String::from("Reserved"),
4012            units: String::from(""),
4013            abbrev: String::from("Reserved"),
4014        },
4015        21..=191 => TableCategory {
4016            parameter: String::from("Reserved"),
4017            units: String::from(""),
4018            abbrev: String::from("Reserved"),
4019        },
4020        _ => TableCategory {
4021            parameter: String::from("Reserved for Local Use"),
4022            units: String::from(""),
4023            abbrev: String::from("Reserved for Local Use"),
4024        },
4025    }
4026}
4027
4028/// # GRIB2 - TABLE 4.2-0-13
4029/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 13
4030/// (Meteorological products, Aerosols category)
4031/// In Section 0, Octet 7 = 0
4032/// In Section 4, Octet 10 = 13
4033/// Revised 02/13/2012
4034/// Red text depicts changes made since 01/26/2006
4035///
4036/// **Notes:**
4037/// - Aerosol Type is described in Table 4.205.
4038///   @see [GRIB2 - Table 4.2-0-13: Aerosols Category](https://www.example.com)
4039///
4040/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 13.
4041///
4042/// # Arguments
4043/// * `category` - The parameter category within Discipline 0, Category 13 (u8).
4044///
4045/// # Returns
4046/// A `TableCategory` struct containing the description of the parameter category.
4047/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4048pub fn grib2_lookup_table42_013(category: u8) -> TableCategory {
4049    match category {
4050        0 => TableCategory {
4051            parameter: String::from("Aerosol Type"),
4052            units: String::from("See Table 4.205"),
4053            abbrev: String::from("AEROT"),
4054        },
4055        192 => TableCategory {
4056            parameter: String::from("Particulate matter (coarse)"),
4057            units: String::from("µg m-3"),
4058            abbrev: String::from("PMTC"),
4059        },
4060        193 => TableCategory {
4061            parameter: String::from("Particulate matter (fine)"),
4062            units: String::from("µg m-3"),
4063            abbrev: String::from("PMTF"),
4064        },
4065        194 => TableCategory {
4066            parameter: String::from("Particulate matter (fine)"),
4067            units: String::from("log10 (µg m-3)"),
4068            abbrev: String::from("LPMTF"),
4069        },
4070        195 => TableCategory {
4071            parameter: String::from("Integrated column particulate matter (fine)"),
4072            units: String::from("log10 (µg m-3)"),
4073            abbrev: String::from("LIPMF"),
4074        },
4075        255 => TableCategory {
4076            parameter: String::from("Missing"),
4077            units: String::from(""),
4078            abbrev: String::from("Missing"),
4079        },
4080        1..=191 => TableCategory {
4081            parameter: String::from("Reserved"),
4082            units: String::from(""),
4083            abbrev: String::from("Reserved"),
4084        },
4085        _ => TableCategory {
4086            parameter: String::from("Reserved for Local Use"),
4087            units: String::from(""),
4088            abbrev: String::from("Reserved for Local Use"),
4089        },
4090    }
4091}
4092
4093/// # GRIB2 - TABLE 4.2-0-14
4094/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 14
4095/// (Meteorological products, Trace Gases category)
4096/// In Section 0, Octet 7 = 0
4097/// In Section 4, Octet 10 = 14
4098/// Revised 12/04/2020
4099/// Red text depicts changes made since 02/13/2012
4100///
4101/// **Notes:**
4102/// - Trace gases parameters, including Ozone and PM2.5 related metrics.
4103///   @see [GRIB2 - Table 4.2-0-14: Trace Gases Category](https://www.example.com)
4104///
4105/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 14.
4106///
4107/// # Arguments
4108/// * `category` - The parameter category within Discipline 0, Category 14 (u8).
4109///
4110/// # Returns
4111/// A `TableCategory` struct containing the description of the parameter category.
4112/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4113pub fn grib2_lookup_table42_014(category: u8) -> TableCategory {
4114    match category {
4115        0 => TableCategory {
4116            parameter: String::from("Total Ozone"),
4117            units: String::from("DU"),
4118            abbrev: String::from("TOZNE"),
4119        },
4120        1 => TableCategory {
4121            parameter: String::from("Ozone Mixing Ratio"),
4122            units: String::from("kg kg-1"),
4123            abbrev: String::from("O3MR"),
4124        },
4125        2 => TableCategory {
4126            parameter: String::from("Total Column Integrated Ozone"),
4127            units: String::from("DU"),
4128            abbrev: String::from("TCIOZ"),
4129        },
4130        192 => TableCategory {
4131            parameter: String::from("Ozone Mixing Ratio"),
4132            units: String::from("kg kg-1"),
4133            abbrev: String::from("O3MR"),
4134        },
4135        193 => TableCategory {
4136            parameter: String::from("Ozone Concentration"),
4137            units: String::from("ppb"),
4138            abbrev: String::from("OZCON"),
4139        },
4140        194 => TableCategory {
4141            parameter: String::from("Categorical Ozone Concentration"),
4142            units: String::from("Non-Dim"),
4143            abbrev: String::from("OZCAT"),
4144        },
4145        195 => TableCategory {
4146            parameter: String::from("Ozone Vertical Diffusion"),
4147            units: String::from("kg kg-1 s-1"),
4148            abbrev: String::from("VDFOZ"),
4149        },
4150        196 => TableCategory {
4151            parameter: String::from("Ozone Production"),
4152            units: String::from("kg kg-1 s-1"),
4153            abbrev: String::from("POZ"),
4154        },
4155        197 => TableCategory {
4156            parameter: String::from("Ozone Tendency"),
4157            units: String::from("kg kg-1 s-1"),
4158            abbrev: String::from("TOZ"),
4159        },
4160        198 => TableCategory {
4161            parameter: String::from("Ozone Production from Temperature Term"),
4162            units: String::from("kg kg-1 s-1"),
4163            abbrev: String::from("POZT"),
4164        },
4165        199 => TableCategory {
4166            parameter: String::from("Ozone Production from Column Ozone Term"),
4167            units: String::from("kg kg-1 s-1"),
4168            abbrev: String::from("POZO"),
4169        },
4170        200 => TableCategory {
4171            parameter: String::from("Ozone Daily Max from 1-hour Average"),
4172            units: String::from("ppbV"),
4173            abbrev: String::from("OZMAX1"),
4174        },
4175        201 => TableCategory {
4176            parameter: String::from("Ozone Daily Max from 8-hour Average"),
4177            units: String::from("ppbV"),
4178            abbrev: String::from("OZMAX8"),
4179        },
4180        202 => TableCategory {
4181            parameter: String::from("PM 2.5 Daily Max from 1-hour Average"),
4182            units: String::from("μg m-3"),
4183            abbrev: String::from("PDMAX1"),
4184        },
4185        203 => TableCategory {
4186            parameter: String::from("PM 2.5 Daily Max from 24-hour Average"),
4187            units: String::from("μg m-3"),
4188            abbrev: String::from("PDMAX24"),
4189        },
4190        204 => TableCategory {
4191            parameter: String::from("Acetaldehyde & Higher Aldehydes"),
4192            units: String::from("ppbV"),
4193            abbrev: String::from("ALD2"),
4194        },
4195        255 => TableCategory {
4196            parameter: String::from("Missing"),
4197            units: String::from(""),
4198            abbrev: String::from("Missing"),
4199        },
4200        3..=191 => TableCategory {
4201            parameter: String::from("Reserved"),
4202            units: String::from(""),
4203            abbrev: String::from("Reserved"),
4204        },
4205        _ => TableCategory {
4206            parameter: String::from("Reserved for Local Use"),
4207            units: String::from(""),
4208            abbrev: String::from("Reserved for Local Use"),
4209        },
4210    }
4211}
4212
4213/// # GRIB2 - TABLE 4.2-0-15
4214/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 15
4215/// (Meteorological products, Radar category)
4216/// In Section 0, Octet 7 = 0
4217/// In Section 4, Octet 10 = 15
4218/// Revised 12/05/2014
4219/// Red text depicts changes made since 04/08/2013
4220///
4221/// **Notes:**
4222/// - Radar-related parameters such as reflectivity, velocity, and precipitation.
4223///   @see [GRIB2 - Table 4.2-0-15: Radar Category](https://www.example.com)
4224///
4225/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 15.
4226///
4227/// # Arguments
4228/// * `category` - The parameter category within Discipline 0, Category 15 (u8).
4229///
4230/// # Returns
4231/// A `TableCategory` struct containing the description of the parameter category.
4232/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4233pub fn grib2_lookup_table42_015(category: u8) -> TableCategory {
4234    match category {
4235        0 => TableCategory {
4236            parameter: String::from("Base Spectrum Width"),
4237            units: String::from("m s-1"),
4238            abbrev: String::from("BSWID"),
4239        },
4240        1 => TableCategory {
4241            parameter: String::from("Base Reflectivity"),
4242            units: String::from("dB"),
4243            abbrev: String::from("BREF"),
4244        },
4245        2 => TableCategory {
4246            parameter: String::from("Base Radial Velocity"),
4247            units: String::from("m s-1"),
4248            abbrev: String::from("BRVEL"),
4249        },
4250        3 => TableCategory {
4251            parameter: String::from("Vertically-Integrated Liquid Water"),
4252            units: String::from("kg m-2"),
4253            abbrev: String::from("VIL"),
4254        },
4255        4 => TableCategory {
4256            parameter: String::from("Layer Maximum Base Reflectivity"),
4257            units: String::from("dB"),
4258            abbrev: String::from("LMAXBR"),
4259        },
4260        5 => TableCategory {
4261            parameter: String::from("Precipitation"),
4262            units: String::from("kg m-2"),
4263            abbrev: String::from("PREC"),
4264        },
4265        6 => TableCategory {
4266            parameter: String::from("Radar Spectra (1)"),
4267            units: String::from(""),
4268            abbrev: String::from("RDSP1"),
4269        },
4270        7 => TableCategory {
4271            parameter: String::from("Radar Spectra (2)"),
4272            units: String::from(""),
4273            abbrev: String::from("RDSP2"),
4274        },
4275        8 => TableCategory {
4276            parameter: String::from("Radar Spectra (3)"),
4277            units: String::from(""),
4278            abbrev: String::from("RDSP3"),
4279        },
4280        9 => TableCategory {
4281            parameter: String::from("Reflectivity of Cloud Droplets"),
4282            units: String::from("dB"),
4283            abbrev: String::from("RFCD"),
4284        },
4285        10 => TableCategory {
4286            parameter: String::from("Reflectivity of Cloud Ice"),
4287            units: String::from("dB"),
4288            abbrev: String::from("RFCI"),
4289        },
4290        11 => TableCategory {
4291            parameter: String::from("Reflectivity of Snow"),
4292            units: String::from("dB"),
4293            abbrev: String::from("RFSNOW"),
4294        },
4295        12 => TableCategory {
4296            parameter: String::from("Reflectivity of Rain"),
4297            units: String::from("dB"),
4298            abbrev: String::from("RFRAIN"),
4299        },
4300        13 => TableCategory {
4301            parameter: String::from("Reflectivity of Graupel"),
4302            units: String::from("dB"),
4303            abbrev: String::from("RFGRPL"),
4304        },
4305        14 => TableCategory {
4306            parameter: String::from("Reflectivity of Hail"),
4307            units: String::from("dB"),
4308            abbrev: String::from("RFHAIL"),
4309        },
4310        15 => TableCategory {
4311            parameter: String::from("Hybrid Scan Reflectivity"),
4312            units: String::from("dB"),
4313            abbrev: String::from("HSR"),
4314        },
4315        16 => TableCategory {
4316            parameter: String::from("Hybrid Scan Reflectivity Height"),
4317            units: String::from("m"),
4318            abbrev: String::from("HSRHT"),
4319        },
4320        192 => TableCategory {
4321            parameter: String::from("Missing"),
4322            units: String::from(""),
4323            abbrev: String::from("Missing"),
4324        },
4325        17..=191 => TableCategory {
4326            parameter: String::from("Reserved"),
4327            units: String::from(""),
4328            abbrev: String::from("Reserved"),
4329        },
4330        _ => TableCategory {
4331            parameter: String::from("Reserved for Local Use"),
4332            units: String::from(""),
4333            abbrev: String::from("Reserved for Local Use"),
4334        },
4335    }
4336}
4337
4338/// # GRIB2 - TABLE 4.2-0-16
4339/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 16
4340/// (Meteorological products, Forecast Radar Imagery category)
4341/// In Section 0, Octet 7 = 0
4342/// In Section 4, Octet 10 = 16
4343/// Revised 02/10/2021
4344/// Red text depicts changes made since 12/06/2011
4345///
4346/// **Notes:**
4347/// - Radar reflectivity and Echo Top products.
4348/// - For Echo Top product, Use octet number 38 to store threshold value (e.g., 18.3 dB) in Product Definition Template 4.20.
4349/// - Decibel (dB) is a logarithmic measure of the relative power or radar reflectivity.
4350///   @see [GRIB2 - Table 4.2-0-16: Forecast Radar Imagery](https://www.example.com)
4351///
4352/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 16.
4353///
4354/// # Arguments
4355/// * `category` - The parameter category within Discipline 0, Category 16 (u8).
4356///
4357/// # Returns
4358/// A `TableCategory` struct containing the description of the parameter category.
4359/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4360pub fn grib2_lookup_table42_016(category: u8) -> TableCategory {
4361    match category {
4362        0 => TableCategory {
4363            parameter: String::from("Equivalent radar reflectivity factor for rain"),
4364            units: String::from("m m6 m-3"),
4365            abbrev: String::from("REFZR"),
4366        },
4367        1 => TableCategory {
4368            parameter: String::from("Equivalent radar reflectivity factor for snow"),
4369            units: String::from("m m6 m-3"),
4370            abbrev: String::from("REFZI"),
4371        },
4372        2 => TableCategory {
4373            parameter: String::from(
4374                "Equivalent radar reflectivity factor for parameterized convection",
4375            ),
4376            units: String::from("m m6 m-3"),
4377            abbrev: String::from("REFZC"),
4378        },
4379        3 => TableCategory {
4380            parameter: String::from("Echo Top"),
4381            units: String::from("m"),
4382            abbrev: String::from("RETOP"),
4383        },
4384        4 => TableCategory {
4385            parameter: String::from("Reflectivity"),
4386            units: String::from("dB"),
4387            abbrev: String::from("REFD"),
4388        },
4389        5 => TableCategory {
4390            parameter: String::from("Composite reflectivity"),
4391            units: String::from("dB"),
4392            abbrev: String::from("REFC"),
4393        },
4394        192 => TableCategory {
4395            parameter: String::from("Equivalent radar reflectivity factor for rain"),
4396            units: String::from("m m6 m-3"),
4397            abbrev: String::from("REFZR"),
4398        },
4399        193 => TableCategory {
4400            parameter: String::from("Equivalent radar reflectivity factor for snow"),
4401            units: String::from("m m6 m-3"),
4402            abbrev: String::from("REFZI"),
4403        },
4404        194 => TableCategory {
4405            parameter: String::from(
4406                "Equivalent radar reflectivity factor for parameterized convection",
4407            ),
4408            units: String::from("m m6 m-3"),
4409            abbrev: String::from("REFZC"),
4410        },
4411        195 => TableCategory {
4412            parameter: String::from("Reflectivity"),
4413            units: String::from("dB"),
4414            abbrev: String::from("REFD"),
4415        },
4416        196 => TableCategory {
4417            parameter: String::from("Composite reflectivity"),
4418            units: String::from("dB"),
4419            abbrev: String::from("REFC"),
4420        },
4421        197 => TableCategory {
4422            parameter: String::from("Echo Top"),
4423            units: String::from("m"),
4424            abbrev: String::from("RETOP"),
4425        },
4426        198 => TableCategory {
4427            parameter: String::from("Hourly Maximum of Simulated Reflectivity"),
4428            units: String::from("dB"),
4429            abbrev: String::from("MAXREF"),
4430        },
4431        255 => TableCategory {
4432            parameter: String::from("Missing"),
4433            units: String::from(""),
4434            abbrev: String::from("Missing"),
4435        },
4436        6..=191 => TableCategory {
4437            parameter: String::from("Reserved"),
4438            units: String::from(""),
4439            abbrev: String::from("Reserved"),
4440        },
4441        _ => TableCategory {
4442            parameter: String::from("Reserved for Local Use"),
4443            units: String::from(""),
4444            abbrev: String::from("Reserved for Local Use"),
4445        },
4446    }
4447}
4448
4449/// # GRIB2 - TABLE 4.2-0-17
4450/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 17
4451/// (Meteorological products, Electrodynamics category)
4452/// In Section 0, Octet 7 = 0
4453/// In Section 4, Octet 10 = 17
4454/// Revised 02/23/2021
4455/// Red text depicts changes made since 05/28/2019
4456///
4457/// **Notes:**
4458/// 1. Definition of LPI after Lynn et. al. (2010): Prediction of lightning flash density with the WRF model, Adv. Geosci., 23, 11-16.
4459/// 2. The total lightning flash density is the sum of cloud-to-ground and cloud-to-cloud lightning flash densities.
4460/// 3. The subgrid-scale lightning potential index is derived from subgrid-scale information for models with coarser resolution.
4461///    @see [GRIB2 - Table 4.2-0-17: Electrodynamics](https://www.example.com)
4462///
4463/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 17.
4464///
4465/// # Arguments
4466/// * `category` - The parameter category within Discipline 0, Category 17 (u8).
4467///
4468/// # Returns
4469/// A `TableCategory` struct containing the description of the parameter category.
4470/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4471pub fn grib2_lookup_table42_017(category: u8) -> TableCategory {
4472    match category {
4473        0 => TableCategory {
4474            parameter: String::from("Lightning Strike Density"),
4475            units: String::from("m-2 s-1"),
4476            abbrev: String::from("LTNGSD"),
4477        },
4478        1 => TableCategory {
4479            parameter: String::from("Lightning Potential Index (LPI)"),
4480            units: String::from("J kg-1"),
4481            abbrev: String::from("LTPINX"),
4482        },
4483        2 => TableCategory {
4484            parameter: String::from("Cloud-to-Ground Lightning Flash Density"),
4485            units: String::from("km-2 day-1"),
4486            abbrev: String::from("CDGDLTFD"),
4487        },
4488        3 => TableCategory {
4489            parameter: String::from("Cloud-to-Cloud Lightning Flash Density"),
4490            units: String::from("km-2 day-1"),
4491            abbrev: String::from("CDCDLTFD"),
4492        },
4493        4 => TableCategory {
4494            parameter: String::from("Total Lightning Flash Density"),
4495            units: String::from("km-2 day-1"),
4496            abbrev: String::from("TLGTFD"),
4497        },
4498        5 => TableCategory {
4499            parameter: String::from("Subgrid-scale lightning potential index"),
4500            units: String::from("J kg-1"),
4501            abbrev: String::from("SLNGPIDX"),
4502        },
4503        192 => TableCategory {
4504            parameter: String::from("Lightning"),
4505            units: String::from("non-dim"),
4506            abbrev: String::from("LTNG"),
4507        },
4508        255 => TableCategory {
4509            parameter: String::from("Missing"),
4510            units: String::from(""),
4511            abbrev: String::from("Missing"),
4512        },
4513        6..=191 => TableCategory {
4514            parameter: String::from("Reserved"),
4515            units: String::from(""),
4516            abbrev: String::from("Reserved"),
4517        },
4518        _ => TableCategory {
4519            parameter: String::from("Reserved for Local Use"),
4520            units: String::from(""),
4521            abbrev: String::from("Reserved for Local Use"),
4522        },
4523    }
4524}
4525
4526/// # GRIB2 - TABLE 4.2-0-18
4527/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 18
4528/// (Meteorological products, Nuclear/Radiology Imagery category)
4529/// In Section 0, Octet 7 = 0
4530/// In Section 4, Octet 10 = 18
4531/// Revised 07/15/2024
4532/// Red text depicts changes made since 07/15/2024
4533///
4534/// **Notes:**
4535/// 1. Statistical process 1 (Accumulation) does not change units. It is recommended to use another parameter
4536///    without the word "time-integrated" in its name and accumulation in PDT.
4537/// 2. Conversion factor between "Specific Activity Concentration" (14) and "Air Concentration" (10) is "Mass Density" [kg m-3].
4538/// 3. Use the radionuclide release start date as baseline to determine activity arrival or activity end.
4539///    @see [GRIB2 - Table 4.2-0-18: Nuclear/Radiology Imagery](https://www.example.com)
4540///
4541/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 18.
4542///
4543/// # Arguments
4544/// * `category` - The parameter category within Discipline 0, Category 18 (u8).
4545///
4546/// # Returns
4547/// A `TableCategory` struct containing the description of the parameter category.
4548/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4549pub fn grib2_lookup_table42_018(category: u8) -> TableCategory {
4550    match category {
4551        0 => TableCategory {
4552            parameter: String::from("Air Concentration of Caesium 137"),
4553            units: String::from("Bq m-3"),
4554            abbrev: String::from("ACCES"),
4555        },
4556        1 => TableCategory {
4557            parameter: String::from("Air Concentration of Iodine 131"),
4558            units: String::from("Bq m-3"),
4559            abbrev: String::from("ACIOD"),
4560        },
4561        2 => TableCategory {
4562            parameter: String::from("Air Concentration of Radioactive Pollutant"),
4563            units: String::from("Bq m-3"),
4564            abbrev: String::from("ACRADP"),
4565        },
4566        3 => TableCategory {
4567            parameter: String::from("Ground Deposition of Caesium 137"),
4568            units: String::from("Bq m-2"),
4569            abbrev: String::from("GDCES"),
4570        },
4571        4 => TableCategory {
4572            parameter: String::from("Ground Deposition of Iodine 131"),
4573            units: String::from("Bq m-2"),
4574            abbrev: String::from("GDIOD"),
4575        },
4576        5 => TableCategory {
4577            parameter: String::from("Ground Deposition of Radioactive Pollutant"),
4578            units: String::from("Bq m-2"),
4579            abbrev: String::from("GDRADP"),
4580        },
4581        6 => TableCategory {
4582            parameter: String::from("Time Integrated Air Concentration of Cesium Pollutant"),
4583            units: String::from("Bq s m-3"),
4584            abbrev: String::from("TIACCP"),
4585        },
4586        7 => TableCategory {
4587            parameter: String::from("Time Integrated Air Concentration of Iodine Pollutant"),
4588            units: String::from("Bq s m-3"),
4589            abbrev: String::from("TIACIP"),
4590        },
4591        8 => TableCategory {
4592            parameter: String::from("Time Integrated Air Concentration of Radioactive Pollutant"),
4593            units: String::from("Bq s m-3"),
4594            abbrev: String::from("TIACRP"),
4595        },
4596        9 => TableCategory {
4597            parameter: String::from("Reserved"),
4598            units: String::from(""),
4599            abbrev: String::from("Reserved"),
4600        },
4601        10 => TableCategory {
4602            parameter: String::from("Air Concentration"),
4603            units: String::from("Bq m-3"),
4604            abbrev: String::from("AIRCON"),
4605        },
4606        11 => TableCategory {
4607            parameter: String::from("Wet Deposition"),
4608            units: String::from("Bq m-2"),
4609            abbrev: String::from("WETDEP"),
4610        },
4611        12 => TableCategory {
4612            parameter: String::from("Dry Deposition"),
4613            units: String::from("Bq m-2"),
4614            abbrev: String::from("DRYDEP"),
4615        },
4616        13 => TableCategory {
4617            parameter: String::from("Total Deposition (Wet + Dry)"),
4618            units: String::from("Bq m-2"),
4619            abbrev: String::from("TOTLWD"),
4620        },
4621        14 => TableCategory {
4622            parameter: String::from("Specific Activity Concentration"),
4623            units: String::from("Bq kg-1"),
4624            abbrev: String::from("SACON"),
4625        },
4626        15 => TableCategory {
4627            parameter: String::from("Maximum of Air Concentration in Layer"),
4628            units: String::from("Bq m-3"),
4629            abbrev: String::from("MAXACON"),
4630        },
4631        16 => TableCategory {
4632            parameter: String::from("Height of Maximum of Air Concentration"),
4633            units: String::from("m"),
4634            abbrev: String::from("HMXACON"),
4635        },
4636        17 => TableCategory {
4637            parameter: String::from("Column-Integrated Air Concentration"),
4638            units: String::from("Bq m-2"),
4639            abbrev: String::from("CIAIRC"),
4640        },
4641        18 => TableCategory {
4642            parameter: String::from("Column-Averaged Air Concentration in Layer"),
4643            units: String::from("Bq m-3"),
4644            abbrev: String::from("CAACL"),
4645        },
4646        19 => TableCategory {
4647            parameter: String::from("Deposition activity arrival"),
4648            units: String::from("s"),
4649            abbrev: String::from("DEPACTA"),
4650        },
4651        20 => TableCategory {
4652            parameter: String::from("Deposition activity ended"),
4653            units: String::from("s"),
4654            abbrev: String::from("DEPACTE"),
4655        },
4656        21 => TableCategory {
4657            parameter: String::from("Cloud activity arrival"),
4658            units: String::from("s"),
4659            abbrev: String::from("CLDACTA"),
4660        },
4661        22 => TableCategory {
4662            parameter: String::from("Cloud activity ended"),
4663            units: String::from("s"),
4664            abbrev: String::from("CLDACTE"),
4665        },
4666        23 => TableCategory {
4667            parameter: String::from("Effective dose rate"),
4668            units: String::from("nSv h-1"),
4669            abbrev: String::from("EFFDOSER"),
4670        },
4671        24 => TableCategory {
4672            parameter: String::from("Thyroid dose rate (adult)"),
4673            units: String::from("nSv h-1"),
4674            abbrev: String::from("THYDOSER"),
4675        },
4676        25 => TableCategory {
4677            parameter: String::from("Gamma dose rate (adult)"),
4678            units: String::from("nSv h-1"),
4679            abbrev: String::from("GAMDOSER"),
4680        },
4681        26 => TableCategory {
4682            parameter: String::from("Activity emission"),
4683            units: String::from("Bq s-1"),
4684            abbrev: String::from("ACTEMM"),
4685        },
4686        192 => TableCategory {
4687            parameter: String::from("Lightning"),
4688            units: String::from("non-dim"),
4689            abbrev: String::from("LTNG"),
4690        },
4691        255 => TableCategory {
4692            parameter: String::from("Missing"),
4693            units: String::from(""),
4694            abbrev: String::from("Missing"),
4695        },
4696        27..=191 => TableCategory {
4697            parameter: String::from("Reserved"),
4698            units: String::from(""),
4699            abbrev: String::from("Reserved"),
4700        },
4701        _ => TableCategory {
4702            parameter: String::from("Reserved for Local Use"),
4703            units: String::from(""),
4704            abbrev: String::from("Reserved for Local Use"),
4705        },
4706    }
4707}
4708
4709/// # GRIB2 - TABLE 4.2-0-19
4710/// PARAMETERS FOR DISCIPLINE 0 - CATEGORY 19
4711/// (Meteorological products, Physical Atmospheric category)
4712/// In Section 0, Octet 7 = 0
4713/// In Section 4, Octet 10 = 19
4714/// Revised 12/07/2023
4715/// Red text depicts changes made since 01/19/2022
4716///
4717/// **Notes:**
4718/// 1. Parameter deprecated - See Regulation 92.6.2 and use another parameter instead.
4719/// 2. Supercooled large droplets (SLD) are defined as those with a diameter greater than 50 microns.
4720/// 3. Eddy Dissipation parameter is third root of eddy dissipation rate [m2 s-3].
4721/// 4. In astronomy, sky transparency means the effect on the viewing experience caused by the scattering of light through atmospheric water vapour, aerosols or other constituents. Ideal transparency conditions produce a black night sky conducive to viewing faint astronomical objects, almost like being in outer space. In poor transparency conditions, which may occur even in cloud-free conditions, the deep sky background is greyish (not black), faint details are washed out and contrast is reduced.
4722/// 5. Seeing means the steadiness or turbulence of the atmosphere in the context of astronomical observation. Turbulence causes rapid random fluctuations of the optical path through the atmosphere. The twinkling of stars, for example, occurs in poor seeing conditions.
4723/// 6. A duct layer is an atmospheric layer with a refractivity which leads to a trapping of electromagnetic waves. In a trapping layer the refractivity leads to a bending of EM waves, which is stronger than the Earth's curvature.
4724///    @see [GRIB2 - Table 4.2-0-19: Physical Atmospheric](https://www.example.com)
4725///
4726/// This function provides a lookup for GRIB2 parameter categories for Discipline 0, Category 19.
4727///
4728/// # Arguments
4729/// * `category` - The parameter category within Discipline 0, Category 19 (u8).
4730///
4731/// # Returns
4732/// A `TableCategory` struct containing the description of the parameter category.
4733/// Returns a "Missing" TableCategory if the category is not found or is a special value.
4734pub fn grib2_lookup_table42_019(category: u8) -> TableCategory {
4735    match category {
4736        0 => TableCategory {
4737            parameter: String::from("Visibility"),
4738            units: String::from("m"),
4739            abbrev: String::from("VIS"),
4740        },
4741        1 => TableCategory {
4742            parameter: String::from("Albedo"),
4743            units: String::from("%"),
4744            abbrev: String::from("ALBDO"),
4745        },
4746        2 => TableCategory {
4747            parameter: String::from("Thunderstorm Probability"),
4748            units: String::from("%"),
4749            abbrev: String::from("TSTM"),
4750        },
4751        3 => TableCategory {
4752            parameter: String::from("Mixed Layer Depth"),
4753            units: String::from("m"),
4754            abbrev: String::from("MIXHT"),
4755        },
4756        4 => TableCategory {
4757            parameter: String::from("Volcanic Ash"),
4758            units: String::from("See Table 4.206"),
4759            abbrev: String::from("VOLASH"),
4760        },
4761        5 => TableCategory {
4762            parameter: String::from("Icing Top"),
4763            units: String::from("m"),
4764            abbrev: String::from("ICIT"),
4765        },
4766        6 => TableCategory {
4767            parameter: String::from("Icing Base"),
4768            units: String::from("m"),
4769            abbrev: String::from("ICIB"),
4770        },
4771        7 => TableCategory {
4772            parameter: String::from("Icing"),
4773            units: String::from("See Table 4.207"),
4774            abbrev: String::from("ICI"),
4775        },
4776        8 => TableCategory {
4777            parameter: String::from("Turbulence Top"),
4778            units: String::from("m"),
4779            abbrev: String::from("TURBT"),
4780        },
4781        9 => TableCategory {
4782            parameter: String::from("Turbulence Base"),
4783            units: String::from("m"),
4784            abbrev: String::from("TURBB"),
4785        },
4786        10 => TableCategory {
4787            parameter: String::from("Turbulence"),
4788            units: String::from("See Table 4.208"),
4789            abbrev: String::from("TURB"),
4790        },
4791        11 => TableCategory {
4792            parameter: String::from("Turbulent Kinetic Energy"),
4793            units: String::from("J kg-1"),
4794            abbrev: String::from("TKE"),
4795        },
4796        12 => TableCategory {
4797            parameter: String::from("Planetary Boundary Layer Regime"),
4798            units: String::from("See Table 4.209"),
4799            abbrev: String::from("PBLREG"),
4800        },
4801        13 => TableCategory {
4802            parameter: String::from("Contrail Intensity"),
4803            units: String::from("See Table 4.210"),
4804            abbrev: String::from("CONTI"),
4805        },
4806        14 => TableCategory {
4807            parameter: String::from("Contrail Engine Type"),
4808            units: String::from("See Table 4.211"),
4809            abbrev: String::from("CONTET"),
4810        },
4811        15 => TableCategory {
4812            parameter: String::from("Contrail Top"),
4813            units: String::from("m"),
4814            abbrev: String::from("CONTT"),
4815        },
4816        16 => TableCategory {
4817            parameter: String::from("Contrail Base"),
4818            units: String::from("m"),
4819            abbrev: String::from("CONTB"),
4820        },
4821        17 => TableCategory {
4822            parameter: String::from("Maximum Snow Albedo"),
4823            units: String::from("%"),
4824            abbrev: String::from("MXSALB"),
4825        },
4826        18 => TableCategory {
4827            parameter: String::from("Snow-Free Albedo"),
4828            units: String::from("%"),
4829            abbrev: String::from("SNFALB"),
4830        },
4831        19 => TableCategory {
4832            parameter: String::from("Snow Albedo"),
4833            units: String::from("%"),
4834            abbrev: String::from("SALBD"),
4835        },
4836        20 => TableCategory {
4837            parameter: String::from("Icing"),
4838            units: String::from("%"),
4839            abbrev: String::from("ICIP"),
4840        },
4841        21 => TableCategory {
4842            parameter: String::from("In-Cloud Turbulence"),
4843            units: String::from("%"),
4844            abbrev: String::from("CTP"),
4845        },
4846        22 => TableCategory {
4847            parameter: String::from("Clear Air Turbulence (CAT)"),
4848            units: String::from("%"),
4849            abbrev: String::from("CAT"),
4850        },
4851        23 => TableCategory {
4852            parameter: String::from("Supercooled Large Droplet Probability"),
4853            units: String::from("%"),
4854            abbrev: String::from("SLDP"),
4855        },
4856        24 => TableCategory {
4857            parameter: String::from("Convective Turbulent Kinetic Energy"),
4858            units: String::from("J kg-1"),
4859            abbrev: String::from("CONTKE"),
4860        },
4861        25 => TableCategory {
4862            parameter: String::from("Weather"),
4863            units: String::from("See Table 4.225"),
4864            abbrev: String::from("WIWW"),
4865        },
4866        26 => TableCategory {
4867            parameter: String::from("Convective Outlook"),
4868            units: String::from("See Table 4.224"),
4869            abbrev: String::from("CONVO"),
4870        },
4871        27 => TableCategory {
4872            parameter: String::from("Icing Scenario"),
4873            units: String::from("See Table 4.227"),
4874            abbrev: String::from("ICESC"),
4875        },
4876        28 => TableCategory {
4877            parameter: String::from("Mountain Wave Turbulence (Eddy Dissipation Rate)"),
4878            units: String::from("m2/3 s-1"),
4879            abbrev: String::from("MWTURB"),
4880        },
4881        29 => TableCategory {
4882            parameter: String::from("Clear Air Turbulence (CAT) (Eddy Dissipation Rate)"),
4883            units: String::from("m2/3 s-1"),
4884            abbrev: String::from("CATEDR"),
4885        },
4886        30 => TableCategory {
4887            parameter: String::from("Eddy Dissipation Parameter"),
4888            units: String::from("m2/3 s-1"),
4889            abbrev: String::from("EDPARM"),
4890        },
4891        31 => TableCategory {
4892            parameter: String::from("Maximum of Eddy Dissipation Parameter in Layer"),
4893            units: String::from("m2/3 s-1"),
4894            abbrev: String::from("MXEDPRM"),
4895        },
4896        32 => TableCategory {
4897            parameter: String::from("Highest Freezing Level"),
4898            units: String::from("m"),
4899            abbrev: String::from("HIFREL"),
4900        },
4901        33 => TableCategory {
4902            parameter: String::from("Visibility Through Liquid Fog"),
4903            units: String::from("m"),
4904            abbrev: String::from("VISLFOG"),
4905        },
4906        34 => TableCategory {
4907            parameter: String::from("Visibility Through Ice Fog"),
4908            units: String::from("m"),
4909            abbrev: String::from("VISIFOG"),
4910        },
4911        35 => TableCategory {
4912            parameter: String::from("Visibility Through Blowing Snow"),
4913            units: String::from("m"),
4914            abbrev: String::from("VISBSN"),
4915        },
4916        36 => TableCategory {
4917            parameter: String::from("Presence of Snow Squalls"),
4918            units: String::from("See Table 4.222"),
4919            abbrev: String::from("PSNOWS"),
4920        },
4921        37 => TableCategory {
4922            parameter: String::from("Icing Severity"),
4923            units: String::from("See Table 4.228"),
4924            abbrev: String::from("ICESEV"),
4925        },
4926        38 => TableCategory {
4927            parameter: String::from("Sky transparency index"),
4928            units: String::from("See Table 4.214"),
4929            abbrev: String::from("SKYIDX"),
4930        },
4931        39 => TableCategory {
4932            parameter: String::from("Seeing index"),
4933            units: String::from("See Table 4.214"),
4934            abbrev: String::from("SEEINDEX"),
4935        },
4936        40 => TableCategory {
4937            parameter: String::from("Snow level"),
4938            units: String::from("m"),
4939            abbrev: String::from("SNOWLVL"),
4940        },
4941        41 => TableCategory {
4942            parameter: String::from("Duct base height"),
4943            units: String::from("m"),
4944            abbrev: String::from("DBHEIGHT"),
4945        },
4946        42 => TableCategory {
4947            parameter: String::from("Trapping layer base height"),
4948            units: String::from("m"),
4949            abbrev: String::from("TLBHEIGHT"),
4950        },
4951        43 => TableCategory {
4952            parameter: String::from("Trapping layer top height"),
4953            units: String::from("m"),
4954            abbrev: String::from("TLTHEIGHT"),
4955        },
4956        44 => TableCategory {
4957            parameter: String::from("Mean vertical gradient of refractivity inside trapping layer"),
4958            units: String::from("m-1"),
4959            abbrev: String::from("MEANVGRTL"),
4960        },
4961        45 => TableCategory {
4962            parameter: String::from(
4963                "Minimum vertical gradient of refractivity inside trapping layer",
4964            ),
4965            units: String::from("m-1"),
4966            abbrev: String::from("MINVGRTL"),
4967        },
4968        46 => TableCategory {
4969            parameter: String::from("Net radiation flux"),
4970            units: String::from("W m-2"),
4971            abbrev: String::from("NETRADFLUX"),
4972        },
4973        47 => TableCategory {
4974            parameter: String::from("Global irradiance on tilted surfaces"),
4975            units: String::from("W m-2"),
4976            abbrev: String::from("GLIRRTS"),
4977        },
4978        48 => TableCategory {
4979            parameter: String::from("Top of persistent contrails"),
4980            units: String::from("m"),
4981            abbrev: String::from("PCONTT"),
4982        },
4983        49 => TableCategory {
4984            parameter: String::from("Base of persistent contrails"),
4985            units: String::from("m"),
4986            abbrev: String::from("PCONTB"),
4987        },
4988        50 => TableCategory {
4989            parameter: String::from(
4990                "Convectively-induced turbulence (CIT) (eddy dissipation rate)",
4991            ),
4992            units: String::from("m2/3 s-1"),
4993            abbrev: String::from("CITEDR"),
4994        },
4995        192 => TableCategory {
4996            parameter: String::from("Maximum Snow Albedo"),
4997            units: String::from("%"),
4998            abbrev: String::from("MXSALB"),
4999        },
5000        193 => TableCategory {
5001            parameter: String::from("Snow-Free Albedo"),
5002            units: String::from("%"),
5003            abbrev: String::from("SNFALB"),
5004        },
5005        194 => TableCategory {
5006            parameter: String::from("Slight risk convective outlook"),
5007            units: String::from("categorical"),
5008            abbrev: String::from("SRCONO"),
5009        },
5010        195 => TableCategory {
5011            parameter: String::from("Moderate risk convective outlook"),
5012            units: String::from("categorical"),
5013            abbrev: String::from("MRCONO"),
5014        },
5015        196 => TableCategory {
5016            parameter: String::from("High risk convective outlook"),
5017            units: String::from("categorical"),
5018            abbrev: String::from("HRCONO"),
5019        },
5020        197 => TableCategory {
5021            parameter: String::from("Tornado probability"),
5022            units: String::from("%"),
5023            abbrev: String::from("TORPROB"),
5024        },
5025        198 => TableCategory {
5026            parameter: String::from("Hail probability"),
5027            units: String::from("%"),
5028            abbrev: String::from("HAILPROB"),
5029        },
5030        199 => TableCategory {
5031            parameter: String::from("Wind probability"),
5032            units: String::from("%"),
5033            abbrev: String::from("WINDPROB"),
5034        },
5035        200 => TableCategory {
5036            parameter: String::from("Significant Tornado probability"),
5037            units: String::from("%"),
5038            abbrev: String::from("STORPROB"),
5039        },
5040        201 => TableCategory {
5041            parameter: String::from("Significant Hail probability"),
5042            units: String::from("%"),
5043            abbrev: String::from("SHAILPRO"),
5044        },
5045        202 => TableCategory {
5046            parameter: String::from("Significant Wind probability"),
5047            units: String::from("%"),
5048            abbrev: String::from("SWINDPRO"),
5049        },
5050        203 => TableCategory {
5051            parameter: String::from("Categorical Thunderstorm"),
5052            units: String::from("Code table 4.222"),
5053            abbrev: String::from("TSTMC"),
5054        },
5055        204 => TableCategory {
5056            parameter: String::from("Number of mixed layers next to surface"),
5057            units: String::from("integer"),
5058            abbrev: String::from("MIXLY"),
5059        },
5060        205 => TableCategory {
5061            parameter: String::from("Flight Category"),
5062            units: String::from(""),
5063            abbrev: String::from("FLGHT"),
5064        },
5065        206 => TableCategory {
5066            parameter: String::from("Confidence - Ceiling"),
5067            units: String::from(""),
5068            abbrev: String::from("CICEL"),
5069        },
5070        207 => TableCategory {
5071            parameter: String::from("Confidence - Visibility"),
5072            units: String::from(""),
5073            abbrev: String::from("CIVIS"),
5074        },
5075        208 => TableCategory {
5076            parameter: String::from("Confidence - Flight Category"),
5077            units: String::from(""),
5078            abbrev: String::from("CIFLT"),
5079        },
5080        209 => TableCategory {
5081            parameter: String::from("Low-Level aviation interest"),
5082            units: String::from(""),
5083            abbrev: String::from("LAVNI"),
5084        },
5085        210 => TableCategory {
5086            parameter: String::from("High-Level aviation interest"),
5087            units: String::from(""),
5088            abbrev: String::from("HAVNI"),
5089        },
5090        211 => TableCategory {
5091            parameter: String::from("Visible, Black Sky Albedo"),
5092            units: String::from("%"),
5093            abbrev: String::from("SBSALB"),
5094        },
5095        212 => TableCategory {
5096            parameter: String::from("Visible, White Sky Albedo"),
5097            units: String::from("%"),
5098            abbrev: String::from("SWSALB"),
5099        },
5100        213 => TableCategory {
5101            parameter: String::from("Near IR, Black Sky Albedo"),
5102            units: String::from("%"),
5103            abbrev: String::from("NBSALB"),
5104        },
5105        214 => TableCategory {
5106            parameter: String::from("Near IR, White Sky Albedo"),
5107            units: String::from("%"),
5108            abbrev: String::from("NWSALB"),
5109        },
5110        215 => TableCategory {
5111            parameter: String::from("Total Probability of Severe Thunderstorms (Days 2,3)"),
5112            units: String::from("%"),
5113            abbrev: String::from("PRSVR"),
5114        },
5115        216 => TableCategory {
5116            parameter: String::from("Total Probability of Extreme Severe Thunderstorms (Days 2,3)"),
5117            units: String::from("%"),
5118            abbrev: String::from("PRSIGSVR"),
5119        },
5120        217 => TableCategory {
5121            parameter: String::from("Supercooled Large Droplet (SLD) Icing"),
5122            units: String::from("See Table 4.207"),
5123            abbrev: String::from("SIPD"),
5124        },
5125        218 => TableCategory {
5126            parameter: String::from("Radiative emissivity"),
5127            units: String::from(""),
5128            abbrev: String::from("EPSR"),
5129        },
5130        219 => TableCategory {
5131            parameter: String::from("Turbulence Potential Forecast Index"),
5132            units: String::from(""),
5133            abbrev: String::from("TPFI"),
5134        },
5135        220 => TableCategory {
5136            parameter: String::from("Categorical Severe Thunderstorm"),
5137            units: String::from("Code table 4.222"),
5138            abbrev: String::from("SVRTS"),
5139        },
5140        221 => TableCategory {
5141            parameter: String::from("Probability of Convection"),
5142            units: String::from("%"),
5143            abbrev: String::from("PROCON"),
5144        },
5145        222 => TableCategory {
5146            parameter: String::from("Convection Potential"),
5147            units: String::from("Code table 4.222"),
5148            abbrev: String::from("CONVP"),
5149        },
5150        232 => TableCategory {
5151            parameter: String::from("Volcanic Ash Forecast Transport and Dispersion"),
5152            units: String::from("log10 (kg m-3)"),
5153            abbrev: String::from("VAFTD"),
5154        },
5155        233 => TableCategory {
5156            parameter: String::from("Icing probability"),
5157            units: String::from("non-dim"),
5158            abbrev: String::from("ICPRB"),
5159        },
5160        234 => TableCategory {
5161            parameter: String::from("Icing Severity"),
5162            units: String::from("non-dim"),
5163            abbrev: String::from("ICSEV"),
5164        },
5165        235 => TableCategory {
5166            parameter: String::from("Joint Fire Weather Probability"),
5167            units: String::from("%"),
5168            abbrev: String::from("JFWPRB"),
5169        },
5170        236 => TableCategory {
5171            parameter: String::from("Snow Level"),
5172            units: String::from("m"),
5173            abbrev: String::from("SNOWLVL"),
5174        },
5175        237 => TableCategory {
5176            parameter: String::from("Dry Thunderstorm Probability"),
5177            units: String::from("%"),
5178            abbrev: String::from("DRYTPROB"),
5179        },
5180        238 => TableCategory {
5181            parameter: String::from("Ellrod Index"),
5182            units: String::from(""),
5183            abbrev: String::from("ELLINX"),
5184        },
5185        239 => TableCategory {
5186            parameter: String::from("Craven-Wiedenfeld Aggregate Severe Parameter"),
5187            units: String::from("Numeric"),
5188            abbrev: String::from("CWASP"),
5189        },
5190        240 => TableCategory {
5191            parameter: String::from("Continuous Icing Severity"),
5192            units: String::from("non-dim"),
5193            abbrev: String::from("ICESEVCON"),
5194        },
5195        255 => TableCategory {
5196            parameter: String::from("Missing"),
5197            units: String::from(""),
5198            abbrev: String::from(""),
5199        },
5200        51..=191 => TableCategory {
5201            parameter: String::from("Reserved"),
5202            units: String::from(""),
5203            abbrev: String::from("Reserved"),
5204        },
5205        223..=231 => TableCategory {
5206            parameter: String::from("Reserved"),
5207            units: String::from(""),
5208            abbrev: String::from("Reserved"),
5209        },
5210        _ => TableCategory {
5211            parameter: String::from("Reserved for Local Use"),
5212            units: String::from(""),
5213            abbrev: String::from("Reserved for Local Use"),
5214        },
5215    }
5216}