UNPKG

vgrib2

Version:

[![npm version](https://badge.fury.io/js/vgrib2.svg)](https://badge.fury.io/js/vgrib2)

914 lines (894 loc) 43.2 kB
/** * Table 4.0 - PRODUCT DEFINITION TEMPLATE NUMBER * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-0.shtml) */ export const lookupTable40 = (code: number) => { switch (code) { case 0: return 'Analysis or forecast at a horizontal level or in a horizontal layer at a point in time.' case 1: return 'Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.' case 2: return 'Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time.' case 3: return '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.' case 4: return '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.' case 5: return 'Probability forecasts at a horizontal level or in a horizontal layer at a point in time.' case 6: return 'Percentile forecasts at a horizontal level or in a horizontal layer at a point in time.' case 7: return 'Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time.' case 8: return '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.' case 9: return 'Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.' case 10: return 'Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.' case 11: return 'Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.' case 12: return 'Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval.' case 13: return '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.' case 14: return '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.' case 15: return '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.' case 20: return 'Radar product' case 30: return 'Satellite product  NOTE: This template is deprecated. Template 4.31 should be used instead.' case 31: return 'Satellite product' case 32: return 'Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulate (synthetic) satellite data' case 33: return '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' case 34: return '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' case 35: return 'Satellite product with or without associated quality values' case 40: return 'Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents.' case 41: return 'Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents.' case 42: return '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.' case 43: return '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.' case 44: return 'Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol.' case 45: return '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.' case 46: return '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.' case 47: return '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.' case 48: return 'Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol.' case 49: return '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.' case 51: return 'Categorical forecast at a horizontal level or in a horizontal layer at a point in time.' case 53: return 'Partitioned names at a horizontal level or horizontal layer at a point in time.' case 54: return 'Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned names.' case 55: return 'Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time' case 56: return '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 names.' case 57: return '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' case 58: return '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' case 59: return '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 names (corrected version of template 4.56 - See Template 4.59)' case 60: return 'Individual Ensemble Reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.' case 61: return 'Individual Ensemble Reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval' case 62: return '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' case 63: return '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' case 67: return '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' case 68: return '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.' case 70: return 'Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time.' case 71: return 'Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time.' case 72: return '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.' case 73: return '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.' case 91: return 'Categorical forecast at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval.' case 254: return 'CCITT IA5 character string' case 1000: return 'Cross-section of analysis and forecast at a point in time.' case 1001: return 'Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time.' case 1002: return 'Cross-section of analysis and forecast, averaged or otherwise statistically-processed over latitude or longitude.' case 1100: return 'Hovmoller-type grid with no averaging or other statistical processing' case 1101: return 'Hovmoller-type grid with averaging or other statistical processing' case 65535: return 'Missing' default: throw new Error(`Table 4.0 missing code value: ${code}`) } } /** * Table 4.1 - name CATEGORY BY PRODUCT DISCIPLINE * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-1.shtml) */ export const lookupTable41 = (discipline: number, code: number) => { switch (discipline) { case 0: switch (code) { case 0: return 'Temperature' case 1: return 'Moisture' case 2: return 'Momentum' case 3: return 'Mass' case 4: return 'Short-wave radiation' case 5: return 'Long-wave radiation' case 6: return 'Cloud' case 7: return 'Thermodynamic Stability indicies' case 8: return 'Kinematic Stability indicies' case 9: return 'Temperature Probabilities*' case 10: return 'Moisture Probabilities*' case 11: return 'Momentum Probabilities*' case 12: return 'Mass Probabilities*' case 13: return 'Aerosols' case 14: return 'Trace gases (e.g. Ozone, CO2)' case 15: return 'Radar' case 16: return 'Forecast Radar Imagery' case 17: return 'Electrodynamics' case 18: return 'Nuclear/radiology' case 19: return 'Physical atmospheric properties' case 20: return 'Atmospheric chemical Constituents' case 190: return 'CCITT IA5 string' case 191: return 'Miscellaneous' case 192: return 'Covariance' case 255: return 'Missing' default: throw new Error(`Table 4.1 with discipline ${discipline} missing code value ${code}`) } default: throw new Error(`Table 4.1 missing discipline value: ${code}`) } } /** * Table 4.2 - name NUMBER BY PRODUCT DISCIPLINE AND name CATEGORY * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-2.shtml) */ export const lookupTable42 = (discipline: number, category: number, code: number) => { const noDisciplineError = new Error(`Table 4.2 missing discipline value: ${code}`) const noCategoryError = new Error(`Table 4.2 with discipline ${discipline} missing category value ${category}`) const noCodeError = new Error(`Table 4.2 with discipline ${discipline} and category value ${category} missing code value ${code}`) switch (discipline) { // Discipline 0 case 0: switch (category) { // Category 0 case 0: switch (code) { case 0: return { name: 'Temperature', units: 'K', abbrev: 'TMP' } case 1: return { name: 'Virtual Temperature', units: 'K', abbrev: 'VTMP' } case 2: return { name: 'Potential Temperature', units: 'K', abbrev: 'POT' } case 3: return { name: 'Pseudo-Adiabatic Potential Temperature (or Equivalent Potential Temperature)', units: 'K', abbrev: 'EPOT' } case 4: return { name: 'Maximum Temperature*', units: 'K', abbrev: 'TMAX' } case 5: return { name: 'Minimum Temperature*', units: 'K', abbrev: 'TMIN' } case 6: return { name: 'Dew Point Temperature', units: 'K', abbrev: 'DPT' } case 7: return { name: 'Dew Point Depression (or Deficit)', units: 'K', abbrev: 'DEPR' } case 8: return { name: 'Lapse Rate', units: 'K m-1', abbrev: 'LAPR' } case 9: return { name: 'Temperature Anomaly', units: 'K', abbrev: 'TMPA' } case 10: return { name: 'Latent Heat Net Flux', units: 'W m-2', abbrev: 'LHTFL' } case 11: return { name: 'Sensible Heat Net Flux', units: 'W m-2', abbrev: 'SHTFL' } case 12: return { name: 'Heat Index', units: 'K', abbrev: 'HEATX' } case 13: return { name: 'Wind Chill Factor', units: 'K', abbrev: 'WCF' } case 14: return { name: 'Minimum Dew Point Depression*', units: 'K', abbrev: 'MINDPD' } case 15: return { name: 'Virtual Potential Temperature', units: 'K', abbrev: 'VPTMP' } case 16: return { name: 'Snow Phase Change Heat Flux', units: 'W m-2', abbrev: 'SNOHF' } case 17: return { name: 'Skin Temperature', units: 'K', abbrev: 'SKINT' } case 18: return { name: 'Snow Temperature (top of snow)', units: 'K', abbrev: 'SNOT' } case 19: return { name: 'Turbulent Transfer Coefficient for Heat', units: 'Numeric', abbrev: 'TTCHT' } case 20: return { name: 'Turbulent Diffusion Coefficient for Heat', units: 'm2s-1', abbrev: 'TDCHT' } case 21: return { name: 'Apparent Temperature **', units: 'K', abbrev: 'APTMP' } case 22: return { name: 'Temperature Tendency due to Short-Wave Radiation', units: 'K s-1', abbrev: 'TTSWR' } case 23: return { name: 'Temperature Tendency due to Long-Wave Radiation', units: 'K s-1', abbrev: 'TTLWR' } case 24: return { name: 'Temperature Tendency due to Short-Wave Radiation, Clear Sky', units: 'K s-1', abbrev: 'TTSWRCS' } case 25: return { name: 'Temperature Tendency due to Long-Wave Radiation, Clear Sky', units: 'K s-1', abbrev: 'TTLWRCS' } case 26: return { name: 'Temperature Tendency due to nameizations', units: 'K s-1', abbrev: 'TTPARM' } case 27: return { name: 'Wet Bulb Temperature', units: 'K', abbrev: 'WETBT' } case 28: return { name: 'Unbalanced Component of Temperature', units: 'K', abbrev: 'UCTMP' } case 29: return { name: 'Temperature Advection', units: 'K s-1', abbrev: 'TMPADV' } case 192: return { name: 'Snow Phase Change Heat Flux', units: 'W m-2', abbrev: 'SNOHF' } case 193: return { name: 'Temperature Tendency by All Radiation', units: 'K s-1', abbrev: 'TTRAD' } case 194: return { name: 'Relative Error Variance', units: '', abbrev: 'REV' } case 195: return { name: 'Large Scale Condensate Heating Rate', units: 'K s-1', abbrev: 'LRGHR' } case 196: return { name: 'Deep Convective Heating Rate', units: 'K s-1', abbrev: 'CNVHR' } case 197: return { name: 'Total Downward Heat Flux at Surface', units: 'W m-2', abbrev: 'THFLX' } case 198: return { name: 'Temperature Tendency by All Physics', units: 'K s-1', abbrev: 'TTDIA' } case 199: return { name: 'Temperature Tendency by Non-radiation Physics', units: 'K s-1', abbrev: 'TTPHY' } case 200: return { name: 'Standard Dev. of IR Temp. over 1x1 deg. area', units: 'K', abbrev: 'TSD1D' } case 201: return { name: 'Shallow Convective Heating Rate', units: 'K s-1', abbrev: 'SHAHR' } case 202: return { name: 'Vertical Diffusion Heating rate', units: 'K s-1', abbrev: 'VDFHR' } case 203: return { name: 'Potential Temperature at Top of Viscous Sublayer', units: 'K', abbrev: 'THZ0' } case 204: return { name: 'Tropical Cyclone Heat Potential', units: 'Jm-2K', abbrev: 'TCHP' } case 205: return { name: 'Effective Layer (EL) Temperature', units: 'C', abbrev: 'ELMELT' } case 255: return { name: 'Missing', units: '', abbrev: '' } default: throw noCodeError } // Category 2 case 2: switch (code) { case 0: return { name: 'Wind Direction (from which blowing)', units: '°', abbrev: 'WDIR' } case 1: return { name: 'Wind Speed', units: 'm s-1', abbrev: 'WIND' } case 2: return { name: 'U-Component of Wind', units: 'm s-1', abbrev: 'UGRD' } case 3: return { name: 'V-Component of Wind', units: 'm s-1', abbrev: 'VGRD' } case 4: return { name: 'Stream Function', units: 'm2 s-1', abbrev: 'STRM' } case 5: return { name: 'Velocity Potential', units: 'm2 s-1', abbrev: 'VPOT' } case 6: return { name: 'Montgomery Stream Function', units: 'm2 s-2', abbrev: 'MNTSF' } case 7: return { name: 'Sigma Coordinate Vertical Velocity', units: 's-1', abbrev: 'SGCVV' } case 8: return { name: 'Vertical Velocity (Pressure)', units: 'Pa s-1', abbrev: 'VVEL' } case 9: return { name: 'Vertical Velocity (Geometric)', units: 'm s-1', abbrev: 'DZDT' } case 10: return { name: 'Absolute Vorticity', units: 's-1', abbrev: 'ABSV' } case 11: return { name: 'Absolute Divergence', units: 's-1', abbrev: 'ABSD' } case 12: return { name: 'Relative Vorticity', units: 's-1', abbrev: 'RELV' } case 13: return { name: 'Relative Divergence', units: 's-1', abbrev: 'RELD' } case 14: return { name: 'Potential Vorticity', units: 'K m2 kg-1 s-1', abbrev: 'PVORT' } case 15: return { name: 'Vertical U-Component Shear', units: 's-1', abbrev: 'VUCSH' } case 16: return { name: 'Vertical V-Component Shear', units: 's-1', abbrev: 'VVCSH' } case 17: return { name: 'Momentum Flux, U-Component', units: 'N m-2', abbrev: 'UFLX' } case 18: return { name: 'Momentum Flux, V-Component', units: 'N m-2', abbrev: 'VFLX' } case 19: return { name: 'Wind Mixing Energy', units: 'J', abbrev: 'WMIXE' } case 20: return { name: 'Boundary Layer Dissipation', units: 'W m-2', abbrev: 'BLYDP' } case 21: return { name: 'Maximum Wind Speed *', units: 'm s-1', abbrev: 'MAXGUST' } case 22: return { name: 'Wind Speed (Gust)', units: 'm s-1', abbrev: 'GUST' } case 23: return { name: 'U-Component of Wind (Gust)', units: 'm s-1', abbrev: 'UGUST' } case 24: return { name: 'V-Component of Wind (Gust)', units: 'm s-1', abbrev: 'VGUST' } case 25: return { name: 'Vertical Speed Shear', units: 's-1', abbrev: 'VWSH' } case 26: return { name: 'Horizontal Momentum Flux', units: 'N m-2', abbrev: 'MFLX' } case 27: return { name: 'U-Component Storm Motion', units: 'm s-1', abbrev: 'USTM' } case 28: return { name: 'V-Component Storm Motion', units: 'm s-1', abbrev: 'VSTM' } case 29: return { name: 'Drag Coefficient', units: 'Numeric', abbrev: 'CD' } case 30: return { name: 'Frictional Velocity', units: 'm s-1', abbrev: 'FRICV' } case 31: return { name: 'Turbulent Diffusion Coefficient for Momentum', units: 'm2 s-1', abbrev: 'TDCMOM' } case 32: return { name: 'Eta Coordinate Vertical Velocity', units: 's-1', abbrev: 'ETACVV' } case 33: return { name: 'Wind Fetch', units: 'm', abbrev: 'WINDF' } case 34: return { name: 'Normal Wind Component **', units: 'm s-1', abbrev: 'NWIND' } case 35: return { name: 'Tangential Wind Component **', units: 'm s-1', abbrev: 'TWIND' } case 36: return { name: 'Amplitude Function for Rossby Wave Envelope for Meridional Wind ***', units: 'm s-1', abbrev: 'AFRWE' } case 37: return { name: 'Northward Turbulent Surface Stress ****', units: 'N m-2 s', abbrev: 'NTSS' } case 38: return { name: 'Eastward Turbulent Surface Stress ****', units: 'N m-2 s', abbrev: 'ETSS' } case 39: return { name: 'Eastward Wind Tendency Due to nameizations', units: 'm s-2', abbrev: 'EWTPARM' } case 40: return { name: 'Northward Wind Tendency Due to nameizations', units: 'm s-2', abbrev: 'NWTPARM' } case 41: return { name: 'U-Component of Geostrophic Wind', units: 'm s-1', abbrev: 'UGWIND' } case 42: return { name: 'V-Component of Geostrophic Wind', units: 'm s-1', abbrev: 'VGWIND' } case 43: return { name: 'Geostrophic Wind Direction', units: '°', abbrev: 'GEOWD' } case 44: return { name: 'Geostrophic Wind Speed', units: 'm s-1', abbrev: 'GEOWS' } case 45: return { name: 'Unbalanced Component of Divergence', units: 's-1', abbrev: 'UNDIV' } case 46: return { name: 'Vorticity Advection', units: 's-2', abbrev: 'VORTADV' } case 192: return { name: 'Vertical Speed Shear', units: 's-1', abbrev: 'VWSH' } case 193: return { name: 'Horizontal Momentum Flux', units: 'N m-2', abbrev: 'MFLX' } case 194: return { name: 'U-Component Storm Motion', units: 'm s-1', abbrev: 'USTM' } case 195: return { name: 'V-Component Storm Motion', units: 'm s-1', abbrev: 'VSTM' } case 196: return { name: 'Drag Coefficient', units: 'non-dim', abbrev: 'CD' } case 197: return { name: 'Frictional Velocity', units: 'm s-1', abbrev: 'FRICV' } case 198: return { name: 'Latitude of U Wind Component of Velocity', units: 'deg', abbrev: 'LAUV' } case 199: return { name: 'Longitude of U Wind Component of Velocity', units: 'deg', abbrev: 'LOUV' } case 200: return { name: 'Latitude of V Wind Component of Velocity', units: 'deg', abbrev: 'LAVV' } case 201: return { name: 'Longitude of V Wind Component of Velocity', units: 'deg', abbrev: 'LOVV' } case 202: return { name: 'Latitude of Presure Point', units: 'deg', abbrev: 'LAPP' } case 203: return { name: 'Longitude of Presure Point', units: 'deg', abbrev: 'LOPP' } case 204: return { name: 'Vertical Eddy Diffusivity Heat exchange', units: 'm2 s-1', abbrev: 'VEDH' } case 205: return { name: 'Covariance between Meridional and Zonal Components of the wind.', units: 'm2 s-2', abbrev: 'COVMZ' } case 206: return { name: 'Covariance between Temperature and Zonal Components of the wind.', units: 'K*m s-1', abbrev: 'COVTZ' } case 207: return { name: 'Covariance between Temperature and Meridional Components of the wind.', units: 'K*m s-1', abbrev: 'COVTM' } case 208: return { name: 'Vertical Diffusion Zonal Acceleration', units: 'm s-2', abbrev: 'VDFUA' } case 209: return { name: 'Vertical Diffusion Meridional Acceleration', units: 'm s-2', abbrev: 'VDFVA' } case 210: return { name: 'Gravity wave drag zonal acceleration', units: 'm s-2', abbrev: 'GWDU' } case 211: return { name: 'Gravity wave drag meridional acceleration', units: 'm s-2', abbrev: 'GWDV' } case 212: return { name: 'Convective zonal momentum mixing acceleration', units: 'm s-2', abbrev: 'CNVU' } case 213: return { name: 'Convective meridional momentum mixing acceleration', units: 'm s-2', abbrev: 'CNVV' } case 214: return { name: 'Tendency of vertical velocity', units: 'm s-2', abbrev: 'WTEND' } case 215: return { name: 'Omega (Dp/Dt) divide by density', units: 'K', abbrev: 'OMGALF' } case 216: return { name: 'Convective Gravity wave drag zonal acceleration', units: 'm s-2', abbrev: 'CNGWDU' } case 217: return { name: 'Convective Gravity wave drag meridional acceleration', units: 'm s-2', abbrev: 'CNGWDV' } case 218: return { name: 'Velocity Point Model Surface', units: '', abbrev: 'LMV' } case 219: return { name: 'Potential Vorticity (Mass-Weighted)', units: '1/s/m', abbrev: 'PVMWW' } case 220: return { name: 'Hourly Maximum of Upward Vertical Velocity', units: 'm s-1', abbrev: 'MAXUVV' } case 221: return { name: 'Hourly Maximum of Downward Vertical Velocity', units: 'm s-1', abbrev: 'MAXDVV' } case 222: return { name: 'U Component of Hourly Maximum 10m Wind Speed', units: 'm s-1', abbrev: 'MAXUW' } case 223: return { name: 'V Component of Hourly Maximum 10m Wind Speed', units: 'm s-1', abbrev: 'MAXVW' } case 224: return { name: 'Ventilation Rate', units: 'm2 s-1', abbrev: 'VRATE' } case 225: return { name: 'Transport Wind Speed', units: 'm s-1', abbrev: 'TRWSPD' } case 226: return { name: 'Transport Wind Direction', units: 'Deg', abbrev: 'TRWDIR' } case 227: return { name: 'Earliest Reasonable Arrival Time (10% exceedance)', units: 's', abbrev: 'TOA10' } case 228: return { name: 'Most Likely Arrival Time (50% exceedance)', units: 's', abbrev: 'TOA50' } case 229: return { name: 'Most Likely Departure Time (50% exceedance)', units: 's', abbrev: 'TOD50' } case 230: return { name: 'Latest Reasonable Departure Time (90% exceedance)', units: 's', abbrev: 'TOD90' } case 231: return { name: 'Tropical Wind Direction', units: '°', abbrev: 'TPWDIR' } case 232: return { name: 'Tropical Wind Speed', units: 'm s-1', abbrev: 'TPWSPD' } case 233: return { name: 'Inflow Based (ESFC) to 50% EL Shear Magnitude', units: 'kt', abbrev: 'ESHR' } case 234: return { name: 'U Component Inflow Based to 50% EL Shear Vector', units: 'kt', abbrev: 'UESH' } case 235: return { name: 'V Component Inflow Based to 50% EL Shear Vector', units: 'kt', abbrev: 'VESH' } case 236: return { name: 'U Component Bunkers Effective Right Motion', units: 'kt', abbrev: 'UEID' } case 237: return { name: 'V Component Bunkers Effective Right Motion', units: 'kt', abbrev: 'VEID' } case 255: return { name: 'Missing', units: '', abbrev: '' } default: throw noCodeError } default: throw noCategoryError } default: throw noDisciplineError } } /** * Table 4.3 - TYPE OF GENERATING PROCESS * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-3.shtml) */ export const lookupTable43 = (code: number) => { switch (code) { case 0: return 'Analysis' case 1: return 'Initialization' case 2: return 'Forecast' case 3: return 'Bias Corrected Forecast' case 4: return 'Ensemble Forecast' case 5: return 'Probability Forecast' case 6: return 'Forecast Error' case 7: return 'Analysis Error' case 8: return 'Observation' case 9: return 'Climatological' case 10: return 'Probability-Weighted Forecast' case 11: return 'Bias-Corrected Ensemble Forecast' case 12: return 'Post-processed Analysis (See Note)' case 13: return 'Post-processed Forecast (See Note)' case 14: return 'Nowcast' case 15: return 'Hindcast' case 16: return 'Physical Retrieval' case 17: return 'Regression Analysis' case 18: return 'Difference Between Two Forecasts' case 192: return 'Forecast Confidence Indicator' case 193: return 'Probability-matched Mean' case 194: return 'Neighborhood Probability' case 195: return 'Bias-Corrected and Downscaled Ensemble Forecast' case 196: return 'Perturbed Analysis for Ensemble Initialization' case 197: return 'Ensemble Agreement Scale Probability' case 198: return 'Post-Processed Deterministic-Expert-Weighted Forecast' case 199: return 'Ensemble Forecast Based on Counting' case 200: return 'Local Probability-matched Mean' case 255: return 'Missing' default: throw new Error(`Table 4.3 missing code value: ${code}`) } } /** * Table 4.4 - INDICATOR OF UNIT OF TIME RANGE * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-4.shtml) */ export const lookupTable44 = (code: number) => { switch (code) { case 0: return 'Minute' case 1: return 'Hour' case 2: return 'Day' case 3: return 'Month' case 4: return 'Year' case 5: return 'Decade (10 Years)' case 6: return 'Normal (30 Years)' case 7: return 'Century (100 Years)' case 10: return '3 Hours' case 11: return '6 Hours' case 12: return '12 Hours' case 13: return 'Second' case 255: return 'Missing' default: throw new Error(`Table 4.4 missing code value: ${code}`) } } /** * Table 4.5 - FIXED SURFACE TYPES AND UNITS * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-5.shtml) */ export const lookupTable45 = (code: number) => { switch (code) { case 1: return { name: 'Ground or Water Surface', units: null } case 2: return { name: 'Cloud Base Level', units: null } case 3: return { name: 'Level of Cloud Tops', units: null } case 4: return { name: 'Level of 0o C Isotherm', units: null } case 5: return { name: 'Level of Adiabatic Condensation Lifted from the Surface', units: null } case 6: return { name: 'Maximum Wind Level', units: null } case 7: return { name: 'Tropopause', units: null } case 8: return { name: 'Nominal Top of the Atmosphere', units: null } case 9: return { name: 'Sea Bottom', units: null } case 10: return { name: 'Entire Atmosphere', units: null } case 11: return { name: 'Cumulonimbus Base (CB)', units: 'm' } case 12: return { name: 'Cumulonimbus Top (CT)', units: 'm' } case 13: return { name: 'Lowest level where vertically integrated cloud cover exceeds the specified percentage (cloud base for a given percentage cloud cover)', units: '%' } case 14: return { name: 'Level of free convection (LFC)', units: null } case 15: return { name: 'Convection condensation level (CCL)', units: null } case 16: return { name: 'Level of neutral buoyancy or equilibrium (LNB)', units: null } case 20: return { name: 'Isothermal Level', units: 'K' } case 21: return { name: 'Lowest level where mass density exceeds the specified value (base for a given threshold of mass density)', units: 'kg m-3' } case 22: return { name: 'Highest level where mass density exceeds the specified value (top for a given threshold of mass density)', units: 'kg m-3' } case 23: return { name: 'Lowest level where air concentration exceeds the specified value (base for a given threshold of air concentration', units: 'Bq m-3' } case 24: return { name: 'Highest level where air concentration exceeds the specified value (top for a given threshold of air concentration)', units: 'Bq m-3' } case 25: return { name: 'Highest level where radar reflectivity exceeds the specified value (echo top for a given threshold of reflectivity)', units: 'dBZ' } case 100: return { name: 'Isobaric Surface', units: 'Pa' } case 101: return { name: 'Mean Sea Level', units: null } case 102: return { name: 'Specific Altitude Above Mean Sea Level', units: 'm' } case 103: return { name: 'Specified Height Level Above Ground', units: 'm' } case 104: return { name: 'Sigma Level', units: null } case 105: return { name: 'Hybrid Level', units: null } case 106: return { name: 'Depth Below Land Surface', units: 'm' } case 107: return { name: 'Isentropic (theta) Level', units: 'K' } case 108: return { name: 'Level at Specified Pressure Difference from Ground to Level', units: 'Pa' } case 109: return { name: 'Potential Vorticity Surface', units: 'K m2 kg-1 s-1' } case 111: return { name: 'Eta Level', units: null } case 113: return { name: 'Logarithmic Hybrid Level', units: null } case 114: return { name: 'Snow Level', units: 'Numeric' } case 115: return { name: 'Sigma height level (see Note 4)', units: null } case 117: return { name: 'Mixed Layer Depth', units: 'm' } case 118: return { name: 'Hybrid Height Level', units: null } case 119: return { name: 'Hybrid Pressure Level', units: null } case 150: return { name: 'Generalized Vertical Height Coordinate (see Note 4)', units: null } case 151: return { name: 'Soil level (See Note 5)', units: 'Numeric' } case 160: return { name: 'Depth Below Sea Level', units: 'm' } case 161: return { name: 'Depth Below Water Surface', units: 'm' } case 162: return { name: 'Lake or River Bottom', units: null } case 163: return { name: 'Bottom Of Sediment Layer', units: null } case 164: return { name: 'Bottom Of Thermally Active Sediment Layer', units: null } case 165: return { name: 'Bottom Of Sediment Layer Penetrated By Thermal Wave', units: null } case 166: return { name: 'Mixing Layer', units: null } case 167: return { name: 'Bottom of Root Zone', units: null } case 168: return { name: 'Ocean Model Level', units: 'Numeric' } case 169: return { name: 'Ocean level defined by water density (sigma-theta) difference from near-surface to level (see Note 7)', units: 'kg m-3' } case 170: return { name: 'Ocean level defined by water potential temperature difference from near-surface to level (see Note 7)', units: 'K' } case 174: return { name: 'Top Surface of Ice on Sea, Lake or River', units: null } case 175: return { name: 'Top Surface of Ice, under Snow, on Sea, Lake or River', units: null } case 176: return { name: 'Bottom Surface (underside) Ice on Sea, Lake or River', units: null } case 177: return { name: 'Deep Soil (of indefinite depth)', units: null } case 179: return { name: 'Top Surface of Glacier Ice and Inland Ice', units: null } case 180: return { name: 'Deep Inland or Glacier Ice (of indefinite depth)', units: null } case 181: return { name: 'Grid Tile Land Fraction as a Model Surface', units: null } case 182: return { name: 'Grid Tile Water Fraction as a Model Surface', units: null } case 183: return { name: 'Grid Tile Ice Fraction on Sea, Lake or River as a Model Surface', units: null } case 184: return { name: 'Grid Tile Glacier Ice and Inland Ice Fraction as a Model Surface', units: null } case 200: return { name: 'Entire atmosphere (considered as a single layer)', units: null } case 201: return { name: 'Entire ocean (considered as a single layer)', units: null } case 204: return { name: 'Highest tropospheric freezing level', units: null } case 206: return { name: 'Grid scale cloud bottom level', units: null } case 207: return { name: 'Grid scale cloud top level', units: null } case 209: return { name: 'Boundary layer cloud bottom level', units: null } case 210: return { name: 'Boundary layer cloud top level', units: null } case 211: return { name: 'Boundary layer cloud layer', units: null } case 212: return { name: 'Low cloud bottom level', units: null } case 213: return { name: 'Low cloud top level', units: null } case 214: return { name: 'Low cloud layer', units: null } case 215: return { name: 'Cloud ceiling', units: null } case 216: return { name: 'Effective Layer Top Level', units: 'm' } case 217: return { name: 'Effective Layer Bottom Level', units: 'm' } case 218: return { name: 'Effective Layer', units: 'm' } case 220: return { name: 'Planetary Boundary Layer', units: null } case 221: return { name: 'Layer Between Two Hybrid Levels', units: null } case 222: return { name: 'Middle cloud bottom level', units: null } case 223: return { name: 'Middle cloud top level', units: null } case 224: return { name: 'Middle cloud layer', units: null } case 232: return { name: 'High cloud bottom level', units: null } case 233: return { name: 'High cloud top level', units: null } case 234: return { name: 'High cloud layer', units: null } case 235: return { name: 'Ocean Isotherm Level (1/10 ° C)', units: null } case 236: return { name: 'Layer between two depths below ocean surface', units: null } case 237: return { name: 'Bottom of Ocean Mixed Layer (m)', units: null } case 238: return { name: 'Bottom of Ocean Isothermal Layer (m)', units: null } case 239: return { name: 'Layer Ocean Surface and 26C Ocean Isothermal Level', units: null } case 240: return { name: 'Ocean Mixed Layer', units: null } case 241: return { name: 'Ordered Sequence of Data', units: null } case 242: return { name: 'Convective cloud bottom level', units: null } case 243: return { name: 'Convective cloud top level', units: null } case 244: return { name: 'Convective cloud layer', units: null } case 245: return { name: 'Lowest level of the wet bulb zero', units: null } case 246: return { name: 'Maximum equivalent potential temperature level', units: null } case 247: return { name: 'Equilibrium level', units: null } case 248: return { name: 'Shallow convective cloud bottom level', units: null } case 249: return { name: 'Shallow convective cloud top level', units: null } case 251: return { name: 'Deep convective cloud bottom level', units: null } case 252: return { name: 'Deep convective cloud top level', units: null } case 253: return { name: 'Lowest bottom level of supercooled liquid water layer', units: null } case 254: return { name: 'Highest top level of supercooled liquid water layer', units: null } case 255: return { name: 'Missing', units: null } default: throw new Error(`Table 4.5 missing code value: ${code}`) } } /** * Table 4.7 - DERIVED FORECAST * * [Read more...](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-7.shtml) */ export const lookupTable47 = (code: number) => { switch (code) { case 0: return 'Unweighted Mean of All Members' case 1: return 'Weighted Mean of All Members' case 2: return 'Standard Deviation with respect to Cluster Mean' case 3: return 'Standard Deviation with respect to Cluster Mean, Normalized' case 4: return 'Spread of All Members' case 5: return 'Large Anomaly Index of All Members (see Note 1)' case 6: return 'Unweighted Mean of the Cluster Members' case 7: return 'Interquartile Range (Range between the 25th and 75th quantile)' case 8: return 'Minimum Of All Ensemble Members (see Note 2)' case 9: return 'Maximum Of All Ensemble Members (see Note 2)' case 192: return 'Unweighted Mode of All Members' case 193: return 'Percentile value (10%) of All Members' case 194: return 'Percentile value (50%) of All Members' case 195: return 'Percentile value (90%) of All Members' case 196: return 'Statistically decided weights for each ensemble member' case 197: return 'Climate Percentile (percentile values from climate distribution)' case 198: return 'Deviation of Ensemble Mean from Daily Climatology' case 199: return 'Extreme Forecast Index' case 200: return 'Equally Weighted Mean' case 201: return 'Percentile value (5%) of All Members' case 202: return 'Percentile value (25%) of All Members' case 203: return 'Percentile value (75%) of All Members' case 204: return 'Percentile value (95%) of All Members' case 255: return 'Missing' default: throw new Error(`Table 4.7 missing code value: ${code}`) } }