diff --git a/.gitignore b/.gitignore index bcd6aef..bb43466 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ __pycache__ .DS_Store .venv *.json +*.bak raw_list *.egg-info/ deps/ diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..2e8b824 --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,3 @@ +data_files: + - small_climate_eg.json + - medium_extremes_eg.json \ No newline at end of file diff --git a/config/language/language.yaml b/config/language/language.yaml new file mode 100644 index 0000000..c3d35ed --- /dev/null +++ b/config/language/language.yaml @@ -0,0 +1,26402 @@ +levtype: + description: Vertical level type. Can be pressure, height, depth, model levels, etc. + category: data + default: pl + flatten: false + type: enum + values: + cat: + name: "Category" + dp: + name: "Depth (depth in metres)" + layer: + ml: + name: "Model level count" + pl: + name: "Pressure levels (in hPa)" + hl: + name: "Height levels (in metres)" + pt: + name: "Potential temperature" + pv: + name: "Potential vorticity" + sfc: + name: "Surface of Earth" + sol: + name: "3d multi-level model" + alternative_names: + - "surface other (multi)levels" + wv: + name: "Ocean wave" + o2d: + name: "Ocean surface" + o3d: + name: "Ocean model levels" + never: + - type: ssd + +class: + description: Main category of dataset + category: data + default: od + flatten: false + type: enum + values: + ai: + name: "Operational AIFS" + d1: + name: "Destination Earth Digital Twins" + od: + name: "Operational forecast data" + rd: + name: "Research data" +type: + description: Dataset type distinguishing between different statics, diagnostics, or state analyses + category: data + default: an + flatten: false + type: enum + multiple: true + values: + 3g: + name: "3D variational gradients" + 3v: + name: "3D variational analysis" + 4g: + name: "4D variational gradients" + 4i: + name: "4D variational increments" + 4v: + name: "4D variational analysis" + ab: + name: "Analysis bias" + ai: + name: "Analysis input" + af: + name: "Analysis feedback" + an: + name: "Analysis" + as: + name: "Adjoint singular vector" + bf: + name: "Bias-corrected forecast" + cd: + name: "Climate distribution" + cf: + name: "Control forecast" + ci: + name: "Clustering information" + cl: + name: "Climatology" + cm: + name: "Cluster means" + cr: + name: "Cluster representative" + cs: + name: "Cluster standard deviations" + cv: + name: "Calibration validation forecast" + ea: + name: "Errors in analysis" + ed: + name: "Empirical distribution" + ef: + name: "Errors in first guess" + efi: + name: "Extreme forecast index" + efic: + name: "Extreme forecast index control" + em: + name: "Ensemble mean" + eme: + name: "Ensemble data assimilation model errors" + emtm: + name: "Ensemble mean of temporal mean" + ep: + name: "Event probability" + es: + name: "Ensemble standard deviation" + est: + name: "Ensemble statistics" + estdtm: + name: "Ensemble standard deviation of temporal mean" + fa: + name: "Forecast accumulation" + fb: + name: "Feedback" + fc: + name: "Forecast" + pf: + name: "Perturbed forecast" +stream: + description: Categorisation of data source, for example the forecast model or the ensemble model + category: data + default: oper + flatten: false + type: enum + values: + clte: + name: "Climate run output" + alternative_names: + - "climate" + oper: + name: "Atmospheric model" + alternative_names: + - "da" + - "daily archive" + wave: + name: "Wave model" + alternative_names: + - "wv" + lwda: + name: "Long window daily archive" + lwwv: + name: "Long window wave" + clmn: + name: "Climate run monthly means output" + alternative_names: + - "climate-monthly" +expver: + description: Experiment number, 0001 is operational data + category: data + default: "0001" + flatten: false + type: enum + values: + "0001": + name: "Operational data" + xxxx: + name: "Experimental data" + xxxy: + name: "Experimental data" +dataset: + description: High-level dataset identifier + multiple: true + type: enum + values: + climate-dt: + name: "Climate Digital Twin" + description: "The Climate DT represents the first ever attempt to operationalise the production of global multi-decadal climate projections, leveraging the world-leading supercomputing facilities of the EuroHPC Joint Undertaking along with some of the leading European climate models. A concise overview of what the Climate DT aims to achieve, and of the different concepts essential for an understanding of the Digital Twin's characteristics, is included in the Climate DT factsheet." + url: "https://confluence.ecmwf.int/display/DDCZ/Climate+DT+Phase+1+data+catalogue" + extremes-dt: + name: "Extremes data" + on-demand-extremes-dt: + name: "On-demand extremes data" +repres: + flatten: false + multiple: true + type: enum + values: + g: + name: "G" + s: + name: "H" + l: + name: "L" + n: + name: "P" + r: + name: "L" +obsgroup: + category: data + multiple: true + type: enum + values: + # - [conventional] + sat: + name: "Satellite" + ers1: + trmm: + qscat: + reo3: + hirs: + name: "Hirs" + alternative_names: + - 1 + amsua: + name: "Amsua" + alternative_names: + - 2 + amsub: + name: "Amsub" + alternative_names: + - 3 + mhs: + name: "Mhs" + alternative_names: + - 4 + geos: + name: "Geos" + alternative_names: + - 5 + resat: + name: "Resat" + alternative_names: + - 6 + meris: + name: "Meris" + alternative_names: + - 7 + gpsro: + name: "Gpsro" + alternative_names: + - 8 + satob: + name: "Satob" + alternative_names: + - 9 + scatt: + name: "Scatt" + alternative_names: + - 10 + ssmi_as: + name: "Ssmi all-sky" + alternative_names: + - 11 + iasi: + name: "Iasi" + alternative_names: + - 12 + airs: + name: "Airs" + alternative_names: + - 13 + ssmis_as: + name: "Ssmis all-sky" + alternative_names: + - 14 + tmi_as: + name: "Tmi all-sky" + alternative_names: + - 15 + amsre_as: + name: "Amsre all-sky" + alternative_names: + - 16 + conv: + name: "Conv" + alternative_names: + - 17 + smos: + name: "Smos" + alternative_names: + - 19 + windsat_as: + name: "Windsat all-sky" + alternative_names: + - 20 + ssmi: + name: "Ssmi" + alternative_names: + - 21 + amsua_as: + name: "Amsua all-sky" + alternative_names: + - 22 + amsre: + name: "Amsre" + alternative_names: + - 23 + tmi: + name: "Tmi" + alternative_names: + - 24 + ssmis: + name: "Ssmis" + alternative_names: + - 25 + gbrad: + name: "Gbrad" + alternative_names: + - 26 + mwhs: + name: "Mwhs" + alternative_names: + - 27 + mwts: + name: "Mwts" + alternative_names: + - 28 + mwri_as: + name: "Mwri all-sky" + alternative_names: + - 29 + iras: + name: "Iras" + alternative_names: + - 30 + msu: + name: "Msu" + alternative_names: + - 31 + ssu: + name: "Ssu" + alternative_names: + - 32 + vtpr1: + name: "Vtpr1" + alternative_names: + - 33 + vtpr2: + name: "Vtpr2" + alternative_names: + - 34 + atms: + name: "Atms" + alternative_names: + - 35 + resat_ak: + name: "Resat averaging kernels" + alternative_names: + - 36 + cris: + name: "Cris" + alternative_names: + - 37 + wave_ip: + name: "Wave integrated parameters" + alternative_names: + - 38 + wave_sp: + name: "Wave spectra" + alternative_names: + - 39 + raingg: + name: "Raingg" + alternative_names: + - 40 + sfc_ms: + name: "Surface multisensor" + alternative_names: + - 41 + amsr2_as: + name: "Amsr-2 all-sky" + alternative_names: + - 42 + saphir_as: + name: "Saphir all-sky" + alternative_names: + - 43 + amsub_as: + name: "Amsub all-sky" + alternative_names: + - 44 + mhs_as: + name: "Mhs all-sky" + alternative_names: + - 45 + dwl: + name: "Doppler wind lidar" + alternative_names: + - 46 + iris: + name: "Iris" + alternative_names: + - 47 + aatsr: + name: "Aatsr" + alternative_names: + - 49 + atms_as: + name: "Atms all-sky" + alternative_names: + - 50 + gmi_as: + name: "Gmi all-sky" + alternative_names: + - 51 + godae_sst: + name: "Godae sea surface temperatures" + alternative_names: + - 52 + atovs_ms: + name: "Atovs multisensor" + alternative_names: + - 53 + atmospheric_composition: + name: "Atmospheric composition" + alternative_names: + - 54 + non_sfc_ms: + name: "Non-surface multisensor" + alternative_names: + - 55 + mwts2: + name: "Mwts2" + alternative_names: + - 56 + ssmi_1d: + name: "Ssmi 1dvar tcwv cloudy-sky" + alternative_names: + - 57 + mwhs2_as: + name: "Mwhs2 all-sky" + alternative_names: + - 58 + ssmt2: + name: "Ssmt2" + alternative_names: + - 59 + smap: + name: "Smap" + alternative_names: + - 60 + tovs_ms: + name: "Tovs multisensor" + alternative_names: + - 61 + cloud_r: + name: "Cloud reflectivity" + alternative_names: + - 62 + cloud_l: + name: "Cloud lidar" + alternative_names: + - 63 + satellite_lightning: + name: "Satellite lightning" + alternative_names: + - 64 + geos_vis: + name: "Geos vis" + alternative_names: + - 65 + oconv: + name: "Oconv" + alternative_names: + - 66 + mwts3_as: + name: "Mwts3 all-sky" + alternative_names: + - 67 + giirs: + name: "Giirs" + alternative_names: + - 68 + test: + name: "Test" + alternative_names: + - 99 +reportype: + category: data + type: any + multiple: true + + # rdbprefix + + values: {} +levelist: + description: List of levels (units depend on levtype) + category: data + multiple: true + by: 1 + default: + - 1000 + - 850 + - 700 + - 500 + - 400 + - 300 + never: + - levtype: [sfc, o2d] + - type: ssd + type: enum + values: + 1: + 5: + 10: + 20: + 30: + 50: + 70: + 100: + 150: + 200: + 250: + 300: + 400: + 500: + 600: + 700: + 850: + 925: + 1000: +date: + description: Simulated or observed date + category: data + default: 0 + type: enum + multiple: true + values: + 20211021: +year: + description: Simulated or observed year + category: data + type: to-by-list + multiple: true + by: 1 + + values: {} +month: + description: Simulated or observed month + category: data + flatten: true + type: enum + multiple: true + values: + 1: + name: "January" + alternative_names: + - "jan" + 2: + name: "February" + alternative_names: + - "feb" + 3: + name: "March" + alternative_names: + - "mar" + 4: + name: "April" + alternative_names: + - "apr" + 5: + name: "May" + alternative_names: + - "may" + 6: + name: "June" + alternative_names: + - "jun" + 7: + name: "July" + alternative_names: + - "jul" + 8: + name: "August" + alternative_names: + - "aug" + 9: + name: "September" + alternative_names: + - "sep" + 10: + name: "October" + alternative_names: + - "oct" + 11: + name: "November" + alternative_names: + - "nov" + 12: + name: "December" + alternative_names: + - "dec" +hdate: + category: data + multiple: true + only: + - stream: + - enfh + - enwh + - efho + - ehmm + - ewho + - eefh + - weeh + type: integer + + values: {} +offsetdate: + category: data + multiple: true + type: date + + values: {} +fcmonth: + category: data + multiple: true + by: 1 + type: to-by-list + + values: {} +fcperiod: + category: data + multiple: true + type: integer + + values: {} +time: + description: Simulated or observed time of day (UTC) + category: data + default: "1200" + multiple: true + type: enum + values: + "0000": + "0100": + "0200": + "0300": + "0400": + "0500": + "0600": + "0700": + "0800": + "0900": + "1000": + "1100": + "1200": + "1300": + "1400": + "1500": + "1600": + "1700": + "1800": + "1900": + "2000": + "2100": + "2200": + "2300": +offsettime: + category: data + multiple: true + type: time + + # leadtime + # opttime + # range + + values: {} +step: + description: Forecast lead time (e.g., 6h, 12h, 24h) + category: data + multiple: true + by: 12 + default: 0 + type: range + never: + - dataset: + - climate-dt + - stream: + - msmm + - mmsa + - swmm + + values: {} +anoffset: + category: data + multiple: true + type: integer + + values: {} +reference: + category: data + multiple: true + type: integer + + ################################################################# + + # cluster + # probability + + values: {} +number: + description: Ensemble member number + category: data + multiple: true + aliases: + - ensemble + by: 1 + only: + - type: [pf, cr, cm, fcmean, fcmin, fcmax, fcstdev, sot, fc, wp, 4i, 4v] + never: + # This is to prevent number with type=fc and stream=oper + - stream: [oper, wave] + type: to-by-list + + values: {} +quantile: + category: data + multiple: true + only: + - type: + - pd + - pb + - taem + - cd + # - sot + type: to-by-list-quantile + denominators: [2, 3, 4, 5, 10, 100, 1000] + by: 1 + values: {} +domain: + description: The large scale geographic region. + category: data + default: g + flatten: false + type: enum + never: + - dataset: + - climate-dt + values: + # - [a, north west europe] + # - [b, north east europe, baltic and black sea] + c: + name: "South west europe" + d: + name: "South east europe" + e: + name: "Europe" + g: + name: "General european area" + alternative_names: + - "globe" +frequency: + category: data + multiple: true + by: 1 + only: + - param: + - "140251" + type: to-by-list + + values: {} +direction: + category: data + multiple: true + by: 1 + only: + - param: + - "140251" + type: to-by-list + + values: {} +diagnostic: + category: data + type: integer + multiple: true + + values: {} +iteration: + category: data + type: integer + multiple: true + + values: {} +channel: + category: data + only: + - type: ssd + type: integer + multiple: true + + values: {} +ident: + category: data + only: + - type: ssd + type: integer + multiple: true + + values: {} +instrument: + category: data + only: + - type: ssd + type: integer + multiple: true + + values: {} +method: + category: data + type: integer + + values: {} +origin: + category: data + multiple: true + type: enum + values: + ammc: + name: "Melbourne" + alternative_names: + - 1 + babj: + name: "Beijing" + alternative_names: + - 38 + cmcc: + cnmc: + name: "80" + consensus: + name: "255" + crfc: + name: "Cerfacs" + alternative_names: + - 239 + cwao: + name: "Montreal" + alternative_names: + - 54 + ecmf: + name: "Ecmwf" + alternative_names: + - 98 + edzw: + name: "Offenbach" + alternative_names: + - "dwd" + - 78 + egrr: + name: "Bracknell" + alternative_names: + - 74 + - "exeter" + enmi: + name: "Oslo" + alternative_names: + - 88 + fnmo: + name: "Fleet numerical" + alternative_names: + - "fnmoc" + - 58 + hadc: + name: "Hadley centre" + alternative_names: + - 247 + ifmk: + name: "246" + ingv: + name: "235" + knmi: + name: "245" + kwbc: + name: "Washington" + alternative_names: + - 7 + lemm: + name: "Madrid" + alternative_names: + - 214 + lfpw: + name: "Toulouse" + alternative_names: + - 84 + - 85 + - "paris" + rjtd: + name: "Tokyo" + alternative_names: + - 34 + rksl: + name: "Seoul" + alternative_names: + - 40 + sbsj: + name: "Cptec" + alternative_names: + - 46 + vuwien: + name: "University of vienna" + alternative_names: + - 244 +system: + category: data + type: integer + + ####################################################################### + # DestinE ClimateDT related keywords + + values: {} +model: + type: enum + description: Identifier of the computer model + values: + ifs-fesom: + name: "Integrated forecast system + FESOM ocean model" + ifs-nemo: + name: "Integrated forecast system + NEMO ocean model" + icon: + name: "ICON weather model" +activity: + description: Identifier of the activity under which model runs are performed or observations are collected + category: data + type: enum + values: + cmip6: + name: "Coupled model intercomparison project phase 6" + scenariomip: + name: "Scenario model intercomparison project" + highresmip: + name: "High resolution model intercomparison project" + story-nudging: + name: "Climate storylines by nudging to reanalysis" + baseline: + name: "Baseline simulations for climate model evaluation" + projections: + name: "Future climate projections" +experiment: + description: Identifier of the experiment + category: data + type: enum + values: + hist: + name: "Historical" + cont: + name: "Control" + amip: + name: "Atmospheric model intercomparison project" + ssp1-1.9: + name: "Shared Socio-Economic Pathway 1-1.9 (very low GHG emissions)" + ssp1-2.6: + name: "Shared Socio-Economic Pathway 1-2.6 (low GHG emissions)" + ssp2-4.5: + name: "Shared Socio-Economic Pathway 2-4.5 (intermediate GHG emissions)" + ssp3-7.0: + name: "Shared Socio-Economic Pathway 3-7.0 (high GHG emissions)" + ssp5-8.5: + name: "Shared Socio-Economic Pathway 5-8.5 (very high GHG emissions)" + tplus1.5k: + name: "Warmer world at 1.5 degrees k above pre-industrial temperatures" + tplus2.0k: + name: "Warmer world at 2.0 degrees k above pre-industrial temperatures" + tplus3.0k: + name: "Warmer world at 3.0 degrees k above pre-industrial temperatures" + tplus4.0k: + name: "Warmer world at 4.0 degrees k above pre-industrial temperatures" + abrupt4xco2: + name: "CO2 abruptly quadrupled and then held constant" +generation: + category: data + type: enum + values: + 1: +realization: + category: data + type: integer + values: + 1: +resolution: + category: data + type: enum + values: + standard: + name: "Standard resolution model output with longer availability" + high: + name: "High resolution model output with limited availability" +param: + description: Parameter + values: + 1: + name: "Stream function" + alternative_names: + - "strf" + 2: + name: "Vpot" + alternative_names: + - "vp" + - "velocity potential" + 3: + name: "Potential temperature" + alternative_names: + - "pt" + 4: + name: "Equivalent potential temperature" + alternative_names: + - "eqpt" + 5: + name: "Saturated equivalent potential temperature" + alternative_names: + - "sept" + 6: + name: "Soil sand fraction" + alternative_names: + - "ssfr" + 7: + name: "Soil clay fraction" + alternative_names: + - "scfr" + 8: + name: "Surface runoff" + alternative_names: + - "sro" + 9: + name: "Sub-surface runoff" + alternative_names: + - "ssro" + 10: + name: "Wind speed" + alternative_names: + - "ws" + 11: + name: "U component of divergent wind" + alternative_names: + - "udvw" + 12: + name: "V component of divergent wind" + alternative_names: + - "vdvw" + 13: + name: "U component of rotational wind" + alternative_names: + - "urtw" + 14: + name: "V component of rotational wind" + alternative_names: + - "vrtw" + 15: + name: "Auvp" + alternative_names: + - "aluvp" + - "uv visible albedo for direct radiation (climatological)" + 16: + name: "Auvd" + alternative_names: + - "aluvd" + - "uv visible albedo for diffuse radiation (climatological)" + 17: + name: "Anip" + alternative_names: + - "alnip" + - "near ir albedo for direct radiation (climatological)" + 18: + name: "Anid" + alternative_names: + - "alnid" + - "near ir albedo for diffuse radiation (climatological)" + 19: + name: "Clear sky surface uv" + alternative_names: + - "uvcs" + 20: + name: "Surface photosynthetically active radiation, clear sky" + alternative_names: + - "parcs" + 21: + name: "Unbalanced component of temperature" + alternative_names: + - "uctp" + 22: + name: "Unbalanced component of logarithm of surface pressure" + alternative_names: + - "ucln" + 23: + name: "Unbalanced component of divergence" + alternative_names: + - "ucdv" + 24: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_000024" + 25: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_000025" + 26: + name: "Lake cover" + alternative_names: + - "cl" + 27: + name: "Low vegetation cover" + alternative_names: + - "cvl" + 28: + name: "High vegetation cover" + alternative_names: + - "cvh" + 29: + name: "Type of low vegetation" + alternative_names: + - "tvl" + 30: + name: "Type of high vegetation" + alternative_names: + - "tvh" + 31: + name: "Sea ice area fraction" + alternative_names: + - "ci" + 32: + name: "Snow albedo" + alternative_names: + - "asn" + 33: + name: "Snow density" + alternative_names: + - "rsn" + 34: + name: "Sstk" + alternative_names: + - "sst" + - "sea surface temperature" + 35: + name: "Ice temperature layer 1" + alternative_names: + - "istl1" + 36: + name: "Ice temperature layer 2" + alternative_names: + - "istl2" + 37: + name: "Ice temperature layer 3" + alternative_names: + - "istl3" + 38: + name: "Ice temperature layer 4" + alternative_names: + - "istl4" + 39: + name: "Swv1" + alternative_names: + - "swvl1" + - "volumetric soil water layer 1" + 40: + name: "Swv2" + alternative_names: + - "swvl2" + - "volumetric soil water layer 2" + 41: + name: "Swv3" + alternative_names: + - "swvl3" + - "volumetric soil water layer 3" + 42: + name: "Swv4" + alternative_names: + - "swvl4" + - "volumetric soil water layer 4" + 43: + name: "Soil type" + alternative_names: + - "slt" + 44: + name: "Snow evaporation" + alternative_names: + - "es" + 45: + name: "Snowmelt" + alternative_names: + - "smlt" + 46: + name: "Solar duration" + alternative_names: + - "sdur" + 47: + name: "Direct solar radiation" + alternative_names: + - "dsrp" + 48: + name: "Magnitude of turbulent surface stress" + alternative_names: + - "magss" + 49: + name: "Maximum 10 metre wind gust since previous post-processing" + alternative_names: + - "10fg" + 50: + name: "Large-scale precipitation fraction" + alternative_names: + - "lspf" + 51: + name: "Maximum temperature at 2 metres in the last 24 hours" + alternative_names: + - "mx2t24" + 52: + name: "Minimum temperature at 2 metres in the last 24 hours" + alternative_names: + - "mn2t24" + 53: + name: "Montgomery potential" + alternative_names: + - "mont" + 54: + name: "Pressure" + alternative_names: + - "pres" + 55: + name: "Mean temperature at 2 metres in the last 24 hours" + alternative_names: + - "mean2t24" + 56: + name: "Mean 2 metre dewpoint temperature in the last 24 hours" + alternative_names: + - "mn2d24" + 57: + name: "Downward uv radiation at the surface" + alternative_names: + - "uvb" + 58: + name: "Photosynthetically active radiation at the surface" + alternative_names: + - "par" + 59: + name: "Convective available potential energy" + alternative_names: + - "cape" + 60: + name: "Potential vorticity" + alternative_names: + - "pv" + 62: + name: "Observation count" + alternative_names: + - "obct" + 63: + name: "Start time for skin temperature difference" + alternative_names: + - "stsktd" + 64: + name: "Finish time for skin temperature difference" + alternative_names: + - "ftsktd" + 65: + name: "Skin temperature difference" + alternative_names: + - "sktd" + 66: + name: "Lailv" + alternative_names: + - "lai_lv" + - "leaf area index, low vegetation" + 67: + name: "Laihv" + alternative_names: + - "lai_hv" + - "leaf area index, high vegetation" + 68: + name: "Minimum stomatal resistance, low vegetation" + alternative_names: + - "msr_lv" + 69: + name: "Minimum stomatal resistance, high vegetation" + alternative_names: + - "msr_hv" + 70: + name: "Biome cover, low vegetation" + alternative_names: + - "bc_lv" + 71: + name: "Biome cover, high vegetation" + alternative_names: + - "bc_hv" + 72: + name: "Instantaneous surface solar radiation downwards" + alternative_names: + - "issrd" + 73: + name: "Instantaneous surface thermal radiation downwards" + alternative_names: + - "istrd" + 74: + name: "Standard deviation of filtered subgrid orography (climatological)" + alternative_names: + - "sdfor" + 75: + name: "Specific rain water content" + alternative_names: + - "crwc" + 76: + name: "Specific snow water content" + alternative_names: + - "cswc" + 77: + name: "Etad" + alternative_names: + - "etadot" + - "eta-coordinate vertical velocity" + 78: + name: "Total column cloud liquid water" + alternative_names: + - "tclw" + 79: + name: "Total column cloud ice water" + alternative_names: + - "tciw" + 80: + name: "Experimental product" + alternative_names: + - "_param_000080" + 81: + name: "Experimental product" + alternative_names: + - "_param_000081" + 82: + name: "Experimental product" + alternative_names: + - "_param_000082" + 83: + name: "Experimental product" + alternative_names: + - "_param_000083" + 84: + name: "Experimental product" + alternative_names: + - "_param_000084" + 85: + name: "Experimental product" + alternative_names: + - "_param_000085" + 86: + name: "Experimental product" + alternative_names: + - "_param_000086" + 87: + name: "Experimental product" + alternative_names: + - "_param_000087" + 88: + name: "Experimental product" + alternative_names: + - "_param_000088" + 89: + name: "Experimental product" + alternative_names: + - "_param_000089" + 90: + name: "Experimental product" + alternative_names: + - "_param_000090" + 91: + name: "Experimental product" + alternative_names: + - "_param_000091" + 92: + name: "Experimental product" + alternative_names: + - "_param_000092" + 93: + name: "Experimental product" + alternative_names: + - "_param_000093" + 94: + name: "Experimental product" + alternative_names: + - "_param_000094" + 95: + name: "Experimental product" + alternative_names: + - "_param_000095" + 96: + name: "Experimental product" + alternative_names: + - "_param_000096" + 97: + name: "Experimental product" + alternative_names: + - "_param_000097" + 98: + name: "Experimental product" + alternative_names: + - "_param_000098" + 99: + name: "Experimental product" + alternative_names: + - "_param_000099" + 100: + name: "Experimental product" + alternative_names: + - "_param_000100" + 101: + name: "Experimental product" + alternative_names: + - "_param_000101" + 102: + name: "Experimental product" + alternative_names: + - "_param_000102" + 103: + name: "Experimental product" + alternative_names: + - "_param_000103" + 104: + name: "Experimental product" + alternative_names: + - "_param_000104" + 105: + name: "Experimental product" + alternative_names: + - "_param_000105" + 106: + name: "Experimental product" + alternative_names: + - "_param_000106" + 107: + name: "Experimental product" + alternative_names: + - "_param_000107" + 108: + name: "Experimental product" + alternative_names: + - "_param_000108" + 109: + name: "Experimental product" + alternative_names: + - "_param_000109" + 110: + name: "Experimental product" + alternative_names: + - "_param_000110" + 111: + name: "Experimental product" + alternative_names: + - "_param_000111" + 112: + name: "Experimental product" + alternative_names: + - "_param_000112" + 113: + name: "Experimental product" + alternative_names: + - "_param_000113" + 114: + name: "Experimental product" + alternative_names: + - "_param_000114" + 115: + name: "Experimental product" + alternative_names: + - "_param_000115" + 116: + name: "Experimental product" + alternative_names: + - "_param_000116" + 117: + name: "Experimental product" + alternative_names: + - "_param_000117" + 118: + name: "Experimental product" + alternative_names: + - "_param_000118" + 119: + name: "Experimental product" + alternative_names: + - "_param_000119" + 120: + name: "Experimental product" + alternative_names: + - "_param_000120" + 121: + name: "Maximum temperature at 2 metres in the last 6 hours" + alternative_names: + - "mx2t6" + 122: + name: "Minimum temperature at 2 metres in the last 6 hours" + alternative_names: + - "mn2t6" + 123: + name: "Maximum 10 metre wind gust in the last 6 hours" + alternative_names: + - "10fg6" + 124: + name: "Surface emissivity" + alternative_names: + - "emis" + 125: + name: "Vertically integrated total energy" + alternative_names: + - "vite" + 126: + name: "Generic parameter for sensitive area prediction" + alternative_names: + - "_param_000126" + 127: + name: "Atmospheric tide" + alternative_names: + - "at" + 128: + name: "Budget values" + alternative_names: + - "bv" + 129: + name: "Geopotential" + alternative_names: + - "z" + 130: + name: "Temperature" + alternative_names: + - "t" + 131: + name: "U component of wind" + alternative_names: + - "u" + 132: + name: "V component of wind" + alternative_names: + - "v" + 133: + name: "Specific humidity" + alternative_names: + - "q" + 134: + name: "Surface pressure" + alternative_names: + - "sp" + 135: + name: "Vertical velocity" + alternative_names: + - "w" + 136: + name: "Total column water" + alternative_names: + - "tcw" + 137: + name: "Total column vertically-integrated water vapour" + alternative_names: + - "tcwv" + 138: + name: "Vorticity (relative)" + alternative_names: + - "vo" + 139: + name: "St" + alternative_names: + - "stl1" + - "soil temperature level 1" + 140: + name: "Soil wetness level 1" + alternative_names: + - "swl1" + 141: + name: "Snow depth" + alternative_names: + - "sd" + 142: + name: "Large-scale precipitation" + alternative_names: + - "lsp" + 143: + name: "Convective precipitation" + alternative_names: + - "cp" + 144: + name: "Snowfall" + alternative_names: + - "sf" + 145: + name: "Boundary layer dissipation" + alternative_names: + - "bld" + 146: + name: "Surface sensible heat flux" + alternative_names: + - "sshf" + 147: + name: "Surface latent heat flux" + alternative_names: + - "slhf" + 148: + name: "Ss" + alternative_names: + - "chnk" + - "charnock" + 149: + name: "Surface net radiation (sw and lw)" + alternative_names: + - "snr" + 150: + name: "Top net radiation (sw and lw)" + alternative_names: + - "tnr" + 151: + name: "Mean sea level pressure" + alternative_names: + - "msl" + 152: + name: "Logarithm of surface pressure" + alternative_names: + - "lnsp" + 153: + name: "Short-wave heating rate" + alternative_names: + - "swhr" + 154: + name: "Long-wave heating rate" + alternative_names: + - "lwhr" + 155: + name: "Divergence" + alternative_names: + - "d" + 156: + name: "Geopotential height" + alternative_names: + - "gh" + 157: + name: "Relative humidity" + alternative_names: + - "r" + 158: + name: "Tendency of surface pressure" + alternative_names: + - "tsp" + 159: + name: "Boundary layer height" + alternative_names: + - "blh" + 160: + name: "Standard deviation of sub-gridscale orography" + alternative_names: + - "sdor" + 161: + name: "Anisotropy of sub-gridscale orography" + alternative_names: + - "isor" + 162: + name: "Angle of sub-gridscale orography" + alternative_names: + - "anor" + 163: + name: "Slope of sub-gridscale orography" + alternative_names: + - "slor" + 164: + name: "Total cloud cover" + alternative_names: + - "tcc" + 165: + name: "10 metre u wind component" + alternative_names: + - "10u" + 166: + name: "10 metre v wind component" + alternative_names: + - "10v" + 167: + name: "2 metre temperature" + alternative_names: + - "2t" + 168: + name: "2 metre dewpoint temperature" + alternative_names: + - "2d" + 169: + name: "Surface short-wave (solar) radiation downwards" + alternative_names: + - "ssrd" + 170: + name: "Soil temperature level 2" + alternative_names: + - "stl2" + 171: + name: "Soil wetness level 2" + alternative_names: + - "swl2" + 172: + name: "Land-sea mask" + alternative_names: + - "lsm" + 173: + name: "Surface roughness (climatological)" + alternative_names: + - "sr" + 174: + name: "Albedo (climatological)" + alternative_names: + - "al" + 175: + name: "Surface long-wave (thermal) radiation downwards" + alternative_names: + - "strd" + 176: + name: "Surface net short-wave (solar) radiation" + alternative_names: + - "ssr" + 177: + name: "Surface net long-wave (thermal) radiation" + alternative_names: + - "str" + 178: + name: "Top net short-wave (solar) radiation" + alternative_names: + - "tsr" + 179: + name: "Top net long-wave (thermal) radiation" + alternative_names: + - "ttr" + 180: + name: "Time-integrated eastward turbulent surface stress" + alternative_names: + - "ewss" + 181: + name: "Time-integrated northward turbulent surface stress" + alternative_names: + - "nsss" + 182: + name: "Evaporation" + alternative_names: + - "e" + 183: + name: "Soil temperature level 3" + alternative_names: + - "stl3" + 184: + name: "Soil wetness level 3" + alternative_names: + - "swl3" + 185: + name: "Convective cloud cover" + alternative_names: + - "ccc" + 186: + name: "Low cloud cover" + alternative_names: + - "lcc" + 187: + name: "Medium cloud cover" + alternative_names: + - "mcc" + 188: + name: "High cloud cover" + alternative_names: + - "hcc" + 189: + name: "Sunshine duration" + alternative_names: + - "sund" + 190: + name: "East-west component of sub-gridscale orographic variance" + alternative_names: + - "ewov" + 191: + name: "North-south component of sub-gridscale orographic variance" + alternative_names: + - "nsov" + 192: + name: "North-west/south-east component of sub-gridscale orographic variance" + alternative_names: + - "nwov" + 193: + name: "North-east/south-west component of sub-gridscale orographic variance" + alternative_names: + - "neov" + 194: + name: "Brightness temperature" + alternative_names: + - "btmp" + 195: + name: "Eastward gravity wave surface stress" + alternative_names: + - "lgws" + 196: + name: "Northward gravity wave surface stress" + alternative_names: + - "mgws" + 197: + name: "Gravity wave dissipation" + alternative_names: + - "gwd" + 198: + name: "Skin reservoir content" + alternative_names: + - "src" + 199: + name: "Vegetation fraction" + alternative_names: + - "veg" + 200: + name: "Variance of sub-gridscale orography" + alternative_names: + - "vso" + 201: + name: "Maximum temperature at 2 metres since previous post-processing" + alternative_names: + - "mx2t" + 202: + name: "Minimum temperature at 2 metres since previous post-processing" + alternative_names: + - "mn2t" + 203: + name: "Ozone mass mixing ratio" + alternative_names: + - "o3" + 204: + name: "Precipitation analysis weights" + alternative_names: + - "paw" + 205: + name: "Runoff" + alternative_names: + - "ro" + 206: + name: "Total column ozone" + alternative_names: + - "tco3" + 207: + name: "10 metre wind speed" + alternative_names: + - "10si" + 208: + name: "Top net short-wave (solar) radiation, clear sky" + alternative_names: + - "tsrc" + 209: + name: "Ttru" + alternative_names: + - "ttrc" + - "top net long-wave (thermal) radiation, clear sky" + 210: + name: "Surface net short-wave (solar) radiation, clear sky" + alternative_names: + - "ssrc" + 211: + name: "Surface net long-wave (thermal) radiation, clear sky" + alternative_names: + - "strc" + 212: + name: "Toa incident short-wave (solar) radiation" + alternative_names: + - "tisr" + 213: + name: "Vertically integrated moisture divergence" + alternative_names: + - "vimd" + 214: + name: "Diabatic heating by radiation" + alternative_names: + - "dhr" + 215: + name: "Diabatic heating by vertical diffusion" + alternative_names: + - "dhvd" + 216: + name: "Diabatic heating by cumulus convection" + alternative_names: + - "dhcc" + 217: + name: "Diabatic heating large-scale condensation" + alternative_names: + - "dhlc" + 218: + name: "Vertical diffusion of zonal wind" + alternative_names: + - "vdzw" + 219: + name: "Vertical diffusion of meridional wind" + alternative_names: + - "vdmw" + 220: + name: "East-west gravity wave drag tendency" + alternative_names: + - "ewgd" + 221: + name: "North-south gravity wave drag tendency" + alternative_names: + - "nsgd" + 222: + name: "Convective tendency of zonal wind" + alternative_names: + - "ctzw" + 223: + name: "Convective tendency of meridional wind" + alternative_names: + - "ctmw" + 224: + name: "Vertical diffusion of humidity" + alternative_names: + - "vdh" + 225: + name: "Humidity tendency by cumulus convection" + alternative_names: + - "htcc" + 226: + name: "Humidity tendency by large-scale condensation" + alternative_names: + - "htlc" + 227: + name: "Tendency due to removal of negative humidity" + alternative_names: + - "crnh" + 228: + name: "Total precipitation" + alternative_names: + - "tp" + 229: + name: "Instantaneous eastward turbulent surface stress" + alternative_names: + - "iews" + 230: + name: "Instantaneous northward turbulent surface stress" + alternative_names: + - "inss" + 231: + name: "Instantaneous surface sensible heat flux" + alternative_names: + - "ishf" + 232: + name: "Instantaneous moisture flux" + alternative_names: + - "ie" + 233: + name: "Apparent surface humidity" + alternative_names: + - "asq" + 234: + name: "Logarithm of surface roughness length for heat (climatological)" + alternative_names: + - "lsrh" + 235: + name: "Skin temperature" + alternative_names: + - "skt" + 236: + name: "Soil temperature level 4" + alternative_names: + - "stl4" + 237: + name: "Soil wetness level 4" + alternative_names: + - "swl4" + 238: + name: "Temperature of snow layer" + alternative_names: + - "tsn" + 239: + name: "Convective snowfall" + alternative_names: + - "csf" + 240: + name: "Large-scale snowfall" + alternative_names: + - "lsf" + 241: + name: "Accumulated cloud fraction tendency" + alternative_names: + - "acf" + 242: + name: "Accumulated liquid water tendency" + alternative_names: + - "alw" + 243: + name: "Forecast albedo" + alternative_names: + - "fal" + 244: + name: "Forecast surface roughness" + alternative_names: + - "fsr" + 245: + name: "Forecast logarithm of surface roughness for heat" + alternative_names: + - "flsr" + 246: + name: "Specific cloud liquid water content" + alternative_names: + - "clwc" + 247: + name: "Specific cloud ice water content" + alternative_names: + - "ciwc" + 248: + name: "Fraction of cloud cover" + alternative_names: + - "cc" + 249: + name: "Accumulated ice water tendency" + alternative_names: + - "aiw" + 250: + name: "Ice age" + alternative_names: + - "ice" + 251: + name: "Adiabatic tendency of temperature" + alternative_names: + - "atte" + 252: + name: "Adiabatic tendency of humidity" + alternative_names: + - "athe" + 253: + name: "Adiabatic tendency of zonal wind" + alternative_names: + - "atze" + 254: + name: "Adiabatic tendency of meridional wind" + alternative_names: + - "atmw" + 255: + name: "Indicates a missing value" + alternative_names: + - "_param_000255" + 928: + name: "Thicknes" + alternative_names: + - "thk" + 956: + name: "Thicknes anomaly" + alternative_names: + - "thka" + 999: + name: "Tropical cyclone" + alternative_names: + - "tc" + 3003: + name: "Pressure tendency" + alternative_names: + - "ptend" + 3005: + name: "Icao standard atmosphere reference height" + alternative_names: + - "icaht" + 3008: + name: "Geometrical height" + alternative_names: + - "h" + 3009: + name: "Standard deviation of height" + alternative_names: + - "hstdv" + 3012: + name: "Virtual potential temperature" + alternative_names: + - "vptmp" + 3014: + name: "Pseudo-adiabatic potential temperature" + alternative_names: + - "papt" + 3015: + name: "Maximum temperature" + alternative_names: + - "tmax" + 3016: + name: "Minimum temperature" + alternative_names: + - "tmin" + 3017: + name: "Dew point temperature" + alternative_names: + - "dpt" + 3018: + name: "Dew point depression (or deficit)" + alternative_names: + - "depr" + 3019: + name: "Lapse rate" + alternative_names: + - "lapr" + 3020: + name: "Visibility" + alternative_names: + - "vis" + 3021: + name: "Radar spectra (1)" + alternative_names: + - "rdsp1" + 3022: + name: "Radar spectra (2)" + alternative_names: + - "rdsp2" + 3023: + name: "Radar spectra (3)" + alternative_names: + - "rdsp3" + 3024: + name: "Parcel lifted index (to 500 hpa)" + alternative_names: + - "pli" + 3025: + name: "Temperature anomaly" + alternative_names: + - "ta" + 3026: + name: "Pressure anomaly" + alternative_names: + - "presa" + 3027: + name: "Geopotential height anomaly" + alternative_names: + - "gpa" + 3028: + name: "Wave spectra (1)" + alternative_names: + - "wvsp1" + 3029: + name: "Wave spectra (2)" + alternative_names: + - "wvsp2" + 3030: + name: "Wave spectra (3)" + alternative_names: + - "wvsp3" + 3031: + name: "Wind direction" + alternative_names: + - "wdir" + 3037: + name: "Montgomery stream function" + alternative_names: + - "mntsf" + 3038: + name: "Sigma coordinate vertical velocity" + alternative_names: + - "sgcvv" + 3041: + name: "Absolute vorticity" + alternative_names: + - "absv" + 3042: + name: "Absolute divergence" + alternative_names: + - "absd" + 3045: + name: "Vertical u-component shear" + alternative_names: + - "vucsh" + 3046: + name: "Vertical v-component shear" + alternative_names: + - "vvcsh" + 3047: + name: "Direction of current" + alternative_names: + - "dirc" + 3048: + name: "Speed of current" + alternative_names: + - "spc" + 3049: + name: "U-component of current" + alternative_names: + - "ucurr" + 3050: + name: "V-component of current" + alternative_names: + - "vcurr" + 3053: + name: "Humidity mixing ratio" + alternative_names: + - "mixr" + 3054: + name: "Precipitable water" + alternative_names: + - "pwat" + 3055: + name: "Vapour pressure" + alternative_names: + - "vp" + 3056: + name: "Saturation deficit" + alternative_names: + - "satd" + 3059: + name: "Precipitation rate" + alternative_names: + - "prate" + 3060: + name: "Thunderstorm probability" + alternative_names: + - "tstm" + 3062: + name: "Large-scale precipitation" + alternative_names: + - "lsp" + 3063: + name: "Convective precipitation (water)" + alternative_names: + - "acpcp" + 3064: + name: "Snow fall rate water equivalent" + alternative_names: + - "srweq" + 3066: + name: "Snow depth" + alternative_names: + - "sde" + 3067: + name: "Mixed layer depth" + alternative_names: + - "mld" + 3068: + name: "Transient thermocline depth" + alternative_names: + - "tthdp" + 3069: + name: "Main thermocline depth" + alternative_names: + - "mthd" + 3070: + name: "Main thermocline anomaly" + alternative_names: + - "mtha" + 3072: + name: "Convective cloud cover" + alternative_names: + - "ccc" + 3073: + name: "Low cloud cover" + alternative_names: + - "lcc" + 3074: + name: "Medium cloud cover" + alternative_names: + - "mcc" + 3075: + name: "High cloud cover" + alternative_names: + - "hcc" + 3077: + name: "Best lifted index (to 500 hpa)" + alternative_names: + - "bli" + 3079: + name: "Large scale snow" + alternative_names: + - "lssf" + 3080: + name: "Water temperature" + alternative_names: + - "wtmp" + 3082: + name: "Deviation of sea-level from mean" + alternative_names: + - "dslm" + 3086: + name: "Soil moisture content" + alternative_names: + - "ssw" + 3088: + name: "Salinity" + alternative_names: + - "s" + 3089: + name: "Density" + alternative_names: + - "den" + 3091: + name: "Ice cover (1=ice, 0=no ice)" + alternative_names: + - "icec" + 3092: + name: "Ice thickness" + alternative_names: + - "icetk" + 3093: + name: "Direction of ice drift" + alternative_names: + - "diced" + 3094: + name: "Speed of ice drift" + alternative_names: + - "siced" + 3095: + name: "U-component of ice drift" + alternative_names: + - "uice" + 3096: + name: "V-component of ice drift" + alternative_names: + - "vice" + 3097: + name: "Ice growth rate" + alternative_names: + - "iceg" + 3098: + name: "Ice divergence" + alternative_names: + - "iced" + 3099: + name: "Snowmelt" + alternative_names: + - "snom" + 3100: + name: "Signific.height,combined wind waves+swell" + alternative_names: + - "swh" + 3101: + name: "Mean direction of wind waves" + alternative_names: + - "mdww" + 3102: + name: "Significant height of wind waves" + alternative_names: + - "shww" + 3103: + name: "Mean period of wind waves" + alternative_names: + - "mpww" + 3104: + name: "Direction of swell waves" + alternative_names: + - "swdir" + 3105: + name: "Significant height of swell waves" + alternative_names: + - "swell" + 3106: + name: "Mean period of swell waves" + alternative_names: + - "swper" + 3107: + name: "Primary wave direction" + alternative_names: + - "mdps" + 3108: + name: "Primary wave mean period" + alternative_names: + - "mpps" + 3109: + name: "Secondary wave direction" + alternative_names: + - "dirsw" + 3110: + name: "Secondary wave mean period" + alternative_names: + - "swp" + 3111: + name: "Net short-wave radiation flux (surface)" + alternative_names: + - "nswrs" + 3112: + name: "Net long-wave radiation flux (surface)" + alternative_names: + - "nlwrs" + 3113: + name: "Net short-wave radiation flux(atmosph.top)" + alternative_names: + - "nswrt" + 3114: + name: "Net long-wave radiation flux(atmosph.top)" + alternative_names: + - "nlwrt" + 3115: + name: "Long wave radiation flux" + alternative_names: + - "lwavr" + 3116: + name: "Short wave radiation flux" + alternative_names: + - "swavr" + 3117: + name: "Global radiation flux" + alternative_names: + - "grad" + 3119: + name: "Radiance (with respect to wave number)" + alternative_names: + - "lwrad" + 3120: + name: "Radiance (with respect to wave length)" + alternative_names: + - "swrad" + 3121: + name: "Latent heat flux" + alternative_names: + - "lhf" + 3122: + name: "Sensible heat flux" + alternative_names: + - "shf" + 3123: + name: "Boundary layer dissipation" + alternative_names: + - "bld" + 3124: + name: "Momentum flux, u-component" + alternative_names: + - "uflx" + 3125: + name: "Momentum flux, v-component" + alternative_names: + - "vflx" + 3126: + name: "Wind mixing energy" + alternative_names: + - "wmixe" + 3127: + name: "Image data" + alternative_names: + - "imgd" + 129001: + name: "Stream function gradient" + alternative_names: + - "strfgrd" + 129002: + name: "Velocity potential gradient" + alternative_names: + - "vpotgrd" + 129003: + name: "Potential temperature gradient" + alternative_names: + - "ptgrd" + 129004: + name: "Equivalent potential temperature gradient" + alternative_names: + - "eqptgrd" + 129005: + name: "Saturated equivalent potential temperature gradient" + alternative_names: + - "septgrd" + 129011: + name: "U component of divergent wind gradient" + alternative_names: + - "udvwgrd" + 129012: + name: "V component of divergent wind gradient" + alternative_names: + - "vdvwgrd" + 129013: + name: "U component of rotational wind gradient" + alternative_names: + - "urtwgrd" + 129014: + name: "V component of rotational wind gradient" + alternative_names: + - "vrtwgrd" + 129021: + name: "Unbalanced component of temperature gradient" + alternative_names: + - "uctpgrd" + 129022: + name: "Unbalanced component of logarithm of surface pressure gradient" + alternative_names: + - "uclngrd" + 129023: + name: "Unbalanced component of divergence gradient" + alternative_names: + - "ucdvgrd" + 129024: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_129024" + 129025: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_129025" + 129026: + name: "Lake cover gradient" + alternative_names: + - "clgrd" + 129027: + name: "Low vegetation cover gradient" + alternative_names: + - "cvlgrd" + 129028: + name: "High vegetation cover gradient" + alternative_names: + - "cvhgrd" + 129029: + name: "Type of low vegetation gradient" + alternative_names: + - "tvlgrd" + 129030: + name: "Type of high vegetation gradient" + alternative_names: + - "tvhgrd" + 129031: + name: "Sea-ice cover gradient" + alternative_names: + - "sicgrd" + 129032: + name: "Snow albedo gradient" + alternative_names: + - "asngrd" + 129033: + name: "Snow density gradient" + alternative_names: + - "rsngrd" + 129034: + name: "Sea surface temperature gradient" + alternative_names: + - "sstkgrd" + 129035: + name: "Ice surface temperature layer 1 gradient" + alternative_names: + - "istl1grd" + 129036: + name: "Ice surface temperature layer 2 gradient" + alternative_names: + - "istl2grd" + 129037: + name: "Ice surface temperature layer 3 gradient" + alternative_names: + - "istl3grd" + 129038: + name: "Ice surface temperature layer 4 gradient" + alternative_names: + - "istl4grd" + 129039: + name: "Volumetric soil water layer 1 gradient" + alternative_names: + - "swvl1grd" + 129040: + name: "Volumetric soil water layer 2 gradient" + alternative_names: + - "swvl2grd" + 129041: + name: "Volumetric soil water layer 3 gradient" + alternative_names: + - "swvl3grd" + 129042: + name: "Volumetric soil water layer 4 gradient" + alternative_names: + - "swvl4grd" + 129043: + name: "Soil type gradient" + alternative_names: + - "sltgrd" + 129044: + name: "Snow evaporation gradient" + alternative_names: + - "esgrd" + 129045: + name: "Snowmelt gradient" + alternative_names: + - "smltgrd" + 129046: + name: "Solar duration gradient" + alternative_names: + - "sdurgrd" + 129047: + name: "Direct solar radiation gradient" + alternative_names: + - "dsrpgrd" + 129048: + name: "Magnitude of turbulent surface stress gradient" + alternative_names: + - "magssgrd" + 129049: + name: "10 metre wind gust gradient" + alternative_names: + - "10fggrd" + 129050: + name: "Large-scale precipitation fraction gradient" + alternative_names: + - "lspfgrd" + 129051: + name: "Maximum 2 metre temperature gradient" + alternative_names: + - "mx2t24grd" + 129052: + name: "Minimum 2 metre temperature gradient" + alternative_names: + - "mn2t24grd" + 129053: + name: "Montgomery potential gradient" + alternative_names: + - "montgrd" + 129054: + name: "Pressure gradient" + alternative_names: + - "presgrd" + 129055: + name: "Mean 2 metre temperature in the last 24 hours gradient" + alternative_names: + - "mean2t24grd" + 129056: + name: "Mean 2 metre dewpoint temperature in the last 24 hours gradient" + alternative_names: + - "mn2d24grd" + 129057: + name: "Downward uv radiation at the surface gradient" + alternative_names: + - "uvbgrd" + 129058: + name: "Photosynthetically active radiation at the surface gradient" + alternative_names: + - "pargrd" + 129059: + name: "Convective available potential energy gradient" + alternative_names: + - "capegrd" + 129060: + name: "Potential vorticity gradient" + alternative_names: + - "pvgrd" + 129061: + name: "Total precipitation from observations gradient" + alternative_names: + - "tpogrd" + 129062: + name: "Observation count gradient" + alternative_names: + - "obctgrd" + 129063: + name: "Start time for skin temperature difference" + alternative_names: + - "_param_129063" + 129064: + name: "Finish time for skin temperature difference" + alternative_names: + - "_param_129064" + 129065: + name: "Skin temperature difference" + alternative_names: + - "_param_129065" + 129066: + name: "Leaf area index, low vegetation" + alternative_names: + - "_param_129066" + 129067: + name: "Leaf area index, high vegetation" + alternative_names: + - "_param_129067" + 129068: + name: "Minimum stomatal resistance, low vegetation" + alternative_names: + - "_param_129068" + 129069: + name: "Minimum stomatal resistance, high vegetation" + alternative_names: + - "_param_129069" + 129070: + name: "Biome cover, low vegetation" + alternative_names: + - "_param_129070" + 129071: + name: "Biome cover, high vegetation" + alternative_names: + - "_param_129071" + 129078: + name: "Total column liquid water" + alternative_names: + - "_param_129078" + 129079: + name: "Total column ice water" + alternative_names: + - "_param_129079" + 129080: + name: "Experimental product" + alternative_names: + - "_param_129080" + 129081: + name: "Experimental product" + alternative_names: + - "_param_129081" + 129082: + name: "Experimental product" + alternative_names: + - "_param_129082" + 129083: + name: "Experimental product" + alternative_names: + - "_param_129083" + 129084: + name: "Experimental product" + alternative_names: + - "_param_129084" + 129085: + name: "Experimental product" + alternative_names: + - "_param_129085" + 129086: + name: "Experimental product" + alternative_names: + - "_param_129086" + 129087: + name: "Experimental product" + alternative_names: + - "_param_129087" + 129088: + name: "Experimental product" + alternative_names: + - "_param_129088" + 129089: + name: "Experimental product" + alternative_names: + - "_param_129089" + 129090: + name: "Experimental product" + alternative_names: + - "_param_129090" + 129091: + name: "Experimental product" + alternative_names: + - "_param_129091" + 129092: + name: "Experimental product" + alternative_names: + - "_param_129092" + 129093: + name: "Experimental product" + alternative_names: + - "_param_129093" + 129094: + name: "Experimental product" + alternative_names: + - "_param_129094" + 129095: + name: "Experimental product" + alternative_names: + - "_param_129095" + 129096: + name: "Experimental product" + alternative_names: + - "_param_129096" + 129097: + name: "Experimental product" + alternative_names: + - "_param_129097" + 129098: + name: "Experimental product" + alternative_names: + - "_param_129098" + 129099: + name: "Experimental product" + alternative_names: + - "_param_129099" + 129100: + name: "Experimental product" + alternative_names: + - "_param_129100" + 129101: + name: "Experimental product" + alternative_names: + - "_param_129101" + 129102: + name: "Experimental product" + alternative_names: + - "_param_129102" + 129103: + name: "Experimental product" + alternative_names: + - "_param_129103" + 129104: + name: "Experimental product" + alternative_names: + - "_param_129104" + 129105: + name: "Experimental product" + alternative_names: + - "_param_129105" + 129106: + name: "Experimental product" + alternative_names: + - "_param_129106" + 129107: + name: "Experimental product" + alternative_names: + - "_param_129107" + 129108: + name: "Experimental product" + alternative_names: + - "_param_129108" + 129109: + name: "Experimental product" + alternative_names: + - "_param_129109" + 129110: + name: "Experimental product" + alternative_names: + - "_param_129110" + 129111: + name: "Experimental product" + alternative_names: + - "_param_129111" + 129112: + name: "Experimental product" + alternative_names: + - "_param_129112" + 129113: + name: "Experimental product" + alternative_names: + - "_param_129113" + 129114: + name: "Experimental product" + alternative_names: + - "_param_129114" + 129115: + name: "Experimental product" + alternative_names: + - "_param_129115" + 129116: + name: "Experimental product" + alternative_names: + - "_param_129116" + 129117: + name: "Experimental product" + alternative_names: + - "_param_129117" + 129118: + name: "Experimental product" + alternative_names: + - "_param_129118" + 129119: + name: "Experimental product" + alternative_names: + - "_param_129119" + 129120: + name: "Experimental product" + alternative_names: + - "_param_129120" + 129121: + name: "Maximum temperature at 2 metres gradient" + alternative_names: + - "mx2t6grd" + 129122: + name: "Minimum temperature at 2 metres gradient" + alternative_names: + - "mn2t6grd" + 129123: + name: "10 metre wind gust in the last 6 hours gradient" + alternative_names: + - "10fg6grd" + 129125: + name: "Vertically integrated total energy" + alternative_names: + - "_param_129125" + 129126: + name: "Generic parameter for sensitive area prediction" + alternative_names: + - "_param_129126" + 129127: + name: "Atmospheric tide gradient" + alternative_names: + - "atgrd" + 129128: + name: "Budget values gradient" + alternative_names: + - "bvgrd" + 129129: + name: "Geopotential gradient" + alternative_names: + - "zgrd" + 129130: + name: "Temperature gradient" + alternative_names: + - "tgrd" + 129131: + name: "U component of wind gradient" + alternative_names: + - "ugrd" + 129132: + name: "V component of wind gradient" + alternative_names: + - "vgrd" + 129133: + name: "Specific humidity gradient" + alternative_names: + - "qgrd" + 129134: + name: "Surface pressure gradient" + alternative_names: + - "spgrd" + 129135: + name: "Vertical velocity (pressure) gradient" + alternative_names: + - "wgrd" + 129136: + name: "Total column water gradient" + alternative_names: + - "tcwgrd" + 129137: + name: "Total column water vapour gradient" + alternative_names: + - "tcwvgrd" + 129138: + name: "Vorticity (relative) gradient" + alternative_names: + - "vogrd" + 129139: + name: "Soil temperature level 1 gradient" + alternative_names: + - "stl1grd" + 129140: + name: "Soil wetness level 1 gradient" + alternative_names: + - "swl1grd" + 129141: + name: "Snow depth gradient" + alternative_names: + - "sdgrd" + 129142: + name: "Stratiform precipitation (large-scale precipitation) gradient" + alternative_names: + - "lspgrd" + 129143: + name: "Convective precipitation gradient" + alternative_names: + - "cpgrd" + 129144: + name: "Snowfall (convective + stratiform) gradient" + alternative_names: + - "sfgrd" + 129145: + name: "Boundary layer dissipation gradient" + alternative_names: + - "bldgrd" + 129146: + name: "Surface sensible heat flux gradient" + alternative_names: + - "sshfgrd" + 129147: + name: "Surface latent heat flux gradient" + alternative_names: + - "slhfgrd" + 129148: + name: "Charnock gradient" + alternative_names: + - "chnkgrd" + 129149: + name: "Surface net radiation gradient" + alternative_names: + - "snrgrd" + 129150: + name: "Top net radiation gradient" + alternative_names: + - "tnrgrd" + 129151: + name: "Mean sea level pressure gradient" + alternative_names: + - "mslgrd" + 129152: + name: "Logarithm of surface pressure gradient" + alternative_names: + - "lnspgrd" + 129153: + name: "Short-wave heating rate gradient" + alternative_names: + - "swhrgrd" + 129154: + name: "Long-wave heating rate gradient" + alternative_names: + - "lwhrgrd" + 129155: + name: "Divergence gradient" + alternative_names: + - "dgrd" + 129156: + name: "Height gradient" + alternative_names: + - "ghgrd" + 129157: + name: "Relative humidity gradient" + alternative_names: + - "rgrd" + 129158: + name: "Tendency of surface pressure gradient" + alternative_names: + - "tspgrd" + 129159: + name: "Boundary layer height gradient" + alternative_names: + - "blhgrd" + 129160: + name: "Standard deviation of orography gradient" + alternative_names: + - "sdorgrd" + 129161: + name: "Anisotropy of sub-gridscale orography gradient" + alternative_names: + - "isorgrd" + 129162: + name: "Angle of sub-gridscale orography gradient" + alternative_names: + - "anorgrd" + 129163: + name: "Slope of sub-gridscale orography gradient" + alternative_names: + - "slorgrd" + 129164: + name: "Total cloud cover gradient" + alternative_names: + - "tccgrd" + 129165: + name: "10 metre u wind component gradient" + alternative_names: + - "10ugrd" + 129166: + name: "10 metre v wind component gradient" + alternative_names: + - "10vgrd" + 129167: + name: "2 metre temperature gradient" + alternative_names: + - "2tgrd" + 129168: + name: "2 metre dewpoint temperature gradient" + alternative_names: + - "2dgrd" + 129169: + name: "Surface solar radiation downwards gradient" + alternative_names: + - "ssrdgrd" + 129170: + name: "Soil temperature level 2 gradient" + alternative_names: + - "stl2grd" + 129171: + name: "Soil wetness level 2 gradient" + alternative_names: + - "swl2grd" + 129172: + name: "Land-sea mask gradient" + alternative_names: + - "lsmgrd" + 129173: + name: "Surface roughness gradient" + alternative_names: + - "srgrd" + 129174: + name: "Albedo gradient" + alternative_names: + - "algrd" + 129175: + name: "Surface thermal radiation downwards gradient" + alternative_names: + - "strdgrd" + 129176: + name: "Surface net solar radiation gradient" + alternative_names: + - "ssrgrd" + 129177: + name: "Surface net thermal radiation gradient" + alternative_names: + - "strgrd" + 129178: + name: "Top net solar radiation gradient" + alternative_names: + - "tsrgrd" + 129179: + name: "Top net thermal radiation gradient" + alternative_names: + - "ttrgrd" + 129180: + name: "East-west surface stress gradient" + alternative_names: + - "ewssgrd" + 129181: + name: "North-south surface stress gradient" + alternative_names: + - "nsssgrd" + 129182: + name: "Evaporation gradient" + alternative_names: + - "egrd" + 129183: + name: "Soil temperature level 3 gradient" + alternative_names: + - "stl3grd" + 129184: + name: "Soil wetness level 3 gradient" + alternative_names: + - "swl3grd" + 129185: + name: "Convective cloud cover gradient" + alternative_names: + - "cccgrd" + 129186: + name: "Low cloud cover gradient" + alternative_names: + - "lccgrd" + 129187: + name: "Medium cloud cover gradient" + alternative_names: + - "mccgrd" + 129188: + name: "High cloud cover gradient" + alternative_names: + - "hccgrd" + 129189: + name: "Sunshine duration gradient" + alternative_names: + - "sundgrd" + 129190: + name: "East-west component of sub-gridscale orographic variance gradient" + alternative_names: + - "ewovgrd" + 129191: + name: "North-south component of sub-gridscale orographic variance gradient" + alternative_names: + - "nsovgrd" + 129192: + name: "North-west/south-east component of sub-gridscale orographic variance gradient" + alternative_names: + - "nwovgrd" + 129193: + name: "North-east/south-west component of sub-gridscale orographic variance gradient" + alternative_names: + - "neovgrd" + 129194: + name: "Brightness temperature gradient" + alternative_names: + - "btmpgrd" + 129195: + name: "Longitudinal component of gravity wave stress gradient" + alternative_names: + - "lgwsgrd" + 129196: + name: "Meridional component of gravity wave stress gradient" + alternative_names: + - "mgwsgrd" + 129197: + name: "Gravity wave dissipation gradient" + alternative_names: + - "gwdgrd" + 129198: + name: "Skin reservoir content gradient" + alternative_names: + - "srcgrd" + 129199: + name: "Vegetation fraction gradient" + alternative_names: + - "veggrd" + 129200: + name: "Variance of sub-gridscale orography gradient" + alternative_names: + - "vsogrd" + 129201: + name: "Maximum temperature at 2 metres since previous post-processing gradient" + alternative_names: + - "mx2tgrd" + 129202: + name: "Minimum temperature at 2 metres since previous post-processing gradient" + alternative_names: + - "mn2tgrd" + 129203: + name: "Ozone mass mixing ratio gradient" + alternative_names: + - "o3grd" + 129204: + name: "Precipitation analysis weights gradient" + alternative_names: + - "pawgrd" + 129205: + name: "Runoff gradient" + alternative_names: + - "rogrd" + 129206: + name: "Total column ozone gradient" + alternative_names: + - "tco3grd" + 129207: + name: "10 metre wind speed gradient" + alternative_names: + - "10sigrd" + 129208: + name: "Top net solar radiation, clear sky gradient" + alternative_names: + - "tsrcgrd" + 129209: + name: "Top net thermal radiation, clear sky gradient" + alternative_names: + - "ttrcgrd" + 129210: + name: "Surface net solar radiation, clear sky gradient" + alternative_names: + - "ssrcgrd" + 129211: + name: "Surface net thermal radiation, clear sky gradient" + alternative_names: + - "strcgrd" + 129212: + name: "Toa incident solar radiation gradient" + alternative_names: + - "tisrgrd" + 129214: + name: "Diabatic heating by radiation gradient" + alternative_names: + - "dhrgrd" + 129215: + name: "Diabatic heating by vertical diffusion gradient" + alternative_names: + - "dhvdgrd" + 129216: + name: "Diabatic heating by cumulus convection gradient" + alternative_names: + - "dhccgrd" + 129217: + name: "Diabatic heating large-scale condensation gradient" + alternative_names: + - "dhlcgrd" + 129218: + name: "Vertical diffusion of zonal wind gradient" + alternative_names: + - "vdzwgrd" + 129219: + name: "Vertical diffusion of meridional wind gradient" + alternative_names: + - "vdmwgrd" + 129220: + name: "East-west gravity wave drag tendency gradient" + alternative_names: + - "ewgdgrd" + 129221: + name: "North-south gravity wave drag tendency gradient" + alternative_names: + - "nsgdgrd" + 129222: + name: "Convective tendency of zonal wind gradient" + alternative_names: + - "ctzwgrd" + 129223: + name: "Convective tendency of meridional wind gradient" + alternative_names: + - "ctmwgrd" + 129224: + name: "Vertical diffusion of humidity gradient" + alternative_names: + - "vdhgrd" + 129225: + name: "Humidity tendency by cumulus convection gradient" + alternative_names: + - "htccgrd" + 129226: + name: "Humidity tendency by large-scale condensation gradient" + alternative_names: + - "htlcgrd" + 129227: + name: "Change from removal of negative humidity gradient" + alternative_names: + - "crnhgrd" + 129228: + name: "Total precipitation gradient" + alternative_names: + - "tpgrd" + 129229: + name: "Instantaneous x surface stress gradient" + alternative_names: + - "iewsgrd" + 129230: + name: "Instantaneous y surface stress gradient" + alternative_names: + - "inssgrd" + 129231: + name: "Instantaneous surface heat flux gradient" + alternative_names: + - "ishfgrd" + 129232: + name: "Instantaneous moisture flux gradient" + alternative_names: + - "iegrd" + 129233: + name: "Apparent surface humidity gradient" + alternative_names: + - "asqgrd" + 129234: + name: "Logarithm of surface roughness length for heat gradient" + alternative_names: + - "lsrhgrd" + 129235: + name: "Skin temperature gradient" + alternative_names: + - "sktgrd" + 129236: + name: "Soil temperature level 4 gradient" + alternative_names: + - "stl4grd" + 129237: + name: "Soil wetness level 4 gradient" + alternative_names: + - "swl4grd" + 129238: + name: "Temperature of snow layer gradient" + alternative_names: + - "tsngrd" + 129239: + name: "Convective snowfall gradient" + alternative_names: + - "csfgrd" + 129240: + name: "Large scale snowfall gradient" + alternative_names: + - "lsfgrd" + 129241: + name: "Accumulated cloud fraction tendency gradient" + alternative_names: + - "acfgrd" + 129242: + name: "Accumulated liquid water tendency gradient" + alternative_names: + - "alwgrd" + 129243: + name: "Forecast albedo gradient" + alternative_names: + - "falgrd" + 129244: + name: "Forecast surface roughness gradient" + alternative_names: + - "fsrgrd" + 129245: + name: "Forecast logarithm of surface roughness for heat gradient" + alternative_names: + - "flsrgrd" + 129246: + name: "Specific cloud liquid water content gradient" + alternative_names: + - "clwcgrd" + 129247: + name: "Specific cloud ice water content gradient" + alternative_names: + - "ciwcgrd" + 129248: + name: "Cloud cover gradient" + alternative_names: + - "ccgrd" + 129249: + name: "Accumulated ice water tendency gradient" + alternative_names: + - "aiwgrd" + 129250: + name: "Ice age gradient" + alternative_names: + - "icegrd" + 129251: + name: "Adiabatic tendency of temperature gradient" + alternative_names: + - "attegrd" + 129252: + name: "Adiabatic tendency of humidity gradient" + alternative_names: + - "athegrd" + 129253: + name: "Adiabatic tendency of zonal wind gradient" + alternative_names: + - "atzegrd" + 129254: + name: "Adiabatic tendency of meridional wind gradient" + alternative_names: + - "atmwgrd" + 129255: + name: "Indicates a missing value" + alternative_names: + - "_param_129255" + 130208: + name: "Top solar radiation upward" + alternative_names: + - "tsru" + 130209: + name: "Top thermal radiation upward" + alternative_names: + - "ttru" + 130210: + name: "Top solar radiation upward, clear sky" + alternative_names: + - "tsuc" + 130211: + name: "Top thermal radiation upward, clear sky" + alternative_names: + - "ttuc" + 130212: + name: "Cloud liquid water" + alternative_names: + - "clw" + 130213: + name: "Cloud fraction" + alternative_names: + - "cf" + 130214: + name: "Diabatic heating by radiation" + alternative_names: + - "dhr" + 130215: + name: "Diabatic heating by vertical diffusion" + alternative_names: + - "dhvd" + 130216: + name: "Diabatic heating by cumulus convection" + alternative_names: + - "dhcc" + 130217: + name: "Diabatic heating by large-scale condensation" + alternative_names: + - "dhlc" + 130218: + name: "Vertical diffusion of zonal wind" + alternative_names: + - "vdzw" + 130219: + name: "Vertical diffusion of meridional wind" + alternative_names: + - "vdmw" + 130220: + name: "East-west gravity wave drag" + alternative_names: + - "ewgd" + 130221: + name: "North-south gravity wave drag" + alternative_names: + - "nsgd" + 130224: + name: "Vertical diffusion of humidity" + alternative_names: + - "vdh" + 130225: + name: "Humidity tendency by cumulus convection" + alternative_names: + - "htcc" + 130226: + name: "Humidity tendency by large-scale condensation" + alternative_names: + - "htlc" + 130228: + name: "Adiabatic tendency of temperature" + alternative_names: + - "att" + 130229: + name: "Adiabatic tendency of humidity" + alternative_names: + - "ath" + 130230: + name: "Adiabatic tendency of zonal wind" + alternative_names: + - "atzw" + 130231: + name: "Adiabatic tendency of meridional wind" + alternative_names: + - "atmwax" + 130232: + name: "Mean vertical velocity" + alternative_names: + - "mvv" + 131001: + name: "2m temperature anomaly of at least +2k" + alternative_names: + - "2tag2" + 131002: + name: "2m temperature anomaly of at least +1k" + alternative_names: + - "2tag1" + 131003: + name: "2m temperature anomaly of at least 0k" + alternative_names: + - "2tag0" + 131004: + name: "2m temperature anomaly of at most -1k" + alternative_names: + - "2talm1" + 131005: + name: "2m temperature anomaly of at most -2k" + alternative_names: + - "2talm2" + 131006: + name: "Total precipitation anomaly of at least 20 mm" + alternative_names: + - "tpag20" + 131007: + name: "Total precipitation anomaly of at least 10 mm" + alternative_names: + - "tpag10" + 131008: + name: "Total precipitation anomaly of at least 0 mm" + alternative_names: + - "tpag0" + 131009: + name: "Surface temperature anomaly of at least 0k" + alternative_names: + - "stag0" + 131010: + name: "Mean sea level pressure anomaly of at least 0 pa" + alternative_names: + - "mslag0" + 131015: + name: "Height of 0 degree isotherm probability" + alternative_names: + - "h0dip" + 131016: + name: "Height of snowfall limit probability" + alternative_names: + - "hslp" + 131017: + name: "Showalter index probability" + alternative_names: + - "saip" + 131018: + name: "Whiting index probability" + alternative_names: + - "whip" + 131020: + name: "Temperature anomaly of at most -2 k" + alternative_names: + - "talm2" + - "temperature anomaly less than -2 k" + 131021: + name: "Temperature anomaly of at least 2 k" + alternative_names: + - "tag2" + - "temperature anomaly of at least +2 k" + 131022: + name: "Temperature anomaly of at most -8 k" + alternative_names: + - "talm8" + - "temperature anomaly less than -8 k" + 131023: + name: "Temperature anomaly of at most -4 k" + alternative_names: + - "talm4" + - "temperature anomaly less than -4 k" + 131024: + name: "Temperature anomaly of at least 4 k" + alternative_names: + - "tag4" + - "temperature anomaly greater than +4 k" + - "temperature anomaly greater than 4 k" + 131025: + name: "Temperature anomaly of at least 8 k" + alternative_names: + - "tag8" + - "temperature anomaly greater than +8 k" + - "temperature anomaly greater than 8 k" + 131049: + name: "10 metre wind gust probability" + alternative_names: + - "10gp" + 131059: + name: "Convective available potential energy probability" + alternative_names: + - "capep" + 131060: + name: "Total precipitation of at least 1 mm" + alternative_names: + - "tpg1" + 131061: + name: "Total precipitation of at least 5 mm" + alternative_names: + - "tpg5" + 131062: + name: "Total precipitation of at least 10 mm" + alternative_names: + - "tpg10" + 131063: + name: "Total precipitation of at least 20 mm" + alternative_names: + - "tpg20" + 131064: + name: "Total precipitation less than 0.1 mm" + alternative_names: + - "tpl01" + 131065: + name: "Total precipitation rate less than 1 mm/day" + alternative_names: + - "tprl1" + 131066: + name: "Total precipitation rate of at least 3 mm/day" + alternative_names: + - "tprg3" + 131067: + name: "Total precipitation rate of at least 5 mm/day" + alternative_names: + - "tprg5" + 131068: + name: "10 metre wind speed of at least 10 m/s" + alternative_names: + - "10spg10" + 131069: + name: "10 metre wind speed of at least 15 m/s" + alternative_names: + - "10spg15" + 131070: + name: "10 metre wind gust of at least 15 m/s" + alternative_names: + - "10fgg15" + 131071: + name: "10 metre wind gust of at least 20 m/s" + alternative_names: + - "10fgg20" + 131072: + name: "10 metre wind gust of at least 25 m/s" + alternative_names: + - "10fgg25" + 131073: + name: "2 metre temperature less than 273.15 k" + alternative_names: + - "2tl273" + 131074: + name: "Significant wave height of at least 2 m" + alternative_names: + - "swhg2" + 131075: + name: "Significant wave height of at least 4 m" + alternative_names: + - "swhg4" + 131076: + name: "Significant wave height of at least 6 m" + alternative_names: + - "swhg6" + 131077: + name: "Significant wave height of at least 8 m" + alternative_names: + - "swhg8" + 131078: + name: "Mean wave period of at least 8 s" + alternative_names: + - "mwpg8" + 131079: + name: "Mean wave period of at least 10 s" + alternative_names: + - "mwpg10" + 131080: + name: "Mean wave period of at least 12 s" + alternative_names: + - "mwpg12" + 131081: + name: "Mean wave period of at least 15 s" + alternative_names: + - "mwpg15" + 131082: + name: "Total precipitation of at least 40 mm" + alternative_names: + - "tpg40" + 131083: + name: "Total precipitation of at least 60 mm" + alternative_names: + - "tpg60" + 131084: + name: "Total precipitation of at least 80 mm" + alternative_names: + - "tpg80" + 131085: + name: "Total precipitation of at least 100 mm" + alternative_names: + - "tpg100" + 131086: + name: "Total precipitation of at least 150 mm" + alternative_names: + - "tpg150" + 131087: + name: "Total precipitation of at least 200 mm" + alternative_names: + - "tpg200" + 131088: + name: "Total precipitation of at least 300 mm" + alternative_names: + - "tpg300" + 131089: + name: "Probability of a tropical storm" + alternative_names: + - "pts" + 131090: + name: "Probability of a hurricane" + alternative_names: + - "ph" + 131091: + name: "Probability of a tropical depression" + alternative_names: + - "ptd" + 131092: + name: "Climatological probability of a tropical storm" + alternative_names: + - "cpts" + 131093: + name: "Climatological probability of a hurricane" + alternative_names: + - "cph" + 131094: + name: "Climatological probability of a tropical depression" + alternative_names: + - "cptd" + 131095: + name: "Probability anomaly of a tropical storm" + alternative_names: + - "pats" + 131096: + name: "Probability anomaly of a hurricane" + alternative_names: + - "pah" + 131097: + name: "Probability anomaly of a tropical depression" + alternative_names: + - "patd" + 131098: + name: "Total precipitation of at least 25 mm" + alternative_names: + - "tpg25" + 131099: + name: "Total precipitation of at least 50 mm" + alternative_names: + - "tpg50" + 131100: + name: "10 metre wind gust of at least 10 m/s" + alternative_names: + - "10fgg10" + 131129: + name: "Geopotential probability" + alternative_names: + - "zp" + 131130: + name: "Temperature anomaly probability" + alternative_names: + - "tap" + 131139: + name: "Soil temperature level 1 probability" + alternative_names: + - "stl1p" + 131144: + name: "Snowfall (convective + stratiform) probability" + alternative_names: + - "sfp" + 131151: + name: "Mean sea level pressure probability" + alternative_names: + - "mslpp" + 131164: + name: "Total cloud cover probability" + alternative_names: + - "tccp" + 131165: + name: "10 metre speed probability" + alternative_names: + - "10sp" + 131167: + name: "2 metre temperature probability" + alternative_names: + - "2tp" + 131201: + name: "Maximum 2 metre temperature probability" + alternative_names: + - "mx2tp" + 131202: + name: "Minimum 2 metre temperature probability" + alternative_names: + - "mn2tp" + 131228: + name: "Total precipitation probability" + alternative_names: + - "tpp" + 131229: + name: "Significant wave height probability" + alternative_names: + - "swhp" + 131232: + name: "Mean wave period probability" + alternative_names: + - "mwpp" + 131255: + name: "Indicates a missing value" + alternative_names: + - "_param_131255" + 132044: + name: "Convective available potential energy shear index" + alternative_names: + - "capesi" + 132045: + name: "Water vapour flux index" + alternative_names: + - "wvfi" + 132049: + name: "10gi" + alternative_names: + - "10fgi" + - "10 metre wind gust index" + 132059: + name: "Convective available potential energy index" + alternative_names: + - "capei" + 132144: + name: "Snowfall index" + alternative_names: + - "sfi" + 132165: + name: "10 metre speed index" + alternative_names: + - "10wsi" + 132167: + name: "2 metre temperature index" + alternative_names: + - "2ti" + 132201: + name: "Maximum temperature at 2 metres index" + alternative_names: + - "mx2ti" + 132202: + name: "Minimum temperature at 2 metres index" + alternative_names: + - "mn2ti" + 132216: + name: "Maximum of significant wave height index" + alternative_names: + - "maxswhi" + 132228: + name: "Total precipitation index" + alternative_names: + - "tpi" + 133001: + name: "2m temperature probability less than -10 c" + alternative_names: + - "2tplm10" + 133002: + name: "2m temperature probability less than -5 c" + alternative_names: + - "2tplm5" + 133003: + name: "2m temperature probability less than 0 c" + alternative_names: + - "2tpl0" + 133004: + name: "2m temperature probability less than 5 c" + alternative_names: + - "2tpl5" + 133005: + name: "2m temperature probability less than 10 c" + alternative_names: + - "2tpl10" + 133006: + name: "2m temperature probability greater than 25 c" + alternative_names: + - "2tpg25" + 133007: + name: "2m temperature probability greater than 30 c" + alternative_names: + - "2tpg30" + 133008: + name: "2m temperature probability greater than 35 c" + alternative_names: + - "2tpg35" + 133009: + name: "2m temperature probability greater than 40 c" + alternative_names: + - "2tpg40" + 133010: + name: "2m temperature probability greater than 45 c" + alternative_names: + - "2tpg45" + 133011: + name: "Minimum 2 metre temperature probability less than -10 c" + alternative_names: + - "mn2tplm10" + 133012: + name: "Minimum 2 metre temperature probability less than -5 c" + alternative_names: + - "mn2tplm5" + 133013: + name: "Minimum 2 metre temperature probability less than 0 c" + alternative_names: + - "mn2tpl0" + 133014: + name: "Minimum 2 metre temperature probability less than 5 c" + alternative_names: + - "mn2tpl5" + 133015: + name: "Minimum 2 metre temperature probability less than 10 c" + alternative_names: + - "mn2tpl10" + 133016: + name: "Maximum 2 metre temperature probability greater than 25 c" + alternative_names: + - "mx2tpg25" + 133017: + name: "Maximum 2 metre temperature probability greater than 30 c" + alternative_names: + - "mx2tpg30" + 133018: + name: "Maximum 2 metre temperature probability greater than 35 c" + alternative_names: + - "mx2tpg35" + 133019: + name: "Maximum 2 metre temperature probability greater than 40 c" + alternative_names: + - "mx2tpg40" + 133020: + name: "Maximum 2 metre temperature probability greater than 45 c" + alternative_names: + - "mx2tpg45" + 133021: + name: "10 metre wind speed probability of at least 10 m/s" + alternative_names: + - "10spg10" + 133022: + name: "10 metre wind speed probability of at least 15 m/s" + alternative_names: + - "10spg15" + 133023: + name: "10 metre wind speed probability of at least 20 m/s" + alternative_names: + - "10spg20" + 133024: + name: "10 metre wind speed probability of at least 35 m/s" + alternative_names: + - "10spg35" + 133025: + name: "10 metre wind speed probability of at least 50 m/s" + alternative_names: + - "10spg50" + 133026: + name: "10 metre wind gust probability of at least 20 m/s" + alternative_names: + - "10gpg20" + 133027: + name: "10 metre wind gust probability of at least 35 m/s" + alternative_names: + - "10gpg35" + 133028: + name: "10 metre wind gust probability of at least 50 m/s" + alternative_names: + - "10gpg50" + 133029: + name: "10 metre wind gust probability of at least 75 m/s" + alternative_names: + - "10gpg75" + 133030: + name: "10 metre wind gust probability of at least 100 m/s" + alternative_names: + - "10gpg100" + 133031: + name: "Total precipitation probability of at least 1 mm" + alternative_names: + - "tppg1" + 133032: + name: "Total precipitation probability of at least 5 mm" + alternative_names: + - "tppg5" + 133033: + name: "Total precipitation probability of at least 10 mm" + alternative_names: + - "tppg10" + 133034: + name: "Total precipitation probability of at least 20 mm" + alternative_names: + - "tppg20" + 133035: + name: "Total precipitation probability of at least 40 mm" + alternative_names: + - "tppg40" + 133036: + name: "Total precipitation probability of at least 60 mm" + alternative_names: + - "tppg60" + 133037: + name: "Total precipitation probability of at least 80 mm" + alternative_names: + - "tppg80" + 133038: + name: "Total precipitation probability of at least 100 mm" + alternative_names: + - "tppg100" + 133039: + name: "Total precipitation probability of at least 150 mm" + alternative_names: + - "tppg150" + 133040: + name: "Total precipitation probability of at least 200 mm" + alternative_names: + - "tppg200" + 133041: + name: "Total precipitation probability of at least 300 mm" + alternative_names: + - "tppg300" + 133042: + name: "Snowfall probability of at least 1 mm" + alternative_names: + - "sfpg1" + 133043: + name: "Snowfall probability of at least 5 mm" + alternative_names: + - "sfpg5" + 133044: + name: "Snowfall probability of at least 10 mm" + alternative_names: + - "sfpg10" + 133045: + name: "Snowfall probability of at least 20 mm" + alternative_names: + - "sfpg20" + 133046: + name: "Snowfall probability of at least 40 mm" + alternative_names: + - "sfpg40" + 133047: + name: "Snowfall probability of at least 60 mm" + alternative_names: + - "sfpg60" + 133048: + name: "Snowfall probability of at least 80 mm" + alternative_names: + - "sfpg80" + 133049: + name: "Snowfall probability of at least 100 mm" + alternative_names: + - "sfpg100" + 133050: + name: "Snowfall probability of at least 150 mm" + alternative_names: + - "sfpg150" + 133051: + name: "Snowfall probability of at least 200 mm" + alternative_names: + - "sfpg200" + 133052: + name: "Snowfall probability of at least 300 mm" + alternative_names: + - "sfpg300" + 133053: + name: "Total cloud cover probability greater than 10%" + alternative_names: + - "tccpg10" + 133054: + name: "Total cloud cover probability greater than 20%" + alternative_names: + - "tccpg20" + 133055: + name: "Total cloud cover probability greater than 30%" + alternative_names: + - "tccpg30" + 133056: + name: "Total cloud cover probability greater than 40%" + alternative_names: + - "tccpg40" + 133057: + name: "Total cloud cover probability greater than 50%" + alternative_names: + - "tccpg50" + 133058: + name: "Total cloud cover probability greater than 60%" + alternative_names: + - "tccpg60" + 133059: + name: "Total cloud cover probability greater than 70%" + alternative_names: + - "tccpg70" + 133060: + name: "Total cloud cover probability greater than 80%" + alternative_names: + - "tccpg80" + 133061: + name: "Total cloud cover probability greater than 90%" + alternative_names: + - "tccpg90" + 133062: + name: "Total cloud cover probability greater than 99%" + alternative_names: + - "tccpg99" + 133063: + name: "High cloud cover probability greater than 10%" + alternative_names: + - "hccpg10" + 133064: + name: "High cloud cover probability greater than 20%" + alternative_names: + - "hccpg20" + 133065: + name: "High cloud cover probability greater than 30%" + alternative_names: + - "hccpg30" + 133066: + name: "High cloud cover probability greater than 40%" + alternative_names: + - "hccpg40" + 133067: + name: "High cloud cover probability greater than 50%" + alternative_names: + - "hccpg50" + 133068: + name: "High cloud cover probability greater than 60%" + alternative_names: + - "hccpg60" + 133069: + name: "High cloud cover probability greater than 70%" + alternative_names: + - "hccpg70" + 133070: + name: "High cloud cover probability greater than 80%" + alternative_names: + - "hccpg80" + 133071: + name: "High cloud cover probability greater than 90%" + alternative_names: + - "hccpg90" + 133072: + name: "High cloud cover probability greater than 99%" + alternative_names: + - "hccpg99" + 133073: + name: "Medium cloud cover probability greater than 10%" + alternative_names: + - "mccpg10" + 133074: + name: "Medium cloud cover probability greater than 20%" + alternative_names: + - "mccpg20" + 133075: + name: "Medium cloud cover probability greater than 30%" + alternative_names: + - "mccpg30" + 133076: + name: "Medium cloud cover probability greater than 40%" + alternative_names: + - "mccpg40" + 133077: + name: "Medium cloud cover probability greater than 50%" + alternative_names: + - "mccpg50" + 133078: + name: "Medium cloud cover probability greater than 60%" + alternative_names: + - "mccpg60" + 133079: + name: "Medium cloud cover probability greater than 70%" + alternative_names: + - "mccpg70" + 133080: + name: "Medium cloud cover probability greater than 80%" + alternative_names: + - "mccpg80" + 133081: + name: "Medium cloud cover probability greater than 90%" + alternative_names: + - "mccpg90" + 133082: + name: "Medium cloud cover probability greater than 99%" + alternative_names: + - "mccpg99" + 133083: + name: "Low cloud cover probability greater than 10%" + alternative_names: + - "lccpg10" + 133084: + name: "Low cloud cover probability greater than 20%" + alternative_names: + - "lccpg20" + 133085: + name: "Low cloud cover probability greater than 30%" + alternative_names: + - "lccpg30" + 133086: + name: "Low cloud cover probability greater than 40%" + alternative_names: + - "lccpg40" + 133087: + name: "Low cloud cover probability greater than 50%" + alternative_names: + - "lccpg50" + 133088: + name: "Low cloud cover probability greater than 60%" + alternative_names: + - "lccpg60" + 133089: + name: "Low cloud cover probability greater than 70%" + alternative_names: + - "lccpg70" + 133090: + name: "Low cloud cover probability greater than 80%" + alternative_names: + - "lccpg80" + 133091: + name: "Low cloud cover probability greater than 90%" + alternative_names: + - "lccpg90" + 133092: + name: "Low cloud cover probability greater than 99%" + alternative_names: + - "lccpg99" + 133093: + name: + "Probability of temperature standardized anomaly greater than 1 standard + deviation" + alternative_names: + - "ptsa_gt_1stdev" + 133094: + name: + "Probability of temperature standardized anomaly greater than 1.5 standard + deviation" + alternative_names: + - "ptsa_gt_1p5stdev" + 133095: + name: + "Probability of temperature standardized anomaly greater than 2 standard + deviation" + alternative_names: + - "ptsa_gt_2stdev" + 133096: + name: "Probability of temperature standardized anomaly less than -1 standard deviation" + alternative_names: + - "ptsa_lt_1stdev" + 133097: + name: + "Probability of temperature standardized anomaly less than -1.5 standard + deviation" + alternative_names: + - "ptsa_lt_1p5stdev" + 133098: + name: "Probability of temperature standardized anomaly less than -2 standard deviation" + alternative_names: + - "ptsa_lt_2stdev" + 140080: + name: "Wave experimental parameter 1" + alternative_names: + - "wx1" + 140081: + name: "Wave experimental parameter 2" + alternative_names: + - "wx2" + 140082: + name: "Wave experimental parameter 3" + alternative_names: + - "wx3" + 140083: + name: "Wave experimental parameter 4" + alternative_names: + - "wx4" + 140084: + name: "Wave experimental parameter 5" + alternative_names: + - "wx5" + 140098: + name: "Wave induced mean sea level correction" + alternative_names: + - "weta" + 140099: + name: "Ratio of wave angular and frequency width" + alternative_names: + - "wraf" + 140100: + name: "Number of events in freak waves statistics" + alternative_names: + - "wnslc" + 140101: + name: "U-component of atmospheric surface momentum flux" + alternative_names: + - "utaua" + 140102: + name: "V-component of atmospheric surface momentum flux" + alternative_names: + - "vtaua" + 140103: + name: "U-component of surface momentum flux into ocean" + alternative_names: + - "utauo" + 140104: + name: "V-component of surface momentum flux into ocean" + alternative_names: + - "vtauo" + 140105: + name: "Wave turbulent energy flux into ocean" + alternative_names: + - "wphio" + 140106: + name: "Wave directional width of first swell partition" + alternative_names: + - "wdw1" + 140107: + name: "Wave frequency width of first swell partition" + alternative_names: + - "wfw1" + 140108: + name: "Wave directional width of second swell partition" + alternative_names: + - "wdw2" + 140109: + name: "Wave frequency width of second swell partition" + alternative_names: + - "wfw2" + 140110: + name: "Wave directional width of third swell partition" + alternative_names: + - "wdw3" + 140111: + name: "Wave frequency width of third swell partition" + alternative_names: + - "wfw3" + 140112: + name: "Wave energy flux magnitude" + alternative_names: + - "wefxm" + 140113: + name: "Wave energy flux mean direction" + alternative_names: + - "wefxd" + 140114: + name: + "Significant wave height of all waves with periods within the inclusive + range from 10 to 12 seconds" + alternative_names: + - "h1012" + 140115: + name: + "Significant wave height of all waves with periods within the inclusive + range from 12 to 14 seconds" + alternative_names: + - "h1214" + 140116: + name: + "Significant wave height of all waves with periods within the inclusive + range from 14 to 17 seconds" + alternative_names: + - "h1417" + 140117: + name: + "Significant wave height of all waves with periods within the inclusive + range from 17 to 21 seconds" + alternative_names: + - "h1721" + 140118: + name: + "Significant wave height of all waves with periods within the inclusive + range from 21 to 25 seconds" + alternative_names: + - "h2125" + 140119: + name: + "Significant wave height of all waves with periods within the inclusive + range from 25 to 30 seconds" + alternative_names: + - "h2530" + 140120: + name: "Significant wave height of all waves with period larger than 10s" + alternative_names: + - "sh10" + 140121: + name: "Significant wave height of first swell partition" + alternative_names: + - "swh1" + 140122: + name: "Mean wave direction of first swell partition" + alternative_names: + - "mwd1" + 140123: + name: "Mean wave period of first swell partition" + alternative_names: + - "mwp1" + 140124: + name: "Significant wave height of second swell partition" + alternative_names: + - "swh2" + 140125: + name: "Mean wave direction of second swell partition" + alternative_names: + - "mwd2" + 140126: + name: "Mean wave period of second swell partition" + alternative_names: + - "mwp2" + 140127: + name: "Significant wave height of third swell partition" + alternative_names: + - "swh3" + 140128: + name: "Mean wave direction of third swell partition" + alternative_names: + - "mwd3" + 140129: + name: "Mean wave period of third swell partition" + alternative_names: + - "mwp3" + 140130: + name: "Envelope-maximum individual wave height" + alternative_names: + - "envhmax" + 140131: + name: "Time domain maximum individual crest height" + alternative_names: + - "tdcmax" + 140132: + name: "Time domain maximum individual wave height" + alternative_names: + - "tdhmax" + 140133: + name: "Space time maximum individual crest height" + alternative_names: + - "stcmax" + 140134: + name: "Space time maximum individual wave height" + alternative_names: + - "sthmax" + 140200: + name: "Maximum of significant wave height" + alternative_names: + - "maxswh" + 140207: + name: "Wave spectral skewness" + alternative_names: + - "wss" + 140208: + name: "Free convective velocity over the oceans" + alternative_names: + - "wstar" + 140209: + name: "Air density over the oceans" + alternative_names: + - "rhoao" + 140210: + name: "Mean square wave strain in sea ice" + alternative_names: + - "mswsi" + 140211: + name: "Normalized energy flux into waves" + alternative_names: + - "phiaw" + 140212: + name: "Normalized energy flux into ocean" + alternative_names: + - "phioc" + 140213: + name: "Turbulent langmuir number" + alternative_names: + - "tla" + 140214: + name: "Normalized stress into ocean" + alternative_names: + - "tauoc" + 140215: + name: "U-component surface stokes drift" + alternative_names: + - "ust" + 140216: + name: "V-component surface stokes drift" + alternative_names: + - "vst" + 140217: + name: "Period corresponding to maximum individual wave height" + alternative_names: + - "tmax" + 140218: + name: "Envelop-maximum individual wave height" + alternative_names: + - "hmax" + 140219: + name: "Model bathymetry" + alternative_names: + - "wmb" + 140220: + name: "Mean wave period based on first moment" + alternative_names: + - "mp1" + 140221: + name: "Mean zero-crossing wave period" + alternative_names: + - "mp2" + 140222: + name: "Wave spectral directional width" + alternative_names: + - "wdw" + 140223: + name: "Mean wave period based on first moment for wind waves" + alternative_names: + - "p1ww" + 140224: + name: "Mean wave period based on second moment for wind waves" + alternative_names: + - "p2ww" + 140225: + name: "Wave spectral directional width for wind waves" + alternative_names: + - "dwww" + 140226: + name: "Mean wave period based on first moment for swell" + alternative_names: + - "p1ps" + 140227: + name: "Mean wave period based on second moment for swell" + alternative_names: + - "p2ps" + 140228: + name: "Wave spectral directional width for swell" + alternative_names: + - "dwps" + 140229: + name: "Significant height of combined wind waves and swell" + alternative_names: + - "swh" + 140230: + name: "Mean wave direction" + alternative_names: + - "mwd" + 140231: + name: "Peak wave period" + alternative_names: + - "pp1d" + 140232: + name: "Mean wave period" + alternative_names: + - "mwp" + 140233: + name: "Coefficient of drag with waves" + alternative_names: + - "cdww" + 140234: + name: "Significant height of wind waves" + alternative_names: + - "shww" + 140235: + name: "Mean direction of wind waves" + alternative_names: + - "mdww" + 140236: + name: "Mean period of wind waves" + alternative_names: + - "mpww" + 140237: + name: "Significant height of total swell" + alternative_names: + - "shts" + 140238: + name: "Mean direction of total swell" + alternative_names: + - "mdts" + 140239: + name: "Mean period of total swell" + alternative_names: + - "mpts" + 140240: + name: "Standard deviation wave height" + alternative_names: + - "sdhs" + 140241: + name: "Mean of 10 metre wind speed" + alternative_names: + - "mu10" + 140242: + name: "Mean wind direction" + alternative_names: + - "mdwi" + 140243: + name: "Standard deviation of 10 metre wind speed" + alternative_names: + - "sdu" + 140244: + name: "Mean square slope of waves" + alternative_names: + - "msqs" + 140245: + name: "10 metre wind speed" + alternative_names: + - "wind" + 140246: + name: "Altimeter wave height" + alternative_names: + - "awh" + 140247: + name: "Altimeter corrected wave height" + alternative_names: + - "acwh" + 140248: + name: "Altimeter range relative correction" + alternative_names: + - "arrc" + 140249: + name: "10 metre wind direction" + alternative_names: + - "dwi" + 140250: + name: "2d wave spectra (multiple)" + alternative_names: + - "2dsp" + 140251: + name: "2d wave spectra (single)" + alternative_names: + - "2dfd" + 140252: + name: "Wave spectral kurtosis" + alternative_names: + - "wsk" + 140253: + name: "Benjamin-feir index" + alternative_names: + - "bfi" + 140254: + name: "Wave spectral peakedness" + alternative_names: + - "wsp" + 140255: + name: "Indicates a missing value" + alternative_names: + - "_param_140255" + 141221: + name: "Time-mean mean zero-crossing wave period" + alternative_names: + - "avg_mp2" + 141229: + name: "Time-mean significant height of combined wind waves and swell" + alternative_names: + - "avg_swh" + 141231: + name: "Time-mean peak wave period" + alternative_names: + - "avg_pp1d" + 141232: + name: "Time-mean mean wave period" + alternative_names: + - "avg_mwp" + 150129: + name: "Ocean potential temperature" + alternative_names: + - "ocpt" + 150130: + name: "Ocean salinity" + alternative_names: + - "ocs" + 150131: + name: "Ocean potential density" + alternative_names: + - "ocpd" + 150133: + name: "Ocean u wind component" + alternative_names: + - "_param_150133" + 150134: + name: "Ocean v wind component" + alternative_names: + - "_param_150134" + 150135: + name: "Ocean w wind component" + alternative_names: + - "ocw" + 150137: + name: "Richardson number" + alternative_names: + - "rn" + 150139: + name: "U*v product" + alternative_names: + - "uv" + 150140: + name: "U*t product" + alternative_names: + - "ut" + 150141: + name: "V*t product" + alternative_names: + - "vt" + 150142: + name: "U*u product" + alternative_names: + - "uu" + 150143: + name: "V*v product" + alternative_names: + - "vv" + 150144: + name: "Uv - u~v~" + alternative_names: + - "_param_150144" + 150145: + name: "Ut - u~t~" + alternative_names: + - "_param_150145" + 150146: + name: "Vt - v~t~" + alternative_names: + - "_param_150146" + 150147: + name: "Uu - u~u~" + alternative_names: + - "_param_150147" + 150148: + name: "Vv - v~v~" + alternative_names: + - "_param_150148" + 150152: + name: "Sea level" + alternative_names: + - "sl" + 150153: + name: "Barotropic stream function" + alternative_names: + - "_param_150153" + 150154: + name: "Mixed layer depth" + alternative_names: + - "mld" + 150155: + name: "Depth" + alternative_names: + - "_param_150155" + 150168: + name: "U stress" + alternative_names: + - "_param_150168" + 150169: + name: "V stress" + alternative_names: + - "_param_150169" + 150170: + name: "Turbulent kinetic energy input" + alternative_names: + - "_param_150170" + 150171: + name: "Net surface heat flux" + alternative_names: + - "nsf" + 150172: + name: "Surface solar radiation" + alternative_names: + - "_param_150172" + 150173: + name: "P-e" + alternative_names: + - "_param_150173" + 150180: + name: "Diagnosed sea surface temperature error" + alternative_names: + - "_param_150180" + 150181: + name: "Heat flux correction" + alternative_names: + - "_param_150181" + 150182: + name: "Observed sea surface temperature" + alternative_names: + - "_param_150182" + 150183: + name: "Observed heat flux" + alternative_names: + - "_param_150183" + 150255: + name: "Indicates a missing value" + alternative_names: + - "_param_150255" + 151126: + name: "Mean sea water potential temperature in the upper 300 m" + alternative_names: + - "mswpt300m" + 151127: + name: "Mean sea water temperature in the upper 300 m" + alternative_names: + - "mswt300m" + 151128: + name: "In situ temperature" + alternative_names: + - "_param_151128" + 151129: + name: "Sea water potential temperature" + alternative_names: + - "thetao" + 151130: + name: "Sea water practical salinity" + alternative_names: + - "so" + 151131: + name: "Eastward surface sea water velocity" + alternative_names: + - "ocu" + 151132: + name: "Northward surface sea water velocity" + alternative_names: + - "ocv" + 151133: + name: "Upward sea water velocity" + alternative_names: + - "wo" + 151134: + name: "Modulus of strain rate tensor" + alternative_names: + - "mst" + 151135: + name: "Vertical viscosity" + alternative_names: + - "vvs" + 151136: + name: "Vertical diffusivity" + alternative_names: + - "vdf" + 151137: + name: "Bottom level depth" + alternative_names: + - "dep" + 151138: + name: "Sea water sigma theta" + alternative_names: + - "sigmat" + 151139: + name: "Richardson number" + alternative_names: + - "rn" + 151140: + name: "Uv product" + alternative_names: + - "uv" + 151141: + name: "Ut product" + alternative_names: + - "ut" + 151142: + name: "Vt product" + alternative_names: + - "vt" + 151143: + name: "Uu product" + alternative_names: + - "uu" + 151144: + name: "Vv product" + alternative_names: + - "vv" + 151145: + name: "Sea surface height" + alternative_names: + - "zos" + 151146: + name: "Sea level previous timestep" + alternative_names: + - "sl_1" + 151147: + name: "Ocean barotropic stream function" + alternative_names: + - "stfbarot" + 151148: + name: "Mixed layer depth" + alternative_names: + - "mld" + 151149: + name: "Bottom pressure (equivalent height)" + alternative_names: + - "btp" + 151150: + name: "Steric height" + alternative_names: + - "sh" + 151151: + name: "Curl of wind stress" + alternative_names: + - "crl" + 151152: + name: "Divergence of wind stress" + alternative_names: + - "_param_151152" + 151153: + name: "Surface downward eastward stress" + alternative_names: + - "taueo" + 151154: + name: "Surface downward northward stress" + alternative_names: + - "tauno" + 151155: + name: "Turbulent kinetic energy input" + alternative_names: + - "tki" + 151156: + name: "Net surface heat flux" + alternative_names: + - "nsf" + 151157: + name: "Absorbed solar radiation" + alternative_names: + - "asr" + 151158: + name: "Precipitation - evaporation" + alternative_names: + - "pme" + 151159: + name: "Specified sea surface temperature" + alternative_names: + - "sst" + 151160: + name: "Specified surface heat flux" + alternative_names: + - "shf" + 151161: + name: "Diagnosed sea surface temperature error" + alternative_names: + - "dte" + 151162: + name: "Heat flux correction" + alternative_names: + - "hfc" + 151163: + name: "Depth of 20c isotherm" + alternative_names: + - "t20d" + 151164: + name: "Average potential temperature in the upper 300m" + alternative_names: + - "tav300" + 151165: + name: "Vertically integrated zonal velocity (previous time step)" + alternative_names: + - "uba1" + 151166: + name: "Vertically integrated meridional velocity (previous time step)" + alternative_names: + - "vba1" + 151167: + name: "Vertically integrated zonal volume transport" + alternative_names: + - "ztr" + 151168: + name: "Vertically integrated meridional volume transport" + alternative_names: + - "mtr" + 151169: + name: "Vertically integrated zonal heat transport" + alternative_names: + - "zht" + 151170: + name: "Vertically integrated meridional heat transport" + alternative_names: + - "mht" + 151171: + name: "U velocity maximum" + alternative_names: + - "umax" + 151172: + name: "Depth of the velocity maximum" + alternative_names: + - "dumax" + 151173: + name: "Salinity maximum" + alternative_names: + - "smax" + 151174: + name: "Depth of salinity maximum" + alternative_names: + - "dsmax" + 151175: + name: "Average sea water practical salinity in the upper 300m" + alternative_names: + - "sav300" + 151176: + name: "Layer thickness at scalar points" + alternative_names: + - "ldp" + 151177: + name: "Layer thickness at vector points" + alternative_names: + - "ldu" + 151178: + name: "Potential temperature increment" + alternative_names: + - "pti" + 151179: + name: "Potential temperature analysis error" + alternative_names: + - "ptae" + 151180: + name: "Background potential temperature" + alternative_names: + - "bpt" + 151181: + name: "Analysed potential temperature" + alternative_names: + - "apt" + 151182: + name: "Potential temperature background error" + alternative_names: + - "ptbe" + 151183: + name: "Analysed salinity" + alternative_names: + - "as" + 151184: + name: "Salinity increment" + alternative_names: + - "sali" + 151185: + name: "Estimated bias in temperature" + alternative_names: + - "ebt" + 151186: + name: "Estimated bias in salinity" + alternative_names: + - "ebs" + 151187: + name: "Zonal velocity increment (from balance operator)" + alternative_names: + - "uvi" + 151188: + name: "Meridional velocity increment (from balance operator)" + alternative_names: + - "vvi" + 151189: + name: "Sea surface temperature in degc" + alternative_names: + - "tos" + 151190: + name: "Salinity increment (from salinity data)" + alternative_names: + - "subi" + 151191: + name: "Salinity analysis error" + alternative_names: + - "sale" + 151192: + name: "Background salinity" + alternative_names: + - "bsal" + 151193: + name: "Reserved" + alternative_names: + - "_param_151193" + 151194: + name: "Salinity background error" + alternative_names: + - "salbe" + 151195: + name: "Depth of 14c isotherm" + alternative_names: + - "t14d" + 151196: + name: "Depth of 17c isotherm" + alternative_names: + - "t17d" + 151197: + name: "Depth of 26c isotherm" + alternative_names: + - "t26d" + 151198: + name: "Depth of 28c isotherm" + alternative_names: + - "t28d" + 151199: + name: "Estimated temperature bias from assimilation" + alternative_names: + - "ebta" + 151200: + name: "Estimated salinity bias from assimilation" + alternative_names: + - "ebsa" + 151201: + name: "Temperature increment from relaxation term" + alternative_names: + - "lti" + 151202: + name: "Salinity increment from relaxation term" + alternative_names: + - "lsi" + 151203: + name: "Bias in the zonal pressure gradient (applied)" + alternative_names: + - "bzpga" + 151204: + name: "Bias in the meridional pressure gradient (applied)" + alternative_names: + - "bmpga" + 151205: + name: "Estimated temperature bias from relaxation" + alternative_names: + - "ebtl" + 151206: + name: "Estimated salinity bias from relaxation" + alternative_names: + - "ebsl" + 151207: + name: "First guess bias in temperature" + alternative_names: + - "fgbt" + 151208: + name: "First guess bias in salinity" + alternative_names: + - "fgbs" + 151209: + name: "Applied bias in pressure" + alternative_names: + - "bpa" + 151210: + name: "Fg bias in pressure" + alternative_names: + - "fgbp" + 151211: + name: "Bias in temperature(applied)" + alternative_names: + - "pta" + 151212: + name: "Bias in salinity (applied)" + alternative_names: + - "psa" + 151213: + name: "Surface downward heat flux in sea water" + alternative_names: + - "hfds" + 151214: + name: "Ocean heat content 0-300m" + alternative_names: + - "hc300m" + 151215: + name: "Ocean heat content 0-700m" + alternative_names: + - "hc700m" + 151216: + name: "Ocean heat content 0-bottom" + alternative_names: + - "hcbtm" + 151217: + name: "Water flux correction" + alternative_names: + - "wfcorr" + 151218: + name: "Surface upward water flux" + alternative_names: + - "swfup" + 151219: + name: "Sea surface practical salinity" + alternative_names: + - "sos" + 151220: + name: "Surface downward northward stress" + alternative_names: + - "sdns" + 151221: + name: "Surface downward eastward stress" + alternative_names: + - "sdes" + 151222: + name: "Surface downward y stress" + alternative_names: + - "tauvo" + 151223: + name: "Surface downward x stress" + alternative_names: + - "tauuo" + 151224: + name: "Ocean mixed layer thickness defined by vertical tracer diffusivity threshold" + alternative_names: + - "mlotdev" + 151225: + name: "Ocean mixed layer thickness defined by sigma theta 0.01 kg/m3" + alternative_names: + - "mlotst010" + 151226: + name: "Ocean mixed layer thickness defined by sigma theta 0.03 kg/m3" + alternative_names: + - "mlotst030" + 151227: + name: "Ocean mixed layer thickness defined by sigma theta 0.125 kg/m3" + alternative_names: + - "mlotst125" + 151228: + name: "Ocean mixed layer thickness defined by temperature 0.2c" + alternative_names: + - "mlott02" + 151229: + name: "Ocean mixed layer thickness defined by temperature 0.5c" + alternative_names: + - "mlott05" + 151230: + name: "Virtual salt flux into sea water" + alternative_names: + - "vsf" + 151231: + name: "Virtual salt flux correction" + alternative_names: + - "vsfcorr" + 151232: + name: "Integrated salinity 0-700m" + alternative_names: + - "sc700m" + 151233: + name: "Integrated salinity 0-bottom" + alternative_names: + - "sabtm" + 151234: + name: "Sea water mass per unit area expressed as thickness" + alternative_names: + - "swmth" + 151235: + name: "Integrated salinity 0-300m" + alternative_names: + - "sc300m" + 151236: + name: "Surface net downward shortwave flux into ocean" + alternative_names: + - "rss" + 151240: + name: "Heat flux correction" + alternative_names: + - "hfcorr" + 151250: + name: "Sea water y velocity" + alternative_names: + - "voy" + 151251: + name: "Sea water x velocity" + alternative_names: + - "uox" + 151252: + name: "Northward sea water velocity" + alternative_names: + - "swnv" + 151253: + name: "Eastward sea water velocity" + alternative_names: + - "swev" + 151254: + name: "Upward sea water velocity" + alternative_names: + - "swzv" + 151255: + name: "Indicates a missing value" + alternative_names: + - "_param_151255" + 160049: + name: "10 metre wind gust during averaging time" + alternative_names: + - "10fgrea" + 160135: + name: "Vertical velocity (pressure)" + alternative_names: + - "wrea" + 160137: + name: "Precipitable water content" + alternative_names: + - "pwcrea" + 160140: + name: "Soil wetness level 1" + alternative_names: + - "swl1rea" + 160141: + name: "Snow depth" + alternative_names: + - "sdrea" + 160142: + name: "Large-scale precipitation" + alternative_names: + - "lsprea" + 160143: + name: "Convective precipitation" + alternative_names: + - "cprea" + 160144: + name: "Snowfall" + alternative_names: + - "sfrea" + 160156: + name: "Height" + alternative_names: + - "ghrea" + 160157: + name: "Relative humidity" + alternative_names: + - "rrea" + 160171: + name: "Soil wetness level 2" + alternative_names: + - "swl2rea" + 160180: + name: "East-west surface stress" + alternative_names: + - "ewssrea" + 160181: + name: "North-south surface stress" + alternative_names: + - "nsssrea" + 160182: + name: "Evaporation" + alternative_names: + - "erea" + 160184: + name: "Soil wetness level 3" + alternative_names: + - "swl3rea" + 160198: + name: "Skin reservoir content" + alternative_names: + - "srcrea" + 160199: + name: "Percentage of vegetation" + alternative_names: + - "vegrea" + 160201: + name: "Maximum temperature at 2 metres during averaging time" + alternative_names: + - "mx2trea" + 160202: + name: "Minimum temperature at 2 metres during averaging time" + alternative_names: + - "mn2trea" + 160205: + name: "Runoff" + alternative_names: + - "rorea" + 160206: + name: "Standard deviation of geopotential" + alternative_names: + - "zzrea" + 160207: + name: "Covariance of temperature and geopotential" + alternative_names: + - "tzrea" + 160208: + name: "Standard deviation of temperature" + alternative_names: + - "ttrea" + 160209: + name: "Covariance of specific humidity and geopotential" + alternative_names: + - "qzrea" + 160210: + name: "Covariance of specific humidity and temperature" + alternative_names: + - "qtrea" + 160211: + name: "Standard deviation of specific humidity" + alternative_names: + - "qqrea" + 160212: + name: "Covariance of u component and geopotential" + alternative_names: + - "uzrea" + 160213: + name: "Covariance of u component and temperature" + alternative_names: + - "utrea" + 160214: + name: "Covariance of u component and specific humidity" + alternative_names: + - "uqrea" + 160215: + name: "Standard deviation of u velocity" + alternative_names: + - "uurea" + 160216: + name: "Covariance of v component and geopotential" + alternative_names: + - "vzrea" + 160217: + name: "Covariance of v component and temperature" + alternative_names: + - "vtrea" + 160218: + name: "Covariance of v component and specific humidity" + alternative_names: + - "vqrea" + 160219: + name: "Covariance of v component and u component" + alternative_names: + - "vurea" + 160220: + name: "Standard deviation of v component" + alternative_names: + - "vvrea" + 160221: + name: "Covariance of w component and geopotential" + alternative_names: + - "wzrea" + 160222: + name: "Covariance of w component and temperature" + alternative_names: + - "wtrea" + 160223: + name: "Covariance of w component and specific humidity" + alternative_names: + - "wqrea" + 160224: + name: "Covariance of w component and u component" + alternative_names: + - "wurea" + 160225: + name: "Covariance of w component and v component" + alternative_names: + - "wvrea" + 160226: + name: "Standard deviation of vertical velocity" + alternative_names: + - "wwrea" + 160231: + name: "Instantaneous surface heat flux" + alternative_names: + - "ishfrea" + 160239: + name: "Convective snowfall" + alternative_names: + - "csfrea" + 160240: + name: "Large scale snowfall" + alternative_names: + - "lsfrea" + 160241: + name: "Cloud liquid water content" + alternative_names: + - "clwcerrea" + 160242: + name: "Cloud cover" + alternative_names: + - "ccrea" + 160243: + name: "Forecast albedo" + alternative_names: + - "falrea" + 160246: + name: "10 metre wind speed" + alternative_names: + - "10wsrea" + 160247: + name: "Momentum flux" + alternative_names: + - "moflrea" + 160249: + name: "Gravity wave dissipation flux" + alternative_names: + - "_param_160249" + 160254: + name: "Heaviside beta function" + alternative_names: + - "hsdrea" + 162045: + name: "Water vapour flux" + alternative_names: + - "wvf" + 162051: + name: "Surface geopotential" + alternative_names: + - "_param_162051" + 162053: + name: "Vertical integral of mass of atmosphere" + alternative_names: + - "vima" + 162054: + name: "Vertical integral of temperature" + alternative_names: + - "vit" + 162055: + name: "Vertical integral of water vapour" + alternative_names: + - "viwv" + 162056: + name: "Vertical integral of cloud liquid water" + alternative_names: + - "vilw" + 162057: + name: "Vertical integral of cloud frozen water" + alternative_names: + - "viiw" + 162058: + name: "Vertical integral of ozone" + alternative_names: + - "vioz" + 162059: + name: "Total column vertically-integrated kinetic energy" + alternative_names: + - "vike" + 162060: + name: "Total column vertically-integrated enthalpy" + alternative_names: + - "vithe" + 162061: + name: "Total column vertically-integrated potential + internal energy" + alternative_names: + - "vipie" + 162062: + name: "Vertical integral of potential+internal+latent energy" + alternative_names: + - "vipile" + 162063: + name: "Total column vertically-integrated total energy" + alternative_names: + - "vitoe" + 162064: + name: "Vertical integral of energy conversion" + alternative_names: + - "viec" + 162065: + name: "Vertical integral of eastward mass flux" + alternative_names: + - "vimae" + 162066: + name: "Vertical integral of northward mass flux" + alternative_names: + - "viman" + 162067: + name: "Vertical integral of eastward kinetic energy flux" + alternative_names: + - "vikee" + 162068: + name: "Vertical integral of northward kinetic energy flux" + alternative_names: + - "viken" + 162069: + name: "Vertical integral of eastward heat flux" + alternative_names: + - "vithee" + 162070: + name: "Vertical integral of northward heat flux" + alternative_names: + - "vithen" + 162071: + name: "Vertical integral of eastward water vapour flux" + alternative_names: + - "viwve" + 162072: + name: "Vertical integral of northward water vapour flux" + alternative_names: + - "viwvn" + 162073: + name: "Vertical integral of eastward geopotential flux" + alternative_names: + - "vige" + 162074: + name: "Vertical integral of northward geopotential flux" + alternative_names: + - "vign" + 162075: + name: "Vertical integral of eastward total energy flux" + alternative_names: + - "vitoee" + 162076: + name: "Vertical integral of northward total energy flux" + alternative_names: + - "vitoen" + 162077: + name: "Vertical integral of eastward ozone flux" + alternative_names: + - "vioze" + 162078: + name: "Vertical integral of northward ozone flux" + alternative_names: + - "viozn" + 162079: + name: "Vertical integral of divergence of cloud liquid water flux" + alternative_names: + - "vilwd" + 162080: + name: "Vertical integral of divergence of cloud frozen water flux" + alternative_names: + - "viiwd" + 162081: + name: "Vertical integral of divergence of mass flux" + alternative_names: + - "vimad" + 162082: + name: "Vertical integral of divergence of kinetic energy flux" + alternative_names: + - "viked" + 162083: + name: "Vertical integral of divergence of thermal energy flux" + alternative_names: + - "vithed" + 162084: + name: "Vertically integrated moisture divergence flux" + alternative_names: + - "viwvd" + 162085: + name: "Vertical integral of divergence of geopotential flux" + alternative_names: + - "vigd" + 162086: + name: "Vertical integral of divergence of total energy flux" + alternative_names: + - "vitoed" + 162087: + name: "Vertical integral of divergence of ozone flux" + alternative_names: + - "viozd" + 162088: + name: "Vertical integral of eastward cloud liquid water flux" + alternative_names: + - "vilwe" + 162089: + name: "Vertical integral of northward cloud liquid water flux" + alternative_names: + - "vilwn" + 162090: + name: "Vertical integral of eastward cloud frozen water flux" + alternative_names: + - "viiwe" + 162091: + name: "Vertical integral of northward cloud frozen water flux" + alternative_names: + - "viiwn" + 162092: + name: "Vertical integral of mass tendency" + alternative_names: + - "vimat" + 162093: + name: "Total column vertically-integrated water enthalpy" + alternative_names: + - "viwe" + 162100: + name: "Time-integrated temperature tendency due to short-wave radiation" + alternative_names: + - "srta" + 162101: + name: "Time-integrated temperature tendency due to long-wave radiation" + alternative_names: + - "trta" + 162102: + name: + "Time-integrated temperature tendency due to short wave radiation, clear + sky" + alternative_names: + - "srtca" + 162103: + name: + "Time-integrated temperature tendency due to long-wave radiation, clear + sky" + alternative_names: + - "trtca" + 162104: + name: "Time-integrated updraught mass flux" + alternative_names: + - "umfa" + 162105: + name: "Time-integrated downdraught mass flux" + alternative_names: + - "dmfa" + 162106: + name: "Time-integrated updraught detrainment rate" + alternative_names: + - "udra" + 162107: + name: "Time-integrated downdraught detrainment rate" + alternative_names: + - "ddra" + 162108: + name: "Time-integrated total precipitation flux" + alternative_names: + - "tpfa" + 162109: + name: "Time-integrated turbulent diffusion coefficient for heat" + alternative_names: + - "tdcha" + 162110: + name: "Time-integrated temperature tendency due to parametrisations" + alternative_names: + - "ttpha" + 162111: + name: "Time-integrated specific humidity tendency due to parametrisations" + alternative_names: + - "qtpha" + 162112: + name: "Time-integrated eastward wind tendency due to parametrisations" + alternative_names: + - "utpha" + 162113: + name: "Time-integrated northward wind tendency due to parametrisations" + alternative_names: + - "vtpha" + 162114: + name: "U-tendency from dynamics" + alternative_names: + - "utendd" + 162115: + name: "V-tendency from dynamics" + alternative_names: + - "vtendd" + 162116: + name: "T-tendency from dynamics" + alternative_names: + - "ttendd" + 162117: + name: "Q-tendency from dynamics" + alternative_names: + - "qtendd" + 162118: + name: "T-tendency from radiation" + alternative_names: + - "ttendr" + 162119: + name: "U-tendency from turbulent diffusion + subgrid orography" + alternative_names: + - "utendts" + 162120: + name: "V-tendency from turbulent diffusion + subgrid orography" + alternative_names: + - "vtendts" + 162121: + name: "T-tendency from turbulent diffusion + subgrid orography" + alternative_names: + - "ttendts" + 162122: + name: "Q-tendency from turbulent diffusion" + alternative_names: + - "qtendt" + 162123: + name: "U-tendency from subgrid orography" + alternative_names: + - "utends" + 162124: + name: "V-tendency from subgrid orography" + alternative_names: + - "vtends" + 162125: + name: "T-tendency from subgrid orography" + alternative_names: + - "ttends" + 162126: + name: "U-tendency from convection (deep+shallow)" + alternative_names: + - "utendcds" + 162127: + name: "V-tendency from convection (deep+shallow)" + alternative_names: + - "vtendcds" + 162128: + name: "T-tendency from convection (deep+shallow)" + alternative_names: + - "ttendcds" + 162129: + name: "Q-tendency from convection (deep+shallow)" + alternative_names: + - "qtendcds" + 162130: + name: "Liquid precipitation flux from convection" + alternative_names: + - "lpc" + 162131: + name: "Ice precipitation flux from convection" + alternative_names: + - "ipc" + 162132: + name: "T-tendency from cloud scheme" + alternative_names: + - "ttendcs" + 162133: + name: "Q-tendency from cloud scheme" + alternative_names: + - "qtendcs" + 162134: + name: "Ql-tendency from cloud scheme" + alternative_names: + - "qltendcs" + 162135: + name: "Qi-tendency from cloud scheme" + alternative_names: + - "qitendcs" + 162136: + name: "Liquid precip flux from cloud scheme (stratiform)" + alternative_names: + - "lpcs" + 162137: + name: "Ice precip flux from cloud scheme (stratiform)" + alternative_names: + - "ipcs" + 162138: + name: "U-tendency from shallow convection" + alternative_names: + - "utendcs" + 162139: + name: "V-tendency from shallow convection" + alternative_names: + - "vtendcs" + 162140: + name: "T-tendency from shallow convection" + alternative_names: + - "ttendsc" + 162141: + name: "Q-tendency from shallow convection" + alternative_names: + - "qtendsc" + 162206: + name: "Variance of geopotential" + alternative_names: + - "_param_162206" + 162207: + name: "Covariance of geopotential/temperature" + alternative_names: + - "_param_162207" + 162208: + name: "Variance of temperature" + alternative_names: + - "_param_162208" + 162209: + name: "Covariance of geopotential/specific humidity" + alternative_names: + - "_param_162209" + 162210: + name: "Covariance of temperature/specific humidity" + alternative_names: + - "_param_162210" + 162211: + name: "Variance of specific humidity" + alternative_names: + - "_param_162211" + 162212: + name: "Covariance of u component/geopotential" + alternative_names: + - "_param_162212" + 162213: + name: "Covariance of u component/temperature" + alternative_names: + - "_param_162213" + 162214: + name: "Covariance of u component/specific humidity" + alternative_names: + - "_param_162214" + 162215: + name: "Variance of u component" + alternative_names: + - "_param_162215" + 162216: + name: "Covariance of v component/geopotential" + alternative_names: + - "_param_162216" + 162217: + name: "Covariance of v component/temperature" + alternative_names: + - "_param_162217" + 162218: + name: "Covariance of v component/specific humidity" + alternative_names: + - "_param_162218" + 162219: + name: "Covariance of v component/u component" + alternative_names: + - "_param_162219" + 162220: + name: "Variance of v component" + alternative_names: + - "_param_162220" + 162221: + name: "Covariance of omega/geopotential" + alternative_names: + - "_param_162221" + 162222: + name: "Covariance of omega/temperature" + alternative_names: + - "_param_162222" + 162223: + name: "Covariance of omega/specific humidity" + alternative_names: + - "_param_162223" + 162224: + name: "Covariance of omega/u component" + alternative_names: + - "_param_162224" + 162225: + name: "Covariance of omega/v component" + alternative_names: + - "_param_162225" + 162226: + name: "Variance of omega" + alternative_names: + - "_param_162226" + 162227: + name: "Variance of surface pressure" + alternative_names: + - "_param_162227" + 162229: + name: "Variance of relative humidity" + alternative_names: + - "_param_162229" + 162230: + name: "Covariance of u component/ozone" + alternative_names: + - "_param_162230" + 162231: + name: "Covariance of v component/ozone" + alternative_names: + - "_param_162231" + 162232: + name: "Covariance of omega/ozone" + alternative_names: + - "_param_162232" + 162233: + name: "Variance of ozone" + alternative_names: + - "_param_162233" + 162255: + name: "Indicates a missing value" + alternative_names: + - "_param_162255" + 170001: + name: "Standardised precipitation index valid in the last 3 months" + alternative_names: + - "spi03" + 170002: + name: "Standardised precipitation index valid in the last 6 months" + alternative_names: + - "spi06" + 170003: + name: "Standardised precipitation index valid in the last 12 months" + alternative_names: + - "spi12" + 170149: + name: "Total soil moisture" + alternative_names: + - "tsw" + 170171: + name: "Soil wetness level 2" + alternative_names: + - "swl2" + 170179: + name: "Top net thermal radiation" + alternative_names: + - "ttr" + 171001: + name: "Stream function anomaly" + alternative_names: + - "strfa" + 171002: + name: "Velocity potential anomaly" + alternative_names: + - "vpota" + 171003: + name: "Potential temperature anomaly" + alternative_names: + - "pta" + 171004: + name: "Equivalent potential temperature anomaly" + alternative_names: + - "epta" + 171005: + name: "Saturated equivalent potential temperature anomaly" + alternative_names: + - "septa" + 171006: + name: "100 metre u wind component anomaly" + alternative_names: + - "100ua" + 171007: + name: "100 metre v wind component anomaly" + alternative_names: + - "100va" + 171011: + name: "U component of divergent wind anomaly" + alternative_names: + - "udwa" + 171012: + name: "V component of divergent wind anomaly" + alternative_names: + - "vdwa" + 171013: + name: "U component of rotational wind anomaly" + alternative_names: + - "urwa" + 171014: + name: "V component of rotational wind anomaly" + alternative_names: + - "vrwa" + 171021: + name: "Unbalanced component of temperature anomaly" + alternative_names: + - "uctpa" + 171022: + name: "Unbalanced component of logarithm of surface pressure anomaly" + alternative_names: + - "uclna" + 171023: + name: "Unbalanced component of divergence anomaly" + alternative_names: + - "ucdva" + 171024: + name: "Lake mix-layer temperature anomaly" + alternative_names: + - "lmlta" + 171025: + name: "Lake ice depth anomaly" + alternative_names: + - "licda" + 171026: + name: "Lake cover anomaly" + alternative_names: + - "cla" + 171027: + name: "Low vegetation cover anomaly" + alternative_names: + - "cvla" + 171028: + name: "High vegetation cover anomaly" + alternative_names: + - "cvha" + 171029: + name: "Type of low vegetation anomaly" + alternative_names: + - "tvla" + 171030: + name: "Type of high vegetation anomaly" + alternative_names: + - "tvha" + 171031: + name: "Ci" + alternative_names: + - "sica" + - "sea-ice cover anomaly" + 171032: + name: "Snow albedo anomaly" + alternative_names: + - "asna" + 171033: + name: "Snow density anomaly" + alternative_names: + - "rsna" + 171034: + name: "Sea surface temperature anomaly" + alternative_names: + - "ssta" + 171035: + name: "Ice surface temperature anomaly layer 1" + alternative_names: + - "istal1" + 171036: + name: "Ice surface temperature anomaly layer 2" + alternative_names: + - "istal2" + 171037: + name: "Ice surface temperature anomaly layer 3" + alternative_names: + - "istal3" + 171038: + name: "Ice surface temperature anomaly layer 4" + alternative_names: + - "istal4" + 171039: + name: "Swvl1a" + alternative_names: + - "swval1" + - "volumetric soil water anomaly layer 1" + - "swv1" + 171040: + name: "Swvl2a" + alternative_names: + - "swval2" + - "volumetric soil water anomaly layer 2" + - "swv2" + 171041: + name: "Swvl3a" + alternative_names: + - "swval3" + - "volumetric soil water anomaly layer 3" + - "swv3" + 171042: + name: "Swvl4a" + alternative_names: + - "swval4" + - "volumetric soil water anomaly layer 4" + - "swv4" + 171043: + name: "Soil type anomaly" + alternative_names: + - "slta" + 171044: + name: "Snow evaporation anomaly" + alternative_names: + - "esa" + 171045: + name: "Snowmelt anomaly" + alternative_names: + - "smlta" + 171046: + name: "Solar duration anomaly" + alternative_names: + - "sdura" + 171047: + name: "Direct solar radiation anomaly" + alternative_names: + - "dsrpa" + 171048: + name: "Magnitude of turbulent surface stress anomaly" + alternative_names: + - "magssa" + 171049: + name: "10 metre wind gust anomaly" + alternative_names: + - "10fga" + 171050: + name: "Large-scale precipitation fraction anomaly" + alternative_names: + - "lspfa" + 171051: + name: "Maximum 2 metre temperature in the last 24 hours anomaly" + alternative_names: + - "mx2t24a" + 171052: + name: "Minimum 2 metre temperature in the last 24 hours anomaly" + alternative_names: + - "mn2t24a" + 171053: + name: "Montgomery potential anomaly" + alternative_names: + - "monta" + 171054: + name: "Pressure anomaly" + alternative_names: + - "pa" + 171055: + name: "Mean 2 metre temperature in the last 24 hours anomaly" + alternative_names: + - "mean2t24a" + 171056: + name: "Mean 2 metre dewpoint temperature in the last 24 hours anomaly" + alternative_names: + - "mn2d24a" + 171057: + name: "Downward uv radiation at the surface anomaly" + alternative_names: + - "uvba" + 171058: + name: "Photosynthetically active radiation at the surface anomaly" + alternative_names: + - "para" + 171059: + name: "Convective available potential energy anomaly" + alternative_names: + - "capea" + 171060: + name: "Potential vorticity anomaly" + alternative_names: + - "pva" + 171061: + name: "Total precipitation from observations anomaly" + alternative_names: + - "tpoa" + 171062: + name: "Observation count anomaly" + alternative_names: + - "obcta" + 171063: + name: "Start time for skin temperature difference anomaly" + alternative_names: + - "stsktda" + 171064: + name: "Finish time for skin temperature difference anomaly" + alternative_names: + - "ftsktda" + 171065: + name: "Skin temperature difference anomaly" + alternative_names: + - "sktda" + 171078: + name: "Total column liquid water anomaly" + alternative_names: + - "tclwa" + 171079: + name: "Total column ice water anomaly" + alternative_names: + - "tciwa" + 171121: + name: "Maximum temperature at 2 metres in the last 6 hours anomaly" + alternative_names: + - "mx2t6a" + 171122: + name: "Minimum temperature at 2 metres in the last 6 hours anomaly" + alternative_names: + - "mn2t6a" + 171125: + name: "Vertically integrated total energy anomaly" + alternative_names: + - "vitea" + 171126: + name: "Generic parameter for sensitive area prediction" + alternative_names: + - "_param_171126" + 171127: + name: "Atmospheric tide anomaly" + alternative_names: + - "ata" + 171128: + name: "Budget values anomaly" + alternative_names: + - "bva" + 171129: + name: "Z" + alternative_names: + - "za" + - "geopotential anomaly" + 171130: + name: "T" + alternative_names: + - "ta" + - "temperature anomaly" + 171131: + name: "U" + alternative_names: + - "ua" + - "u component of wind anomaly" + 171132: + name: "V" + alternative_names: + - "va" + - "v component of wind anomaly" + 171133: + name: "Specific humidity anomaly" + alternative_names: + - "qa" + 171134: + name: "Surface pressure anomaly" + alternative_names: + - "spa" + 171135: + name: "Vertical velocity (pressure) anomaly" + alternative_names: + - "wa" + 171136: + name: "Total column water anomaly" + alternative_names: + - "tcwa" + 171137: + name: "Total column water vapour anomaly" + alternative_names: + - "tcwva" + 171138: + name: "Vo" + alternative_names: + - "voa" + - "relative vorticity anomaly" + 171139: + name: "St" + alternative_names: + - "stal1" + - "soil temperature anomaly level 1" + - "stl1" + 171140: + name: "Swl1" + alternative_names: + - "swal1" + - "soil wetness anomaly level 1" + 171141: + name: "Snow depth anomaly" + alternative_names: + - "sda" + 171142: + name: "Stratiform precipitation (large-scale precipitation) anomaly" + alternative_names: + - "lspa" + 171143: + name: "Convective precipitation anomaly" + alternative_names: + - "cpa" + 171144: + name: "Snowfall (convective + stratiform) anomaly" + alternative_names: + - "sfa" + 171145: + name: "Boundary layer dissipation anomaly" + alternative_names: + - "blda" + 171146: + name: "Surface sensible heat flux anomaly" + alternative_names: + - "sshfa" + 171147: + name: "Surface latent heat flux anomaly" + alternative_names: + - "slhfa" + 171148: + name: "Charnock anomaly" + alternative_names: + - "chnka" + 171149: + name: "Surface net radiation anomaly" + alternative_names: + - "snra" + 171150: + name: "Top net radiation anomaly" + alternative_names: + - "tnra" + 171151: + name: "Msl" + alternative_names: + - "msla" + - "mean sea level pressure anomaly" + 171152: + name: "Logarithm of surface pressure anomaly" + alternative_names: + - "lspa" + 171153: + name: "Short-wave heating rate anomaly" + alternative_names: + - "swhra" + 171154: + name: "Long-wave heating rate anomaly" + alternative_names: + - "lwhra" + 171155: + name: "D" + alternative_names: + - "da" + - "relative divergence anomaly" + 171156: + name: "Gh" + alternative_names: + - "gha" + - "height anomaly" + 171157: + name: "R" + alternative_names: + - "ra" + - "relative humidity anomaly" + 171158: + name: "Tendency of surface pressure anomaly" + alternative_names: + - "tspa" + 171159: + name: "Boundary layer height anomaly" + alternative_names: + - "blha" + 171160: + name: "Standard deviation of orography anomaly" + alternative_names: + - "sdora" + 171161: + name: "Anisotropy of sub-gridscale orography anomaly" + alternative_names: + - "isora" + 171162: + name: "Angle of sub-gridscale orography anomaly" + alternative_names: + - "anora" + 171163: + name: "Slope of sub-gridscale orography anomaly" + alternative_names: + - "slora" + 171164: + name: "Total cloud cover anomaly" + alternative_names: + - "tcca" + 171165: + name: "10 metre u wind component anomaly" + alternative_names: + - "10ua" + 171166: + name: "10 metre v wind component anomaly" + alternative_names: + - "10va" + 171167: + name: "2 metre temperature anomaly" + alternative_names: + - "2ta" + 171168: + name: "2 metre dewpoint temperature anomaly" + alternative_names: + - "2da" + 171169: + name: "Surface solar radiation downwards anomaly" + alternative_names: + - "ssrda" + 171170: + name: "Stl2" + alternative_names: + - "stal2" + - "soil temperature anomaly level 2" + - "slal2" + 171171: + name: "Swl2" + alternative_names: + - "swal2" + - "soil wetness anomaly level 2" + 171173: + name: "Surface roughness anomaly" + alternative_names: + - "sra" + 171174: + name: "Albedo anomaly" + alternative_names: + - "ala" + 171175: + name: "Surface thermal radiation downwards anomaly" + alternative_names: + - "strda" + 171176: + name: "Surface net solar radiation anomaly" + alternative_names: + - "ssra" + 171177: + name: "Surface net thermal radiation anomaly" + alternative_names: + - "stra" + 171178: + name: "Top net solar radiation anomaly" + alternative_names: + - "tsra" + 171179: + name: "Top net thermal radiation anomaly" + alternative_names: + - "ttra" + 171180: + name: "East-west surface stress anomaly" + alternative_names: + - "eqssa" + 171181: + name: "North-south surface stress anomaly" + alternative_names: + - "nsssa" + 171182: + name: "Evaporation anomaly" + alternative_names: + - "ea" + 171183: + name: "Stl3" + alternative_names: + - "stal3" + - "soil temperature anomaly level 3" + 171184: + name: "Swl3" + alternative_names: + - "swal3" + - "soil wetness anomaly level 3" + 171185: + name: "Convective cloud cover anomaly" + alternative_names: + - "ccca" + 171186: + name: "Low cloud cover anomaly" + alternative_names: + - "lcca" + 171187: + name: "Medium cloud cover anomaly" + alternative_names: + - "mcca" + 171188: + name: "High cloud cover anomaly" + alternative_names: + - "hcca" + 171189: + name: "Sunshine duration anomaly" + alternative_names: + - "sunda" + 171190: + name: "East-west component of sub-gridscale orographic variance anomaly" + alternative_names: + - "ewova" + 171191: + name: "North-south component of sub-gridscale orographic variance anomaly" + alternative_names: + - "nsova" + 171192: + name: "North-west/south-east component of sub-gridscale orographic variance anomaly" + alternative_names: + - "nwova" + 171193: + name: "North-east/south-west component of sub-gridscale orographic variance anomaly" + alternative_names: + - "neova" + 171194: + name: "Brightness temperature anomaly" + alternative_names: + - "btmpa" + 171195: + name: "Longitudinal component of gravity wave stress anomaly" + alternative_names: + - "lgwsa" + 171196: + name: "Meridional component of gravity wave stress anomaly" + alternative_names: + - "mgwsa" + 171197: + name: "Gravity wave dissipation anomaly" + alternative_names: + - "gwda" + 171198: + name: "Skin reservoir content anomaly" + alternative_names: + - "srca" + 171199: + name: "Vegetation fraction anomaly" + alternative_names: + - "vfa" + 171200: + name: "Variance of sub-gridscale orography anomaly" + alternative_names: + - "vsoa" + 171201: + name: "Maximum temperature at 2 metres anomaly" + alternative_names: + - "mx2ta" + 171202: + name: "Minimum temperature at 2 metres anomaly" + alternative_names: + - "mn2ta" + 171203: + name: "Ozone mass mixing ratio anomaly" + alternative_names: + - "o3a" + 171204: + name: "Precipitation analysis weights anomaly" + alternative_names: + - "pawa" + 171205: + name: "Runoff anomaly" + alternative_names: + - "roa" + 171206: + name: "Total column ozone anomaly" + alternative_names: + - "tco3a" + 171207: + name: "10si" + alternative_names: + - "10sia" + - "10 metre wind speed anomaly" + 171208: + name: "Top net solar radiation clear sky anomaly" + alternative_names: + - "tsrca" + 171209: + name: "Top net thermal radiation clear sky anomaly" + alternative_names: + - "ttrca" + 171210: + name: "Surface net solar radiation clear sky anomaly" + alternative_names: + - "ssrca" + 171211: + name: "Surface net thermal radiation, clear sky anomaly" + alternative_names: + - "strca" + 171212: + name: "Solar insolation anomaly" + alternative_names: + - "sia" + 171214: + name: "Diabatic heating by radiation anomaly" + alternative_names: + - "dhra" + 171215: + name: "Diabatic heating by vertical diffusion anomaly" + alternative_names: + - "dhvda" + 171216: + name: "Diabatic heating by cumulus convection anomaly" + alternative_names: + - "dhcca" + 171217: + name: "Diabatic heating by large-scale condensation anomaly" + alternative_names: + - "dhlca" + 171218: + name: "Vertical diffusion of zonal wind anomaly" + alternative_names: + - "vdzwa" + 171219: + name: "Vertical diffusion of meridional wind anomaly" + alternative_names: + - "vdmwa" + 171220: + name: "East-west gravity wave drag tendency anomaly" + alternative_names: + - "ewgda" + 171221: + name: "North-south gravity wave drag tendency anomaly" + alternative_names: + - "nsgda" + 171222: + name: "Convective tendency of zonal wind anomaly" + alternative_names: + - "ctzwa" + 171223: + name: "Convective tendency of meridional wind anomaly" + alternative_names: + - "ctmwa" + 171224: + name: "Vertical diffusion of humidity anomaly" + alternative_names: + - "vdha" + 171225: + name: "Humidity tendency by cumulus convection anomaly" + alternative_names: + - "htcca" + 171226: + name: "Humidity tendency by large-scale condensation anomaly" + alternative_names: + - "htlca" + 171227: + name: "Change from removal of negative humidity anomaly" + alternative_names: + - "crnha" + 171228: + name: "Total precipitation anomaly" + alternative_names: + - "tpa" + 171229: + name: "Instantaneous x surface stress anomaly" + alternative_names: + - "iewsa" + 171230: + name: "Instantaneous y surface stress anomaly" + alternative_names: + - "inssa" + 171231: + name: "Instantaneous surface heat flux anomaly" + alternative_names: + - "ishfa" + 171232: + name: "Instantaneous moisture flux anomaly" + alternative_names: + - "iea" + 171233: + name: "Apparent surface humidity anomaly" + alternative_names: + - "asqa" + 171234: + name: "Logarithm of surface roughness length for heat anomaly" + alternative_names: + - "lsrha" + 171235: + name: "Skin temperature anomaly" + alternative_names: + - "skta" + 171236: + name: "Soil temperature level 4 anomaly" + alternative_names: + - "stal4" + 171237: + name: "Swl4" + alternative_names: + - "swal4" + - "soil wetness level 4 anomaly" + 171238: + name: "Temperature of snow layer anomaly" + alternative_names: + - "tsna" + 171239: + name: "Convective snowfall anomaly" + alternative_names: + - "csfa" + 171240: + name: "Large scale snowfall anomaly" + alternative_names: + - "lsfa" + 171241: + name: "Accumulated cloud fraction tendency anomaly" + alternative_names: + - "acfa" + 171242: + name: "Accumulated liquid water tendency anomaly" + alternative_names: + - "alwa" + 171243: + name: "Forecast albedo anomaly" + alternative_names: + - "fala" + 171244: + name: "Forecast surface roughness anomaly" + alternative_names: + - "fsra" + 171245: + name: "Forecast logarithm of surface roughness for heat anomaly" + alternative_names: + - "flsra" + 171246: + name: "Cloud liquid water content anomaly" + alternative_names: + - "clwca" + 171247: + name: "Cloud ice water content anomaly" + alternative_names: + - "ciwca" + 171248: + name: "Cloud cover anomaly" + alternative_names: + - "cca" + 171249: + name: "Accumulated ice water tendency anomaly" + alternative_names: + - "aiwa" + 171250: + name: "Ice age anomaly" + alternative_names: + - "iaa" + 171251: + name: "Adiabatic tendency of temperature anomaly" + alternative_names: + - "attea" + 171252: + name: "Adiabatic tendency of humidity anomaly" + alternative_names: + - "athea" + 171253: + name: "Adiabatic tendency of zonal wind anomaly" + alternative_names: + - "atzea" + 171254: + name: "Adiabatic tendency of meridional wind anomaly" + alternative_names: + - "atmwa" + 171255: + name: "Indicates a missing value" + alternative_names: + - "_param_171255" + 172008: + name: "Mean surface runoff rate" + alternative_names: + - "msror" + 172009: + name: "Mean sub-surface runoff rate" + alternative_names: + - "mssror" + 172044: + name: "Es" + alternative_names: + - "esrate" + - "snow evaporation" + 172045: + name: "Snowmelt" + alternative_names: + - "_param_172045" + 172048: + name: "Magnitude of turbulent surface stress" + alternative_names: + - "_param_172048" + 172050: + name: "Lspf" + alternative_names: + - "mlspfr" + - "mean large-scale precipitation fraction" + 172142: + name: "Lsp" + alternative_names: + - "mlsprt" + - "mean large-scale precipitation rate" + 172143: + name: "Cp" + alternative_names: + - "cprate" + - "mean convective precipitation rate" + 172144: + name: "Sf" + alternative_names: + - "mtsfr" + - "mean total snowfall rate" + 172145: + name: "Boundary layer dissipation" + alternative_names: + - "bldrate" + 172146: + name: "146" + alternative_names: + - "msshfl" + - "mean surface sensible heat flux" + - "sshf" + 172147: + name: "147" + alternative_names: + - "mslhfl" + - "mean surface latent heat flux" + - "slhf" + 172149: + name: "Snr" + alternative_names: + - "msnrf" + - "time-mean surface net radiation flux (sw and lw)" + 172153: + name: "Swhr" + alternative_names: + - "mswhr" + - "mean short-wave heating rate" + 172154: + name: "Lwhr" + alternative_names: + - "mlwhr" + - "mean long-wave heating rate" + 172169: + name: "Ssrd" + alternative_names: + - "msdsrf" + - "mean surface downward solar radiation flux" + 172175: + name: "Strd" + alternative_names: + - "msdtrf" + - "mean surface downward thermal radiation flux" + 172176: + name: "Ssr" + alternative_names: + - "msnsrf" + - "mean surface net solar radiation flux" + 172177: + name: "Str" + alternative_names: + - "msntrf" + - "mean surface net thermal radiation flux" + 172178: + name: "Tsr" + alternative_names: + - "mtnsrf" + - "mean top net solar radiation flux" + 172179: + name: "Ttr" + alternative_names: + - "mtntrf" + - "mean top net thermal radiation flux" + 172180: + name: "Ewss" + alternative_names: + - "ewssra" + - "east-west surface stress rate of accumulation" + 172181: + name: "Nsss" + alternative_names: + - "nsssra" + - "north-south surface stress rate of accumulation" + 172182: + name: "E" + alternative_names: + - "erate" + - "evaporation" + 172189: + name: "Sund" + alternative_names: + - "msdr" + - "mean sunshine duration rate" + 172195: + name: "Longitudinal component of gravity wave stress" + alternative_names: + - "_param_172195" + 172196: + name: "Meridional component of gravity wave stress" + alternative_names: + - "_param_172196" + 172197: + name: "Gravity wave dissipation" + alternative_names: + - "gwdrate" + 172205: + name: "Ro" + alternative_names: + - "mrort" + - "mean runoff rate" + 172208: + name: "Top net solar radiation, clear sky" + alternative_names: + - "_param_172208" + 172209: + name: "Top net thermal radiation, clear sky" + alternative_names: + - "_param_172209" + 172210: + name: "Surface net solar radiation, clear sky" + alternative_names: + - "_param_172210" + 172211: + name: "Surface net thermal radiation, clear sky" + alternative_names: + - "_param_172211" + 172212: + name: "Solar insolation rate of accumulation" + alternative_names: + - "soira" + 172228: + name: "Tp" + alternative_names: + - "tprate" + - "mean total precipitation rate" + 172239: + name: "Convective snowfall" + alternative_names: + - "_param_172239" + 172240: + name: "Large scale snowfall" + alternative_names: + - "_param_172240" + 172255: + name: "Indicates a missing value" + alternative_names: + - "_param_172255" + 173008: + name: "Mean surface runoff rate anomaly" + alternative_names: + - "msrora" + 173009: + name: "Mean sub-surface runoff rate anomaly" + alternative_names: + - "mssrora" + 173044: + name: "Snow evaporation anomaly" + alternative_names: + - "_param_173044" + 173045: + name: "Snowmelt anomaly" + alternative_names: + - "_param_173045" + 173048: + name: "Magnitude of turbulent surface stress anomaly" + alternative_names: + - "_param_173048" + 173050: + name: "Large-scale precipitation fraction anomaly" + alternative_names: + - "_param_173050" + 173142: + name: "Lspa" + alternative_names: + - "lspara" + - "stratiform precipitation (large-scale precipitation) anomalous rate of accumulation" + 173143: + name: "Cpa" + alternative_names: + - "mcpra" + - "mean convective precipitation rate anomaly" + 173144: + name: "Snowfall (convective + stratiform) anomalous rate of accumulation" + alternative_names: + - "sfara" + 173145: + name: "Boundary layer dissipation anomaly" + alternative_names: + - "_param_173145" + 173146: + name: "Surface sensible heat flux anomalous rate of accumulation" + alternative_names: + - "sshfara" + 173147: + name: "Surface latent heat flux anomalous rate of accumulation" + alternative_names: + - "slhfara" + 173149: + name: "Surface net radiation anomaly" + alternative_names: + - "_param_173149" + 173153: + name: "Short-wave heating rate anomaly" + alternative_names: + - "_param_173153" + 173154: + name: "Long-wave heating rate anomaly" + alternative_names: + - "_param_173154" + 173169: + name: "Ssrd" + alternative_names: + - "ssrdara" + - "surface solar radiation downwards anomalous rate of accumulation" + - "ssrda" + 173175: + name: "Strda" + alternative_names: + - "strdara" + - "surface thermal radiation downwards anomalous rate of accumulation" + 173176: + name: "Ssr" + alternative_names: + - "ssrara" + - "surface solar radiation anomalous rate of accumulation" + - "ssra" + 173177: + name: "Str" + alternative_names: + - "strara" + - "surface thermal radiation anomalous rate of accumulation" + - "stra" + 173178: + name: "Tsr" + alternative_names: + - "tsrara" + - "top solar radiation anomalous rate of accumulation" + - "tsra" + 173179: + name: "Ttr" + alternative_names: + - "ttrara" + - "top thermal radiation anomalous rate of accumulation" + - "ttra" + 173180: + name: "East-west surface stress anomalous rate of accumulation" + alternative_names: + - "ewssara" + 173181: + name: "North-south surface stress anomalous rate of accumulation" + alternative_names: + - "nsssara" + 173182: + name: "E" + alternative_names: + - "evara" + - "evaporation anomalous rate of accumulation" + - "ea" + 173189: + name: "Sunshine duration anomalous rate of accumulation" + alternative_names: + - "sundara" + 173195: + name: "Longitudinal component of gravity wave stress anomaly" + alternative_names: + - "_param_173195" + 173196: + name: "Meridional component of gravity wave stress anomaly" + alternative_names: + - "_param_173196" + 173197: + name: "Gravity wave dissipation anomaly" + alternative_names: + - "_param_173197" + 173205: + name: "Runoff anomalous rate of accumulation" + alternative_names: + - "roara" + 173208: + name: "Top net solar radiation, clear sky anomaly" + alternative_names: + - "_param_173208" + 173209: + name: "Top net thermal radiation, clear sky anomaly" + alternative_names: + - "_param_173209" + 173210: + name: "Surface net solar radiation, clear sky anomaly" + alternative_names: + - "_param_173210" + 173211: + name: "Surface net thermal radiation, clear sky anomaly" + alternative_names: + - "_param_173211" + 173212: + name: "Solar insolation anomalous rate of accumulation" + alternative_names: + - "soiara" + 173228: + name: "Total precipitation anomalous rate of accumulation" + alternative_names: + - "tpara" + 173239: + name: "Convective snowfall anomaly" + alternative_names: + - "_param_173239" + 173240: + name: "Large scale snowfall anomaly" + alternative_names: + - "_param_173240" + 173255: + name: "Indicates a missing value" + alternative_names: + - "_param_173255" + 174006: + name: "Total soil moisture" + alternative_names: + - "_param_174006" + 174008: + name: "Surface runoff" + alternative_names: + - "sro" + 174009: + name: "Sub-surface runoff" + alternative_names: + - "ssro" + 174010: + name: "Clear-sky (ii) down surface sw flux" + alternative_names: + - "sswcsdown" + 174013: + name: "Clear-sky (ii) up surface sw flux" + alternative_names: + - "sswcsup" + 174025: + name: "Visibility at 1.5m" + alternative_names: + - "vis15" + 174031: + name: "Fraction of sea-ice in sea" + alternative_names: + - "_param_174031" + 174034: + name: "Open-sea surface temperature" + alternative_names: + - "_param_174034" + 174039: + name: "Volumetric soil water layer 1" + alternative_names: + - "_param_174039" + 174040: + name: "Volumetric soil water layer 2" + alternative_names: + - "_param_174040" + 174041: + name: "Volumetric soil water layer 3" + alternative_names: + - "_param_174041" + 174042: + name: "Volumetric soil water layer 4" + alternative_names: + - "_param_174042" + 174049: + name: "10 metre wind gust in the last 24 hours" + alternative_names: + - "_param_174049" + 174050: + name: "Minimum temperature at 1.5m since previous post-processing" + alternative_names: + - "mn15t" + 174051: + name: "Maximum temperature at 1.5m since previous post-processing" + alternative_names: + - "mx15t" + 174052: + name: "Relative humidity at 1.5m" + alternative_names: + - "rhum" + 174055: + name: "1.5m temperature - mean in the last 24 hours" + alternative_names: + - "_param_174055" + 174083: + name: "Net primary productivity" + alternative_names: + - "_param_174083" + 174085: + name: "10m u wind over land" + alternative_names: + - "_param_174085" + 174086: + name: "10m v wind over land" + alternative_names: + - "_param_174086" + 174087: + name: "1.5m temperature over land" + alternative_names: + - "_param_174087" + 174088: + name: "1.5m dewpoint temperature over land" + alternative_names: + - "_param_174088" + 174089: + name: "Top incoming solar radiation" + alternative_names: + - "_param_174089" + 174090: + name: "Top outgoing solar radiation" + alternative_names: + - "_param_174090" + 174092: + name: "Sea ice albedo" + alternative_names: + - "sialb" + 174093: + name: "Sea ice surface temperature" + alternative_names: + - "sitemptop" + 174094: + name: "Mean sea surface temperature" + alternative_names: + - "_param_174094" + 174095: + name: "1.5m specific humidity" + alternative_names: + - "_param_174095" + 174096: + name: "2 metre specific humidity" + alternative_names: + - "2sh" + 174097: + name: "Sea ice snow thickness" + alternative_names: + - "sisnthick" + 174098: + name: "Sea-ice thickness" + alternative_names: + - "sithick" + 174099: + name: "Liquid water potential temperature" + alternative_names: + - "_param_174099" + 174110: + name: "Ocean ice concentration" + alternative_names: + - "_param_174110" + 174111: + name: "Ocean mean ice depth" + alternative_names: + - "_param_174111" + 174112: + name: "Sea ice velocity along x" + alternative_names: + - "siue" + 174113: + name: "Sea ice velocity along y" + alternative_names: + - "sivn" + 174116: + name: "Short wave radiation flux at surface" + alternative_names: + - "swrsurf" + 174117: + name: "Short wave radiation flux at top of atmosphere" + alternative_names: + - "swrtop" + 174137: + name: "Total column water vapour" + alternative_names: + - "tcwvap" + 174139: + name: "Soil temperature layer 1" + alternative_names: + - "_param_174139" + 174142: + name: "Large scale rainfall rate" + alternative_names: + - "lsrrate" + 174143: + name: "Convective rainfall rate" + alternative_names: + - "crfrate" + 174164: + name: "Average potential temperature in upper 293.4m" + alternative_names: + - "_param_174164" + 174167: + name: "1.5m temperature" + alternative_names: + - "_param_174167" + 174168: + name: "1.5m dewpoint temperature" + alternative_names: + - "_param_174168" + 174170: + name: "Soil temperature layer 2" + alternative_names: + - "_param_174170" + 174175: + name: "Average salinity in upper 293.4m" + alternative_names: + - "_param_174175" + 174183: + name: "Soil temperature layer 3" + alternative_names: + - "_param_174183" + 174186: + name: "Very low cloud amount" + alternative_names: + - "vlca" + 174201: + name: "1.5m temperature - maximum in the last 24 hours" + alternative_names: + - "_param_174201" + 174202: + name: "1.5m temperature - minimum in the last 24 hours" + alternative_names: + - "_param_174202" + 174236: + name: "Soil temperature layer 4" + alternative_names: + - "_param_174236" + 174239: + name: "Convective snowfall rate" + alternative_names: + - "csfrate" + 174240: + name: "Large scale snowfall rate" + alternative_names: + - "lsfrate" + 174248: + name: "Total cloud amount - random overlap" + alternative_names: + - "tccro" + 174249: + name: "Total cloud amount in lw radiation" + alternative_names: + - "tcclwr" + 174255: + name: "Indicates a missing value" + alternative_names: + - "_param_174255" + 175006: + name: "Total soil moisture" + alternative_names: + - "_param_175006" + 175031: + name: "Fraction of sea-ice in sea" + alternative_names: + - "_param_175031" + 175034: + name: "Open-sea surface temperature" + alternative_names: + - "_param_175034" + 175039: + name: "Volumetric soil water layer 1" + alternative_names: + - "_param_175039" + 175040: + name: "Volumetric soil water layer 2" + alternative_names: + - "_param_175040" + 175041: + name: "Volumetric soil water layer 3" + alternative_names: + - "_param_175041" + 175042: + name: "Volumetric soil water layer 4" + alternative_names: + - "_param_175042" + 175049: + name: "10m wind gust in the last 24 hours" + alternative_names: + - "_param_175049" + 175055: + name: "1.5m temperature - mean in the last 24 hours" + alternative_names: + - "_param_175055" + 175083: + name: "Net primary productivity" + alternative_names: + - "_param_175083" + 175085: + name: "10m u wind over land" + alternative_names: + - "_param_175085" + 175086: + name: "10m v wind over land" + alternative_names: + - "_param_175086" + 175087: + name: "1.5m temperature over land" + alternative_names: + - "_param_175087" + 175088: + name: "1.5m dewpoint temperature over land" + alternative_names: + - "_param_175088" + 175089: + name: "Top incoming solar radiation" + alternative_names: + - "_param_175089" + 175090: + name: "Top outgoing solar radiation" + alternative_names: + - "_param_175090" + 175110: + name: "Ocean ice concentration" + alternative_names: + - "_param_175110" + 175111: + name: "Ocean mean ice depth" + alternative_names: + - "_param_175111" + 175139: + name: "Soil temperature layer 1" + alternative_names: + - "_param_175139" + 175164: + name: "Average potential temperature in upper 293.4m" + alternative_names: + - "_param_175164" + 175167: + name: "1.5m temperature" + alternative_names: + - "_param_175167" + 175168: + name: "1.5m dewpoint temperature" + alternative_names: + - "_param_175168" + 175170: + name: "Soil temperature layer 2" + alternative_names: + - "_param_175170" + 175175: + name: "Average salinity in upper 293.4m" + alternative_names: + - "_param_175175" + 175183: + name: "Soil temperature layer 3" + alternative_names: + - "_param_175183" + 175201: + name: "1.5m temperature - maximum in the last 24 hours" + alternative_names: + - "_param_175201" + 175202: + name: "1.5m temperature - minimum in the last 24 hours" + alternative_names: + - "_param_175202" + 175236: + name: "Soil temperature layer 4" + alternative_names: + - "_param_175236" + 175255: + name: "Indicates a missing value" + alternative_names: + - "_param_175255" + 180149: + name: "Total soil wetness" + alternative_names: + - "tsw" + 180176: + name: "Surface net solar radiation" + alternative_names: + - "ssr" + 180177: + name: "Surface net thermal radiation" + alternative_names: + - "str" + 180178: + name: "Top net solar radiation" + alternative_names: + - "tsr" + 180179: + name: "Top net thermal radiation" + alternative_names: + - "ttr" + 190141: + name: "Snow depth" + alternative_names: + - "sdsien" + 190170: + name: "Field capacity" + alternative_names: + - "cap" + 190171: + name: "Wilting point" + alternative_names: + - "wiltsien" + 190173: + name: "Roughness length" + alternative_names: + - "sr" + 190229: + name: "Total soil moisture" + alternative_names: + - "tsm" + 200001: + name: "Stream function difference" + alternative_names: + - "strfdiff" + 200002: + name: "Velocity potential difference" + alternative_names: + - "vpotdiff" + 200003: + name: "Potential temperature difference" + alternative_names: + - "ptdiff" + 200004: + name: "Equivalent potential temperature difference" + alternative_names: + - "eqptdiff" + 200005: + name: "Saturated equivalent potential temperature difference" + alternative_names: + - "septdiff" + 200011: + name: "U component of divergent wind difference" + alternative_names: + - "udvwdiff" + 200012: + name: "V component of divergent wind difference" + alternative_names: + - "vdvwdiff" + 200013: + name: "U component of rotational wind difference" + alternative_names: + - "urtwdiff" + 200014: + name: "V component of rotational wind difference" + alternative_names: + - "vrtwdiff" + 200021: + name: "Unbalanced component of temperature difference" + alternative_names: + - "uctpdiff" + 200022: + name: "Unbalanced component of logarithm of surface pressure difference" + alternative_names: + - "uclndiff" + 200023: + name: "Unbalanced component of divergence difference" + alternative_names: + - "ucdvdiff" + 200024: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_200024" + 200025: + name: "Reserved for future unbalanced components" + alternative_names: + - "_param_200025" + 200026: + name: "Lake cover difference" + alternative_names: + - "cldiff" + 200027: + name: "Low vegetation cover difference" + alternative_names: + - "cvldiff" + 200028: + name: "High vegetation cover difference" + alternative_names: + - "cvhdiff" + 200029: + name: "Type of low vegetation difference" + alternative_names: + - "tvldiff" + 200030: + name: "Type of high vegetation difference" + alternative_names: + - "tvhdiff" + 200031: + name: "Sea-ice cover difference" + alternative_names: + - "sicdiff" + 200032: + name: "Snow albedo difference" + alternative_names: + - "asndiff" + 200033: + name: "Snow density difference" + alternative_names: + - "rsndiff" + 200034: + name: "Sea surface temperature difference" + alternative_names: + - "sstdiff" + 200035: + name: "Ice surface temperature layer 1 difference" + alternative_names: + - "istl1diff" + 200036: + name: "Ice surface temperature layer 2 difference" + alternative_names: + - "istl2diff" + 200037: + name: "Ice surface temperature layer 3 difference" + alternative_names: + - "istl3diff" + 200038: + name: "Ice surface temperature layer 4 difference" + alternative_names: + - "istl4diff" + 200039: + name: "Volumetric soil water layer 1 difference" + alternative_names: + - "swvl1diff" + 200040: + name: "Volumetric soil water layer 2 difference" + alternative_names: + - "swvl2diff" + 200041: + name: "Volumetric soil water layer 3 difference" + alternative_names: + - "swvl3diff" + 200042: + name: "Volumetric soil water layer 4 difference" + alternative_names: + - "swvl4diff" + 200043: + name: "Soil type difference" + alternative_names: + - "sltdiff" + 200044: + name: "Snow evaporation difference" + alternative_names: + - "esdiff" + 200045: + name: "Snowmelt difference" + alternative_names: + - "smltdiff" + 200046: + name: "Solar duration difference" + alternative_names: + - "sdurdiff" + 200047: + name: "Direct solar radiation difference" + alternative_names: + - "dsrpdiff" + 200048: + name: "Magnitude of turbulent surface stress difference" + alternative_names: + - "magssdiff" + 200049: + name: "10 metre wind gust difference" + alternative_names: + - "10fgdiff" + 200050: + name: "Large-scale precipitation fraction difference" + alternative_names: + - "lspfdiff" + 200051: + name: "Maximum 2 metre temperature difference" + alternative_names: + - "mx2t24diff" + 200052: + name: "Minimum 2 metre temperature difference" + alternative_names: + - "mn2t24diff" + 200053: + name: "Montgomery potential difference" + alternative_names: + - "montdiff" + 200054: + name: "Pressure difference" + alternative_names: + - "presdiff" + 200055: + name: "Mean 2 metre temperature in the last 24 hours difference" + alternative_names: + - "mean2t24diff" + 200056: + name: "Mean 2 metre dewpoint temperature in the last 24 hours difference" + alternative_names: + - "mn2d24diff" + 200057: + name: "Downward uv radiation at the surface difference" + alternative_names: + - "uvbdiff" + 200058: + name: "Photosynthetically active radiation at the surface difference" + alternative_names: + - "pardiff" + 200059: + name: "Convective available potential energy difference" + alternative_names: + - "capediff" + 200060: + name: "Potential vorticity difference" + alternative_names: + - "pvdiff" + 200061: + name: "Total precipitation from observations difference" + alternative_names: + - "tpodiff" + 200062: + name: "Observation count difference" + alternative_names: + - "obctdiff" + 200063: + name: "Start time for skin temperature difference" + alternative_names: + - "_param_200063" + 200064: + name: "Finish time for skin temperature difference" + alternative_names: + - "_param_200064" + 200065: + name: "Skin temperature difference" + alternative_names: + - "_param_200065" + 200066: + name: "Leaf area index, low vegetation" + alternative_names: + - "_param_200066" + 200067: + name: "Leaf area index, high vegetation" + alternative_names: + - "_param_200067" + 200068: + name: "Minimum stomatal resistance, low vegetation" + alternative_names: + - "_param_200068" + 200069: + name: "Minimum stomatal resistance, high vegetation" + alternative_names: + - "_param_200069" + 200070: + name: "Biome cover, low vegetation" + alternative_names: + - "_param_200070" + 200071: + name: "Biome cover, high vegetation" + alternative_names: + - "_param_200071" + 200078: + name: "Total column liquid water" + alternative_names: + - "_param_200078" + 200079: + name: "Total column ice water" + alternative_names: + - "_param_200079" + 200080: + name: "Experimental product" + alternative_names: + - "_param_200080" + 200081: + name: "Experimental product" + alternative_names: + - "_param_200081" + 200082: + name: "Experimental product" + alternative_names: + - "_param_200082" + 200083: + name: "Experimental product" + alternative_names: + - "_param_200083" + 200084: + name: "Experimental product" + alternative_names: + - "_param_200084" + 200085: + name: "Experimental product" + alternative_names: + - "_param_200085" + 200086: + name: "Experimental product" + alternative_names: + - "_param_200086" + 200087: + name: "Experimental product" + alternative_names: + - "_param_200087" + 200088: + name: "Experimental product" + alternative_names: + - "_param_200088" + 200089: + name: "Experimental product" + alternative_names: + - "_param_200089" + 200090: + name: "Experimental product" + alternative_names: + - "_param_200090" + 200091: + name: "Experimental product" + alternative_names: + - "_param_200091" + 200092: + name: "Experimental product" + alternative_names: + - "_param_200092" + 200093: + name: "Experimental product" + alternative_names: + - "_param_200093" + 200094: + name: "Experimental product" + alternative_names: + - "_param_200094" + 200095: + name: "Experimental product" + alternative_names: + - "_param_200095" + 200096: + name: "Experimental product" + alternative_names: + - "_param_200096" + 200097: + name: "Experimental product" + alternative_names: + - "_param_200097" + 200098: + name: "Experimental product" + alternative_names: + - "_param_200098" + 200099: + name: "Experimental product" + alternative_names: + - "_param_200099" + 200100: + name: "Experimental product" + alternative_names: + - "_param_200100" + 200101: + name: "Experimental product" + alternative_names: + - "_param_200101" + 200102: + name: "Experimental product" + alternative_names: + - "_param_200102" + 200103: + name: "Experimental product" + alternative_names: + - "_param_200103" + 200104: + name: "Experimental product" + alternative_names: + - "_param_200104" + 200105: + name: "Experimental product" + alternative_names: + - "_param_200105" + 200106: + name: "Experimental product" + alternative_names: + - "_param_200106" + 200107: + name: "Experimental product" + alternative_names: + - "_param_200107" + 200108: + name: "Experimental product" + alternative_names: + - "_param_200108" + 200109: + name: "Experimental product" + alternative_names: + - "_param_200109" + 200110: + name: "Experimental product" + alternative_names: + - "_param_200110" + 200111: + name: "Experimental product" + alternative_names: + - "_param_200111" + 200112: + name: "Experimental product" + alternative_names: + - "_param_200112" + 200113: + name: "Experimental product" + alternative_names: + - "_param_200113" + 200114: + name: "Experimental product" + alternative_names: + - "_param_200114" + 200115: + name: "Experimental product" + alternative_names: + - "_param_200115" + 200116: + name: "Experimental product" + alternative_names: + - "_param_200116" + 200117: + name: "Experimental product" + alternative_names: + - "_param_200117" + 200118: + name: "Experimental product" + alternative_names: + - "_param_200118" + 200119: + name: "Experimental product" + alternative_names: + - "_param_200119" + 200120: + name: "Experimental product" + alternative_names: + - "_param_200120" + 200121: + name: "Maximum temperature at 2 metres difference" + alternative_names: + - "mx2t6diff" + 200122: + name: "Minimum temperature at 2 metres difference" + alternative_names: + - "mn2t6diff" + 200123: + name: "10 metre wind gust in the last 6 hours difference" + alternative_names: + - "10fg6diff" + 200125: + name: "Vertically integrated total energy" + alternative_names: + - "_param_200125" + 200126: + name: "Generic parameter for sensitive area prediction" + alternative_names: + - "_param_200126" + 200127: + name: "Atmospheric tide difference" + alternative_names: + - "atdiff" + 200128: + name: "Budget values difference" + alternative_names: + - "bvdiff" + 200129: + name: "Geopotential difference" + alternative_names: + - "zdiff" + 200130: + name: "Temperature difference" + alternative_names: + - "tdiff" + 200131: + name: "U component of wind difference" + alternative_names: + - "udiff" + 200132: + name: "V component of wind difference" + alternative_names: + - "vdiff" + 200133: + name: "Specific humidity difference" + alternative_names: + - "qdiff" + 200134: + name: "Surface pressure difference" + alternative_names: + - "spdiff" + 200135: + name: "Vertical velocity (pressure) difference" + alternative_names: + - "wdiff" + 200136: + name: "Total column water difference" + alternative_names: + - "tcwdiff" + 200137: + name: "Total column water vapour difference" + alternative_names: + - "tcwvdiff" + 200138: + name: "Vorticity (relative) difference" + alternative_names: + - "vodiff" + 200139: + name: "Soil temperature level 1 difference" + alternative_names: + - "stl1diff" + 200140: + name: "Soil wetness level 1 difference" + alternative_names: + - "swl1diff" + 200141: + name: "Snow depth difference" + alternative_names: + - "sddiff" + 200142: + name: "Stratiform precipitation (large-scale precipitation) difference" + alternative_names: + - "lspdiff" + 200143: + name: "Convective precipitation difference" + alternative_names: + - "cpdiff" + 200144: + name: "Snowfall (convective + stratiform) difference" + alternative_names: + - "sfdiff" + 200145: + name: "Boundary layer dissipation difference" + alternative_names: + - "blddiff" + 200146: + name: "Surface sensible heat flux difference" + alternative_names: + - "sshfdiff" + 200147: + name: "Surface latent heat flux difference" + alternative_names: + - "slhfdiff" + 200148: + name: "Charnock difference" + alternative_names: + - "chnkdiff" + 200149: + name: "Surface net radiation difference" + alternative_names: + - "snrdiff" + 200150: + name: "Top net radiation difference" + alternative_names: + - "tnrdiff" + 200151: + name: "Mean sea level pressure difference" + alternative_names: + - "msldiff" + 200152: + name: "Logarithm of surface pressure difference" + alternative_names: + - "lnspdiff" + 200153: + name: "Short-wave heating rate difference" + alternative_names: + - "swhrdiff" + 200154: + name: "Long-wave heating rate difference" + alternative_names: + - "lwhrdiff" + 200155: + name: "Divergence difference" + alternative_names: + - "ddiff" + 200156: + name: "Height difference" + alternative_names: + - "ghdiff" + 200157: + name: "Relative humidity difference" + alternative_names: + - "rdiff" + 200158: + name: "Tendency of surface pressure difference" + alternative_names: + - "tspdiff" + 200159: + name: "Boundary layer height difference" + alternative_names: + - "blhdiff" + 200160: + name: "Standard deviation of orography difference" + alternative_names: + - "sdordiff" + 200161: + name: "Anisotropy of sub-gridscale orography difference" + alternative_names: + - "isordiff" + 200162: + name: "Angle of sub-gridscale orography difference" + alternative_names: + - "anordiff" + 200163: + name: "Slope of sub-gridscale orography difference" + alternative_names: + - "slordiff" + 200164: + name: "Total cloud cover difference" + alternative_names: + - "tccdiff" + 200165: + name: "10 metre u wind component difference" + alternative_names: + - "10udiff" + 200166: + name: "10 metre v wind component difference" + alternative_names: + - "10vdiff" + 200167: + name: "2 metre temperature difference" + alternative_names: + - "2tdiff" + 200168: + name: "2 metre dewpoint temperature difference" + alternative_names: + - "2ddiff" + 200169: + name: "Surface solar radiation downwards difference" + alternative_names: + - "ssrddiff" + 200170: + name: "Soil temperature level 2 difference" + alternative_names: + - "stl2diff" + 200171: + name: "Soil wetness level 2 difference" + alternative_names: + - "swl2diff" + 200172: + name: "Land-sea mask difference" + alternative_names: + - "lsmdiff" + 200173: + name: "Surface roughness difference" + alternative_names: + - "srdiff" + 200174: + name: "Albedo difference" + alternative_names: + - "aldiff" + 200175: + name: "Surface thermal radiation downwards difference" + alternative_names: + - "strddiff" + 200176: + name: "Surface net solar radiation difference" + alternative_names: + - "ssrdiff" + 200177: + name: "Surface net thermal radiation difference" + alternative_names: + - "strdiff" + 200178: + name: "Top net solar radiation difference" + alternative_names: + - "tsrdiff" + 200179: + name: "Top net thermal radiation difference" + alternative_names: + - "ttrdiff" + 200180: + name: "East-west surface stress difference" + alternative_names: + - "ewssdiff" + 200181: + name: "North-south surface stress difference" + alternative_names: + - "nsssdiff" + 200182: + name: "Evaporation difference" + alternative_names: + - "ediff" + 200183: + name: "Soil temperature level 3 difference" + alternative_names: + - "stl3diff" + 200184: + name: "Soil wetness level 3 difference" + alternative_names: + - "swl3diff" + 200185: + name: "Convective cloud cover difference" + alternative_names: + - "cccdiff" + 200186: + name: "Low cloud cover difference" + alternative_names: + - "lccdiff" + 200187: + name: "Medium cloud cover difference" + alternative_names: + - "mccdiff" + 200188: + name: "High cloud cover difference" + alternative_names: + - "hccdiff" + 200189: + name: "Sunshine duration difference" + alternative_names: + - "sunddiff" + 200190: + name: "East-west component of sub-gridscale orographic variance difference" + alternative_names: + - "ewovdiff" + 200191: + name: "North-south component of sub-gridscale orographic variance difference" + alternative_names: + - "nsovdiff" + 200192: + name: "North-west/south-east component of sub-gridscale orographic variance difference" + alternative_names: + - "nwovdiff" + 200193: + name: "North-east/south-west component of sub-gridscale orographic variance difference" + alternative_names: + - "neovdiff" + 200194: + name: "Brightness temperature difference" + alternative_names: + - "btmpdiff" + 200195: + name: "Longitudinal component of gravity wave stress difference" + alternative_names: + - "lgwsdiff" + 200196: + name: "Meridional component of gravity wave stress difference" + alternative_names: + - "mgwsdiff" + 200197: + name: "Gravity wave dissipation difference" + alternative_names: + - "gwddiff" + 200198: + name: "Skin reservoir content difference" + alternative_names: + - "srcdiff" + 200199: + name: "Vegetation fraction difference" + alternative_names: + - "vegdiff" + 200200: + name: "Variance of sub-gridscale orography difference" + alternative_names: + - "vsodiff" + 200201: + name: "Maximum temperature at 2 metres since previous post-processing difference" + alternative_names: + - "mx2tdiff" + 200202: + name: "Minimum temperature at 2 metres since previous post-processing difference" + alternative_names: + - "mn2tdiff" + 200203: + name: "Ozone mass mixing ratio difference" + alternative_names: + - "o3diff" + 200204: + name: "Precipitation analysis weights difference" + alternative_names: + - "pawdiff" + 200205: + name: "Runoff difference" + alternative_names: + - "rodiff" + 200206: + name: "Total column ozone difference" + alternative_names: + - "tco3diff" + 200207: + name: "10 metre wind speed difference" + alternative_names: + - "10sidiff" + 200208: + name: "Top net solar radiation, clear sky difference" + alternative_names: + - "tsrcdiff" + 200209: + name: "Top net thermal radiation, clear sky difference" + alternative_names: + - "ttrcdiff" + 200210: + name: "Surface net solar radiation, clear sky difference" + alternative_names: + - "ssrcdiff" + 200211: + name: "Surface net thermal radiation, clear sky difference" + alternative_names: + - "strcdiff" + 200212: + name: "Toa incident solar radiation difference" + alternative_names: + - "tisrdiff" + 200214: + name: "Diabatic heating by radiation difference" + alternative_names: + - "dhrdiff" + 200215: + name: "Diabatic heating by vertical diffusion difference" + alternative_names: + - "dhvddiff" + 200216: + name: "Diabatic heating by cumulus convection difference" + alternative_names: + - "dhccdiff" + 200217: + name: "Diabatic heating large-scale condensation difference" + alternative_names: + - "dhlcdiff" + 200218: + name: "Vertical diffusion of zonal wind difference" + alternative_names: + - "vdzwdiff" + 200219: + name: "Vertical diffusion of meridional wind difference" + alternative_names: + - "vdmwdiff" + 200220: + name: "East-west gravity wave drag tendency difference" + alternative_names: + - "ewgddiff" + 200221: + name: "North-south gravity wave drag tendency difference" + alternative_names: + - "nsgddiff" + 200222: + name: "Convective tendency of zonal wind difference" + alternative_names: + - "ctzwdiff" + 200223: + name: "Convective tendency of meridional wind difference" + alternative_names: + - "ctmwdiff" + 200224: + name: "Vertical diffusion of humidity difference" + alternative_names: + - "vdhdiff" + 200225: + name: "Humidity tendency by cumulus convection difference" + alternative_names: + - "htccdiff" + 200226: + name: "Humidity tendency by large-scale condensation difference" + alternative_names: + - "htlcdiff" + 200227: + name: "Change from removal of negative humidity difference" + alternative_names: + - "crnhdiff" + 200228: + name: "Total precipitation difference" + alternative_names: + - "tpdiff" + 200229: + name: "Instantaneous x surface stress difference" + alternative_names: + - "iewsdiff" + 200230: + name: "Instantaneous y surface stress difference" + alternative_names: + - "inssdiff" + 200231: + name: "Instantaneous surface heat flux difference" + alternative_names: + - "ishfdiff" + 200232: + name: "Instantaneous moisture flux difference" + alternative_names: + - "iediff" + 200233: + name: "Apparent surface humidity difference" + alternative_names: + - "asqdiff" + 200234: + name: "Logarithm of surface roughness length for heat difference" + alternative_names: + - "lsrhdiff" + 200235: + name: "Skin temperature difference" + alternative_names: + - "sktdiff" + 200236: + name: "Soil temperature level 4 difference" + alternative_names: + - "stl4diff" + 200237: + name: "Soil wetness level 4 difference" + alternative_names: + - "swl4diff" + 200238: + name: "Temperature of snow layer difference" + alternative_names: + - "tsndiff" + 200239: + name: "Convective snowfall difference" + alternative_names: + - "csfdiff" + 200240: + name: "Large scale snowfall difference" + alternative_names: + - "lsfdiff" + 200241: + name: "Accumulated cloud fraction tendency difference" + alternative_names: + - "acfdiff" + 200242: + name: "Accumulated liquid water tendency difference" + alternative_names: + - "alwdiff" + 200243: + name: "Forecast albedo difference" + alternative_names: + - "faldiff" + 200244: + name: "Forecast surface roughness difference" + alternative_names: + - "fsrdiff" + 200245: + name: "Forecast logarithm of surface roughness for heat difference" + alternative_names: + - "flsrdiff" + 200246: + name: "Specific cloud liquid water content difference" + alternative_names: + - "clwcdiff" + 200247: + name: "Specific cloud ice water content difference" + alternative_names: + - "ciwcdiff" + 200248: + name: "Cloud cover difference" + alternative_names: + - "ccdiff" + 200249: + name: "Accumulated ice water tendency difference" + alternative_names: + - "aiwdiff" + 200250: + name: "Ice age difference" + alternative_names: + - "icediff" + 200251: + name: "Adiabatic tendency of temperature difference" + alternative_names: + - "attediff" + 200252: + name: "Adiabatic tendency of humidity difference" + alternative_names: + - "athediff" + 200253: + name: "Adiabatic tendency of zonal wind difference" + alternative_names: + - "atzediff" + 200254: + name: "Adiabatic tendency of meridional wind difference" + alternative_names: + - "atmwdiff" + 200255: + name: "Indicates a missing value" + alternative_names: + - "_param_200255" + 201001: + name: "Downward shortwave radiant flux density" + alternative_names: + - "_param_201001" + 201002: + name: "Upward shortwave radiant flux density" + alternative_names: + - "_param_201002" + 201003: + name: "Downward longwave radiant flux density" + alternative_names: + - "_param_201003" + 201004: + name: "Upward longwave radiant flux density" + alternative_names: + - "_param_201004" + 201005: + name: "Downwd photosynthetic active radiant flux density" + alternative_names: + - "apab_s" + 201006: + name: "Net shortwave flux" + alternative_names: + - "_param_201006" + 201007: + name: "Net longwave flux" + alternative_names: + - "_param_201007" + 201008: + name: "Total net radiative flux density" + alternative_names: + - "_param_201008" + 201009: + name: "Downw shortw radiant flux density, cloudfree part" + alternative_names: + - "_param_201009" + 201010: + name: "Upw shortw radiant flux density, cloudy part" + alternative_names: + - "_param_201010" + 201011: + name: "Downw longw radiant flux density, cloudfree part" + alternative_names: + - "_param_201011" + 201012: + name: "Upw longw radiant flux density, cloudy part" + alternative_names: + - "_param_201012" + 201013: + name: "Shortwave radiative heating rate" + alternative_names: + - "sohr_rad" + 201014: + name: "Longwave radiative heating rate" + alternative_names: + - "thhr_rad" + 201015: + name: "Total radiative heating rate" + alternative_names: + - "_param_201015" + 201016: + name: "Soil heat flux, surface" + alternative_names: + - "_param_201016" + 201017: + name: "Soil heat flux, bottom of layer" + alternative_names: + - "_param_201017" + 201029: + name: "Fractional cloud cover" + alternative_names: + - "clc" + 201030: + name: "Cloud cover, grid scale" + alternative_names: + - "_param_201030" + 201031: + name: "Specific cloud water content" + alternative_names: + - "qc" + 201032: + name: "Cloud water content, grid scale, vert integrated" + alternative_names: + - "_param_201032" + 201033: + name: "Specific cloud ice content, grid scale" + alternative_names: + - "qi" + 201034: + name: "Cloud ice content, grid scale, vert integrated" + alternative_names: + - "_param_201034" + 201035: + name: "Specific rainwater content, grid scale" + alternative_names: + - "_param_201035" + 201036: + name: "Specific snow content, grid scale" + alternative_names: + - "_param_201036" + 201037: + name: "Specific rainwater content, gs, vert. integrated" + alternative_names: + - "_param_201037" + 201038: + name: "Specific snow content, gs, vert. integrated" + alternative_names: + - "_param_201038" + 201041: + name: "Total column water" + alternative_names: + - "twater" + 201042: + name: "Vert. integral of divergence of tot. water content" + alternative_names: + - "_param_201042" + 201050: + name: "Cloud covers ch_cm_cl (000...888)" + alternative_names: + - "ch_cm_cl" + 201051: + name: "Cloud cover ch (0..8)" + alternative_names: + - "_param_201051" + 201052: + name: "Cloud cover cm (0..8)" + alternative_names: + - "_param_201052" + 201053: + name: "Cloud cover cl (0..8)" + alternative_names: + - "_param_201053" + 201054: + name: "Total cloud cover (0..8)" + alternative_names: + - "_param_201054" + 201055: + name: "Fog (0..8)" + alternative_names: + - "_param_201055" + 201056: + name: "Fog" + alternative_names: + - "_param_201056" + 201060: + name: "Cloud cover, convective cirrus" + alternative_names: + - "_param_201060" + 201061: + name: "Specific cloud water content, convective clouds" + alternative_names: + - "_param_201061" + 201062: + name: "Cloud water content, conv clouds, vert integrated" + alternative_names: + - "_param_201062" + 201063: + name: "Specific cloud ice content, convective clouds" + alternative_names: + - "_param_201063" + 201064: + name: "Cloud ice content, conv clouds, vert integrated" + alternative_names: + - "_param_201064" + 201065: + name: "Convective mass flux" + alternative_names: + - "_param_201065" + 201066: + name: "Updraft velocity, convection" + alternative_names: + - "_param_201066" + 201067: + name: "Entrainment parameter, convection" + alternative_names: + - "_param_201067" + 201068: + name: "Cloud base, convective clouds (above msl)" + alternative_names: + - "hbas_con" + 201069: + name: "Cloud top, convective clouds (above msl)" + alternative_names: + - "htop_con" + 201070: + name: "Convective layers (00...77) (bke)" + alternative_names: + - "_param_201070" + 201071: + name: "Ko-index" + alternative_names: + - "_param_201071" + 201072: + name: "Convection base index" + alternative_names: + - "bas_con" + 201073: + name: "Convection top index" + alternative_names: + - "top_con" + 201074: + name: "Convective temperature tendency" + alternative_names: + - "dt_con" + 201075: + name: "Convective tendency of specific humidity" + alternative_names: + - "dqv_con" + 201076: + name: "Convective tendency of total heat" + alternative_names: + - "_param_201076" + 201077: + name: "Convective tendency of total water" + alternative_names: + - "_param_201077" + 201078: + name: "Convective momentum tendency (x-component)" + alternative_names: + - "du_con" + 201079: + name: "Convective momentum tendency (y-component)" + alternative_names: + - "dv_con" + 201080: + name: "Convective vorticity tendency" + alternative_names: + - "_param_201080" + 201081: + name: "Convective divergence tendency" + alternative_names: + - "_param_201081" + 201082: + name: "Top of dry convection (above msl)" + alternative_names: + - "htop_dc" + 201083: + name: "Dry convection top index" + alternative_names: + - "_param_201083" + 201084: + name: "Height of 0 degree celsius isotherm above msl" + alternative_names: + - "hzerocl" + 201085: + name: "Height of snow-fall limit" + alternative_names: + - "snowlmt" + 201099: + name: "Spec. content of precip. particles" + alternative_names: + - "qrs_gsp" + 201100: + name: "Surface precipitation rate, rain, grid scale" + alternative_names: + - "prr_gsp" + 201101: + name: "Surface precipitation rate, snow, grid scale" + alternative_names: + - "prs_gsp" + 201102: + name: "Surface precipitation amount, rain, grid scale" + alternative_names: + - "rain_gsp" + 201111: + name: "Surface precipitation rate, rain, convective" + alternative_names: + - "prr_con" + 201112: + name: "Surface precipitation rate, snow, convective" + alternative_names: + - "prs_con" + 201113: + name: "Surface precipitation amount, rain, convective" + alternative_names: + - "rain_con" + 201139: + name: "Deviation of pressure from reference value" + alternative_names: + - "pp" + 201150: + name: "Coefficient of horizontal diffusion" + alternative_names: + - "_param_201150" + 201187: + name: "Maximum wind velocity" + alternative_names: + - "vmax_10m" + 201200: + name: "Water content of interception store" + alternative_names: + - "w_i" + 201203: + name: "Snow temperature" + alternative_names: + - "t_snow" + 201215: + name: "Ice surface temperature" + alternative_names: + - "t_ice" + 201241: + name: "Convective available potential energy" + alternative_names: + - "cape_con" + 201255: + name: "Indicates a missing value" + alternative_names: + - "_param_201255" + 210001: + name: "Sea salt aerosol (0.03 - 0.5 um) mixing ratio" + alternative_names: + - "aermr01" + 210002: + name: "Sea salt aerosol (0.5 - 5 um) mixing ratio" + alternative_names: + - "aermr02" + 210003: + name: "Sea salt aerosol (5 - 20 um) mixing ratio" + alternative_names: + - "aermr03" + 210004: + name: "Dust aerosol (0.03 - 0.55 um) mixing ratio" + alternative_names: + - "aermr04" + 210005: + name: "Dust aerosol (0.55 - 0.9 um) mixing ratio" + alternative_names: + - "aermr05" + 210006: + name: "Dust aerosol (0.9 - 20 um) mixing ratio" + alternative_names: + - "aermr06" + 210007: + name: "Hydrophilic organic matter aerosol mixing ratio" + alternative_names: + - "aermr07" + 210008: + name: "Hydrophobic organic matter aerosol mixing ratio" + alternative_names: + - "aermr08" + 210009: + name: "Hydrophilic black carbon aerosol mixing ratio" + alternative_names: + - "aermr09" + 210010: + name: "Hydrophobic black carbon aerosol mixing ratio" + alternative_names: + - "aermr10" + 210011: + name: "Sulphate aerosol mixing ratio" + alternative_names: + - "aermr11" + 210012: + name: "So2 precursor mixing ratio" + alternative_names: + - "aermr12" + 210013: + name: "Volcanic ash aerosol mixing ratio" + alternative_names: + - "aermr13" + 210014: + name: "Volcanic sulphate aerosol mixing ratio" + alternative_names: + - "aermr14" + 210015: + name: "Volcanic so2 precursor mixing ratio" + alternative_names: + - "aermr15" + 210016: + name: "Aerosol type 1 source/gain accumulated" + alternative_names: + - "aergn01" + 210017: + name: "Aerosol type 2 source/gain accumulated" + alternative_names: + - "aergn02" + 210018: + name: "Aerosol type 3 source/gain accumulated" + alternative_names: + - "aergn03" + 210019: + name: "Aerosol type 4 source/gain accumulated" + alternative_names: + - "aergn04" + 210020: + name: "Aerosol type 5 source/gain accumulated" + alternative_names: + - "aergn05" + 210021: + name: "Aerosol type 6 source/gain accumulated" + alternative_names: + - "aergn06" + 210022: + name: "Aerosol type 7 source/gain accumulated" + alternative_names: + - "aergn07" + 210023: + name: "Aerosol type 8 source/gain accumulated" + alternative_names: + - "aergn08" + 210024: + name: "Aerosol type 9 source/gain accumulated" + alternative_names: + - "aergn09" + 210025: + name: "Aerosol type 10 source/gain accumulated" + alternative_names: + - "aergn10" + 210026: + name: "Aerosol type 11 source/gain accumulated" + alternative_names: + - "aergn11" + 210027: + name: "Aerosol type 12 source/gain accumulated" + alternative_names: + - "aergn12" + 210028: + name: "So4 aerosol precursor mass mixing ratio" + alternative_names: + - "aerpr03" + 210029: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 1" + alternative_names: + - "aerwv01" + 210030: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 2" + alternative_names: + - "aerwv02" + 210031: + name: "Aerosol type 1 sink/loss accumulated" + alternative_names: + - "aerls01" + 210032: + name: "Aerosol type 2 sink/loss accumulated" + alternative_names: + - "aerls02" + 210033: + name: "Aerosol type 3 sink/loss accumulated" + alternative_names: + - "aerls03" + 210034: + name: "Aerosol type 4 sink/loss accumulated" + alternative_names: + - "aerls04" + 210035: + name: "Aerosol type 5 sink/loss accumulated" + alternative_names: + - "aerls05" + 210036: + name: "Aerosol type 6 sink/loss accumulated" + alternative_names: + - "aerls06" + 210037: + name: "Aerosol type 7 sink/loss accumulated" + alternative_names: + - "aerls07" + 210038: + name: "Aerosol type 8 sink/loss accumulated" + alternative_names: + - "aerls08" + 210039: + name: "Aerosol type 9 sink/loss accumulated" + alternative_names: + - "aerls09" + 210040: + name: "Aerosol type 10 sink/loss accumulated" + alternative_names: + - "aerls10" + 210041: + name: "Aerosol type 11 sink/loss accumulated" + alternative_names: + - "aerls11" + 210042: + name: "Aerosol type 12 sink/loss accumulated" + alternative_names: + - "aerls12" + 210043: + name: "Dms surface emission" + alternative_names: + - "emdms" + 210044: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 3" + alternative_names: + - "aerwv03" + 210045: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 4" + alternative_names: + - "aerwv04" + 210046: + name: "Aerosol precursor mixing ratio" + alternative_names: + - "aerpr" + 210047: + name: "Aerosol small mode mixing ratio" + alternative_names: + - "aersm" + 210048: + name: "Aerosol large mode mixing ratio" + alternative_names: + - "aerlg" + 210049: + name: "Aerosol precursor optical depth" + alternative_names: + - "aodpr" + 210050: + name: "Aerosol small mode optical depth" + alternative_names: + - "aodsm" + 210051: + name: "Aerosol large mode optical depth" + alternative_names: + - "aodlg" + 210052: + name: "Dust emission potential" + alternative_names: + - "aerdep" + 210053: + name: "Lifting threshold speed" + alternative_names: + - "aerlts" + 210054: + name: "Soil clay content" + alternative_names: + - "aerscc" + 210055: + name: "Experimental product" + alternative_names: + - "_param_210055" + 210056: + name: "Experimental product" + alternative_names: + - "_param_210056" + 210057: + name: "Mixing ration of organic carbon aerosol, nucleation mode" + alternative_names: + - "ocnuc" + 210058: + name: "Monoterpene precursor mixing ratio" + alternative_names: + - "monot" + 210059: + name: "Secondary organic precursor mixing ratio" + alternative_names: + - "soapr" + 210060: + name: "Injection height (from is4fires)" + alternative_names: + - "injh" + 210061: + name: "Carbon dioxide mass mixing ratio" + alternative_names: + - "co2" + 210062: + name: "Methane" + alternative_names: + - "ch4" + 210063: + name: "Nitrous oxide" + alternative_names: + - "n2o" + 210064: + name: "Co2 column-mean molar fraction" + alternative_names: + - "tcco2" + 210065: + name: "Ch4 column-mean molar fraction" + alternative_names: + - "tcch4" + 210066: + name: "Total column nitrous oxide" + alternative_names: + - "tcn2o" + 210067: + name: "Ocean flux of carbon dioxide" + alternative_names: + - "co2of" + 210068: + name: "Natural biosphere flux of carbon dioxide" + alternative_names: + - "co2nbf" + 210069: + name: "Anthropogenic emissions of carbon dioxide" + alternative_names: + - "co2apf" + 210070: + name: "Methane surface fluxes" + alternative_names: + - "ch4f" + 210071: + name: "Methane loss rate due to radical hydroxyl (oh)" + alternative_names: + - "kch4" + 210072: + name: "Particulate matter d <= 1 um" + alternative_names: + - "pm1" + 210073: + name: "Particulate matter d <= 2.5 um" + alternative_names: + - "pm2p5" + 210074: + name: "Particulate matter d <= 10 um" + alternative_names: + - "pm10" + 210079: + name: "Wildfire viewing angle of observation" + alternative_names: + - "vafire" + 210080: + name: "Wildfire flux of carbon dioxide" + alternative_names: + - "co2fire" + 210081: + name: "Wildfire flux of carbon monoxide" + alternative_names: + - "cofire" + 210082: + name: "Wildfire flux of methane" + alternative_names: + - "ch4fire" + 210083: + name: "Wildfire flux of non-methane hydro-carbons" + alternative_names: + - "nmhcfire" + 210084: + name: "Wildfire flux of hydrogen" + alternative_names: + - "h2fire" + 210085: + name: "Wildfire flux of nitrogen oxides nox" + alternative_names: + - "noxfire" + 210086: + name: "Wildfire flux of nitrous oxide" + alternative_names: + - "n2ofire" + 210087: + name: "Wildfire flux of particulate matter pm2.5" + alternative_names: + - "pm2p5fire" + 210088: + name: "Wildfire flux of total particulate matter" + alternative_names: + - "tpmfire" + 210089: + name: "Wildfire flux of total carbon in aerosols" + alternative_names: + - "tcfire" + 210090: + name: "Wildfire flux of organic carbon" + alternative_names: + - "ocfire" + 210091: + name: "Wildfire flux of black carbon" + alternative_names: + - "bcfire" + 210092: + name: "Wildfire overall flux of burnt carbon" + alternative_names: + - "cfire" + 210093: + name: "Wildfire fraction of c4 plants" + alternative_names: + - "c4ffire" + 210094: + name: "Wildfire vegetation map index" + alternative_names: + - "vegfire" + 210095: + name: "Wildfire combustion completeness" + alternative_names: + - "ccfire" + 210096: + name: "Wildfire fuel load: carbon per unit area" + alternative_names: + - "flfire" + 210097: + name: "Wildfire fraction of area observed" + alternative_names: + - "offire" + 210098: + name: "Number of positive frp pixels per grid cell" + alternative_names: + - "nofrp" + 210099: + name: "Wildfire radiative power" + alternative_names: + - "frpfire" + 210100: + name: "Wildfire combustion rate" + alternative_names: + - "crfire" + 210101: + name: "Wildfire radiative power maximum" + alternative_names: + - "maxfrpfire" + 210102: + name: "Wildfire flux of sulfur dioxide" + alternative_names: + - "so2fire" + 210103: + name: "Wildfire flux of methanol (ch3oh)" + alternative_names: + - "ch3ohfire" + 210104: + name: "Wildfire flux of ethanol (c2h5oh)" + alternative_names: + - "c2h5ohfire" + 210105: + name: "Wildfire flux of propane (c3h8)" + alternative_names: + - "c3h8fire" + 210106: + name: "Wildfire flux of ethene (c2h4)" + alternative_names: + - "c2h4fire" + 210107: + name: "Wildfire flux of propene (c3h6)" + alternative_names: + - "c3h6fire" + 210108: + name: "Wildfire flux of isoprene (c5h8)" + alternative_names: + - "c5h8fire" + 210109: + name: "Wildfire flux of terpenes (c5h8)n" + alternative_names: + - "terpenesfire" + 210110: + name: "Wildfire flux of toluene_lump (c7h8+ c6h6 + c8h10)" + alternative_names: + - "toluenefire" + 210111: + name: "Wildfire flux of higher alkenes (cnh2n, c>=4)" + alternative_names: + - "hialkenesfire" + 210112: + name: "Wildfire flux of higher alkanes (cnh2n+2, c>=4)" + alternative_names: + - "hialkanesfire" + 210113: + name: "Wildfire flux of formaldehyde (ch2o)" + alternative_names: + - "ch2ofire" + 210114: + name: "Wildfire flux of acetaldehyde (c2h4o)" + alternative_names: + - "c2h4ofire" + 210115: + name: "Wildfire flux of acetone (c3h6o)" + alternative_names: + - "c3h6ofire" + 210116: + name: "Wildfire flux of ammonia (nh3)" + alternative_names: + - "nh3fire" + 210117: + name: "Wildfire flux of dimethyl sulfide (dms) (c2h6s)" + alternative_names: + - "c2h6sfire" + 210118: + name: "Wildfire flux of ethane (c2h6)" + alternative_names: + - "c2h6fire" + 210119: + name: "Mean height of maximum injection" + alternative_names: + - "mami" + 210120: + name: "Plume top height above surface" + alternative_names: + - "apt" + 210121: + name: "Nitrogen dioxide mass mixing ratio" + alternative_names: + - "no2" + 210122: + name: "Sulphur dioxide mass mixing ratio" + alternative_names: + - "so2" + 210123: + name: "Carbon monoxide mass mixing ratio" + alternative_names: + - "co" + 210124: + name: "Formaldehyde" + alternative_names: + - "hcho" + 210125: + name: "Total column nitrogen dioxide" + alternative_names: + - "tcno2" + 210126: + name: "Total column sulphur dioxide" + alternative_names: + - "tcso2" + 210127: + name: "Total column carbon monoxide" + alternative_names: + - "tcco" + 210128: + name: "Total column formaldehyde" + alternative_names: + - "tchcho" + 210129: + name: "Nitrogen oxides" + alternative_names: + - "nox" + 210130: + name: "Total column nitrogen oxides" + alternative_names: + - "tcnox" + 210131: + name: "Reactive tracer 1 mass mixing ratio" + alternative_names: + - "grg1" + 210132: + name: "Total column grg tracer 1" + alternative_names: + - "tcgrg1" + 210133: + name: "Reactive tracer 2 mass mixing ratio" + alternative_names: + - "grg2" + 210134: + name: "Total column grg tracer 2" + alternative_names: + - "tcgrg2" + 210135: + name: "Reactive tracer 3 mass mixing ratio" + alternative_names: + - "grg3" + 210136: + name: "Total column grg tracer 3" + alternative_names: + - "tcgrg3" + 210137: + name: "Reactive tracer 4 mass mixing ratio" + alternative_names: + - "grg4" + 210138: + name: "Total column grg tracer 4" + alternative_names: + - "tcgrg4" + 210139: + name: "Reactive tracer 5 mass mixing ratio" + alternative_names: + - "grg5" + 210140: + name: "Total column grg tracer 5" + alternative_names: + - "tcgrg5" + 210141: + name: "Reactive tracer 6 mass mixing ratio" + alternative_names: + - "grg6" + 210142: + name: "Total column grg tracer 6" + alternative_names: + - "tcgrg6" + 210143: + name: "Reactive tracer 7 mass mixing ratio" + alternative_names: + - "grg7" + 210144: + name: "Total column grg tracer 7" + alternative_names: + - "tcgrg7" + 210145: + name: "Reactive tracer 8 mass mixing ratio" + alternative_names: + - "grg8" + 210146: + name: "Total column grg tracer 8" + alternative_names: + - "tcgrg8" + 210147: + name: "Reactive tracer 9 mass mixing ratio" + alternative_names: + - "grg9" + 210148: + name: "Total column grg tracer 9" + alternative_names: + - "tcgrg9" + 210149: + name: "Reactive tracer 10 mass mixing ratio" + alternative_names: + - "grg10" + 210150: + name: "Total column grg tracer 10" + alternative_names: + - "tcgrg10" + 210151: + name: "Surface flux nitrogen oxides" + alternative_names: + - "sfnox" + 210152: + name: "Surface flux nitrogen dioxide" + alternative_names: + - "sfno2" + 210153: + name: "Surface flux sulphur dioxide" + alternative_names: + - "sfso2" + 210154: + name: "Surface flux carbon monoxide" + alternative_names: + - "sfco2" + 210155: + name: "Surface flux formaldehyde" + alternative_names: + - "sfhcho" + 210156: + name: "Surface flux gems ozone" + alternative_names: + - "sfgo3" + 210157: + name: "Surface flux reactive tracer 1" + alternative_names: + - "sfgr1" + 210158: + name: "Surface flux reactive tracer 2" + alternative_names: + - "sfgr2" + 210159: + name: "Surface flux reactive tracer 3" + alternative_names: + - "sfgr3" + 210160: + name: "Surface flux reactive tracer 4" + alternative_names: + - "sfgr4" + 210161: + name: "Surface flux reactive tracer 5" + alternative_names: + - "sfgr5" + 210162: + name: "Surface flux reactive tracer 6" + alternative_names: + - "sfgr6" + 210163: + name: "Surface flux reactive tracer 7" + alternative_names: + - "sfgr7" + 210164: + name: "Surface flux reactive tracer 8" + alternative_names: + - "sfgr8" + 210165: + name: "Surface flux reactive tracer 9" + alternative_names: + - "sfgr9" + 210166: + name: "Surface flux reactive tracer 10" + alternative_names: + - "sfgr10" + 210167: + name: "Wildfire day-time radiative power" + alternative_names: + - "frpdayfire" + 210169: + name: "Wildfire night-time radiative power" + alternative_names: + - "frpngtfire" + 210170: + name: "Volcanic sulfur dioxide mass mixing ratio" + alternative_names: + - "vso2" + 210177: + name: "Wildfire day-time inverse variance of radiative power" + alternative_names: + - "frpdayivar" + 210179: + name: "Wildfire night-time inverse variance of radiative power" + alternative_names: + - "frpngtivar" + 210181: + name: "Radon" + alternative_names: + - "ra" + 210182: + name: "Sulphur hexafluoride" + alternative_names: + - "sf6" + 210183: + name: "Total column radon" + alternative_names: + - "tcra" + 210184: + name: "Total column sulphur hexafluoride" + alternative_names: + - "tcsf6" + 210185: + name: "Anthropogenic emissions of sulphur hexafluoride" + alternative_names: + - "sf6apf" + 210186: + name: "Uv visible albedo for direct radiation, isotropic component (climatological)" + alternative_names: + - "aluvpi" + 210187: + name: "Uv visible albedo for direct radiation, volumetric component (climatological)" + alternative_names: + - "aluvpv" + 210188: + name: "Uv visible albedo for direct radiation, geometric component (climatological)" + alternative_names: + - "aluvpg" + 210189: + name: "Near ir albedo for direct radiation, isotropic component (climatological)" + alternative_names: + - "alnipi" + 210190: + name: "Near ir albedo for direct radiation, volumetric component (climatological)" + alternative_names: + - "alnipv" + 210191: + name: "Near ir albedo for direct radiation, geometric component (climatological)" + alternative_names: + - "alnipg" + 210192: + name: "Uv visible albedo for diffuse radiation, isotropic component (climatological)" + alternative_names: + - "aluvdi" + 210193: + name: "Uv visible albedo for diffuse radiation, volumetric component (climatological)" + alternative_names: + - "aluvdv" + 210194: + name: "Uv visible albedo for diffuse radiation, geometric component (climatological)" + alternative_names: + - "aluvdg" + 210195: + name: "Near ir albedo for diffuse radiation, isotropic component (climatological)" + alternative_names: + - "alnidi" + 210196: + name: "Near ir albedo for diffuse radiation, volumetric component (climatological)" + alternative_names: + - "alnidv" + 210197: + name: "Near ir albedo for diffuse radiation, geometric component (climatological)" + alternative_names: + - "alnidg" + 210198: + name: "Uv visible albedo for diffuse radiation (climatological)" + alternative_names: + - "aluvd_p" + 210199: + name: "Uv visible albedo for direct radiation (climatological)" + alternative_names: + - "aluvp_p" + 210200: + name: "Uv visible albedo for direct radiation, geometric component (climatological)" + alternative_names: + - "aluvpg_p" + 210201: + name: "Uv visible albedo for direct radiation, isotropic component (climatological)" + alternative_names: + - "aluvpi_p" + 210202: + name: "Uv visible albedo for direct radiation, volumetric component (climatological)" + alternative_names: + - "aluvpv_p" + 210203: + name: "Ozone mass mixing ratio (full chemistry scheme)" + alternative_names: + - "go3" + 210206: + name: "Gems total column ozone" + alternative_names: + - "gtco3" + 210207: + name: "Total aerosol optical depth at 550nm" + alternative_names: + - "aod550" + 210208: + name: "Sea salt aerosol optical depth at 550nm" + alternative_names: + - "ssaod550" + 210209: + name: "Dust aerosol optical depth at 550nm" + alternative_names: + - "duaod550" + 210210: + name: "Organic matter aerosol optical depth at 550nm" + alternative_names: + - "omaod550" + 210211: + name: "Black carbon aerosol optical depth at 550nm" + alternative_names: + - "bcaod550" + 210212: + name: "Sulphate aerosol optical depth at 550nm" + alternative_names: + - "suaod550" + 210213: + name: "Total aerosol optical depth at 469nm" + alternative_names: + - "aod469" + 210214: + name: "Total aerosol optical depth at 670nm" + alternative_names: + - "aod670" + 210215: + name: "Total aerosol optical depth at 865nm" + alternative_names: + - "aod865" + 210216: + name: "Total aerosol optical depth at 1240nm" + alternative_names: + - "aod1240" + 210217: + name: "Total aerosol optical depth at 340 nm" + alternative_names: + - "aod340" + 210218: + name: "Total aerosol optical depth at 355 nm" + alternative_names: + - "aod355" + 210219: + name: "Total aerosol optical depth at 380 nm" + alternative_names: + - "aod380" + 210220: + name: "Total aerosol optical depth at 400 nm" + alternative_names: + - "aod400" + 210221: + name: "Total aerosol optical depth at 440 nm" + alternative_names: + - "aod440" + 210222: + name: "Total aerosol optical depth at 500 nm" + alternative_names: + - "aod500" + 210223: + name: "Total aerosol optical depth at 532 nm" + alternative_names: + - "aod532" + 210224: + name: "Total aerosol optical depth at 645 nm" + alternative_names: + - "aod645" + 210225: + name: "Total aerosol optical depth at 800 nm" + alternative_names: + - "aod800" + 210226: + name: "Total aerosol optical depth at 858 nm" + alternative_names: + - "aod858" + 210227: + name: "Total aerosol optical depth at 1020 nm" + alternative_names: + - "aod1020" + 210228: + name: "Total aerosol optical depth at 1064 nm" + alternative_names: + - "aod1064" + 210229: + name: "Total aerosol optical depth at 1640 nm" + alternative_names: + - "aod1640" + 210230: + name: "Total aerosol optical depth at 2130 nm" + alternative_names: + - "aod2130" + 210231: + name: "Wildfire flux of toluene (c7h8)" + alternative_names: + - "c7h8fire" + 210232: + name: "Wildfire flux of benzene (c6h6)" + alternative_names: + - "c6h6fire" + 210233: + name: "Wildfire flux of xylene (c8h10)" + alternative_names: + - "c8h10fire" + 210234: + name: "Wildfire flux of butenes (c4h8)" + alternative_names: + - "c4h8fire" + 210235: + name: "Wildfire flux of pentenes (c5h10)" + alternative_names: + - "c5h10fire" + 210236: + name: "Wildfire flux of hexene (c6h12)" + alternative_names: + - "c6h12fire" + 210237: + name: "Wildfire flux of octene (c8h16)" + alternative_names: + - "c8h16fire" + 210238: + name: "Wildfire flux of butanes (c4h10)" + alternative_names: + - "c4h10fire" + 210239: + name: "Wildfire flux of pentanes (c5h12)" + alternative_names: + - "c5h12fire" + 210240: + name: "Wildfire flux of hexanes (c6h14)" + alternative_names: + - "c6h14fire" + 210241: + name: "Wildfire flux of heptane (c7h16)" + alternative_names: + - "c7h16fire" + 210242: + name: "Plume bottom height above surface" + alternative_names: + - "apb" + 210243: + name: "Volcanic sulphate aerosol optical depth at 550 nm" + alternative_names: + - "vsuaod550" + 210244: + name: "Volcanic ash optical depth at 550 nm" + alternative_names: + - "vashaod550" + 210245: + name: "Profile of total aerosol dry extinction coefficient" + alternative_names: + - "taedec550" + 210246: + name: "Profile of total aerosol dry absorption coefficient" + alternative_names: + - "taedab550" + 210247: + name: "Nitrate fine mode aerosol mass mixing ratio" + alternative_names: + - "aermr16" + 210248: + name: "Nitrate coarse mode aerosol mass mixing ratio" + alternative_names: + - "aermr17" + 210249: + name: "Ammonium aerosol mass mixing ratio" + alternative_names: + - "aermr18" + 210250: + name: "Nitrate aerosol optical depth at 550 nm" + alternative_names: + - "niaod550" + 210251: + name: "Ammonium aerosol optical depth at 550 nm" + alternative_names: + - "amaod550" + 210252: + name: "Biogenic secondary organic aerosol mass mixing ratio" + alternative_names: + - "aermr19" + 210253: + name: "Anthropogenic secondary organic aerosol mass mixing ratio" + alternative_names: + - "aermr20" + 210260: + name: "Near ir albedo for diffuse radiation (climatological)" + alternative_names: + - "alnid_p" + 210261: + name: "Near ir albedo for direct radiation (climatological)" + alternative_names: + - "alnip_p" + 210262: + name: "Near ir albedo for direct radiation, geometric component (climatological)" + alternative_names: + - "alnipg_p" + 210263: + name: "Near ir albedo for direct radiation, isotropic component (climatological)" + alternative_names: + - "alnipi_p" + 210264: + name: "Near ir albedo for direct radiation, volumetric component (climatological)" + alternative_names: + - "alnipv_p" + 211001: + name: "Sea salt aerosol (0.03 - 0.5 um) mixing ratio" + alternative_names: + - "aermr01diff" + 211002: + name: "Sea salt aerosol (0.5 - 5 um) mixing ratio" + alternative_names: + - "aermr02diff" + 211003: + name: "Sea salt aerosol (5 - 20 um) mixing ratio" + alternative_names: + - "aermr03diff" + 211004: + name: "Dust aerosol (0.03 - 0.55 um) mixing ratio" + alternative_names: + - "aermr04diff" + 211005: + name: "Dust aerosol (0.55 - 0.9 um) mixing ratio" + alternative_names: + - "aermr05diff" + 211006: + name: "Dust aerosol (0.9 - 20 um) mixing ratio" + alternative_names: + - "aermr06diff" + 211007: + name: "Hydrophilic organic matter aerosol mixing ratio" + alternative_names: + - "aermr07diff" + 211008: + name: "Hydrophobic organic matter aerosol mixing ratio" + alternative_names: + - "aermr08diff" + 211009: + name: "Hydrophilic black carbon aerosol mixing ratio" + alternative_names: + - "aermr09diff" + 211010: + name: "Hydrophobic black carbon aerosol mixing ratio" + alternative_names: + - "aermr10diff" + 211011: + name: "Sulphate aerosol mixing ratio" + alternative_names: + - "aermr11diff" + 211012: + name: "Aerosol type 12 mixing ratio" + alternative_names: + - "aermr12diff" + 211013: + name: "Aerosol type 13 mass mixing ratio" + alternative_names: + - "aermr13diff" + 211014: + name: "Aerosol type 14 mass mixing ratio" + alternative_names: + - "aermr14diff" + 211015: + name: "Aerosol type 15 mass mixing ratio" + alternative_names: + - "aermr15diff" + 211016: + name: "Aerosol type 1 source/gain accumulated" + alternative_names: + - "aergn01diff" + 211017: + name: "Aerosol type 2 source/gain accumulated" + alternative_names: + - "aergn02diff" + 211018: + name: "Aerosol type 3 source/gain accumulated" + alternative_names: + - "aergn03diff" + 211019: + name: "Aerosol type 4 source/gain accumulated" + alternative_names: + - "aergn04diff" + 211020: + name: "Aerosol type 5 source/gain accumulated" + alternative_names: + - "aergn05diff" + 211021: + name: "Aerosol type 6 source/gain accumulated" + alternative_names: + - "aergn06diff" + 211022: + name: "Aerosol type 7 source/gain accumulated" + alternative_names: + - "aergn07diff" + 211023: + name: "Aerosol type 8 source/gain accumulated" + alternative_names: + - "aergn08diff" + 211024: + name: "Aerosol type 9 source/gain accumulated" + alternative_names: + - "aergn09diff" + 211025: + name: "Aerosol type 10 source/gain accumulated" + alternative_names: + - "aergn10diff" + 211026: + name: "Aerosol type 11 source/gain accumulated" + alternative_names: + - "aergn11diff" + 211027: + name: "Aerosol type 12 source/gain accumulated" + alternative_names: + - "aergn12diff" + 211028: + name: "So4 aerosol precursor mass mixing ratio" + alternative_names: + - "aerpr03diff" + 211029: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 1" + alternative_names: + - "aerwv01diff" + 211030: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 2" + alternative_names: + - "aerwv02diff" + 211031: + name: "Aerosol type 1 sink/loss accumulated" + alternative_names: + - "aerls01diff" + 211032: + name: "Aerosol type 2 sink/loss accumulated" + alternative_names: + - "aerls02diff" + 211033: + name: "Aerosol type 3 sink/loss accumulated" + alternative_names: + - "aerls03diff" + 211034: + name: "Aerosol type 4 sink/loss accumulated" + alternative_names: + - "aerls04diff" + 211035: + name: "Aerosol type 5 sink/loss accumulated" + alternative_names: + - "aerls05diff" + 211036: + name: "Aerosol type 6 sink/loss accumulated" + alternative_names: + - "aerls06diff" + 211037: + name: "Aerosol type 7 sink/loss accumulated" + alternative_names: + - "aerls07diff" + 211038: + name: "Aerosol type 8 sink/loss accumulated" + alternative_names: + - "aerls08diff" + 211039: + name: "Aerosol type 9 sink/loss accumulated" + alternative_names: + - "aerls09diff" + 211040: + name: "Aerosol type 10 sink/loss accumulated" + alternative_names: + - "aerls10diff" + 211041: + name: "Aerosol type 11 sink/loss accumulated" + alternative_names: + - "aerls11diff" + 211042: + name: "Aerosol type 12 sink/loss accumulated" + alternative_names: + - "aerls12diff" + 211043: + name: "Dms surface emission" + alternative_names: + - "emdmsdiff" + 211044: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 3" + alternative_names: + - "aerwv03diff" + 211045: + name: "Water vapour mixing ratio for hydrophilic aerosols in mode 4" + alternative_names: + - "aerwv04diff" + 211046: + name: "Aerosol precursor mixing ratio" + alternative_names: + - "aerprdiff" + 211047: + name: "Aerosol small mode mixing ratio" + alternative_names: + - "aersmdiff" + 211048: + name: "Aerosol large mode mixing ratio" + alternative_names: + - "aerlgdiff" + 211049: + name: "Aerosol precursor optical depth" + alternative_names: + - "aodprdiff" + 211050: + name: "Aerosol small mode optical depth" + alternative_names: + - "aodsmdiff" + 211051: + name: "Aerosol large mode optical depth" + alternative_names: + - "aodlgdiff" + 211052: + name: "Dust emission potential" + alternative_names: + - "aerdepdiff" + 211053: + name: "Lifting threshold speed" + alternative_names: + - "aerltsdiff" + 211054: + name: "Soil clay content" + alternative_names: + - "aersccdiff" + 211055: + name: "Experimental product" + alternative_names: + - "_param_211055" + 211056: + name: "Experimental product" + alternative_names: + - "_param_211056" + 211061: + name: "Carbon dioxide" + alternative_names: + - "co2diff" + 211062: + name: "Methane" + alternative_names: + - "ch4diff" + 211063: + name: "Nitrous oxide" + alternative_names: + - "n2odiff" + 211064: + name: "Total column carbon dioxide" + alternative_names: + - "tcco2diff" + 211065: + name: "Total column methane" + alternative_names: + - "tcch4diff" + 211066: + name: "Total column nitrous oxide" + alternative_names: + - "tcn2odiff" + 211067: + name: "Ocean flux of carbon dioxide" + alternative_names: + - "co2ofdiff" + 211068: + name: "Natural biosphere flux of carbon dioxide" + alternative_names: + - "co2nbfdiff" + 211069: + name: "Anthropogenic emissions of carbon dioxide" + alternative_names: + - "co2apfdiff" + 211070: + name: "Methane surface fluxes" + alternative_names: + - "ch4fdiff" + 211071: + name: "Methane loss rate due to radical hydroxyl (oh)" + alternative_names: + - "kch4diff" + 211080: + name: "Wildfire flux of carbon dioxide" + alternative_names: + - "co2firediff" + 211081: + name: "Wildfire flux of carbon monoxide" + alternative_names: + - "cofirediff" + 211082: + name: "Wildfire flux of methane" + alternative_names: + - "ch4firediff" + 211083: + name: "Wildfire flux of non-methane hydro-carbons" + alternative_names: + - "nmhcfirediff" + 211084: + name: "Wildfire flux of hydrogen" + alternative_names: + - "h2firediff" + 211085: + name: "Wildfire flux of nitrogen oxides nox" + alternative_names: + - "noxfirediff" + 211086: + name: "Wildfire flux of nitrous oxide" + alternative_names: + - "n2ofirediff" + 211087: + name: "Wildfire flux of particulate matter pm2.5" + alternative_names: + - "pm2p5firediff" + 211088: + name: "Wildfire flux of total particulate matter" + alternative_names: + - "tpmfirediff" + 211089: + name: "Wildfire flux of total carbon in aerosols" + alternative_names: + - "tcfirediff" + 211090: + name: "Wildfire flux of organic carbon" + alternative_names: + - "ocfirediff" + 211091: + name: "Wildfire flux of black carbon" + alternative_names: + - "bcfirediff" + 211092: + name: "Wildfire overall flux of burnt carbon" + alternative_names: + - "cfirediff" + 211093: + name: "Wildfire fraction of c4 plants" + alternative_names: + - "c4ffirediff" + 211094: + name: "Wildfire vegetation map index" + alternative_names: + - "vegfirediff" + 211095: + name: "Wildfire combustion completeness" + alternative_names: + - "ccfirediff" + 211096: + name: "Wildfire fuel load: carbon per unit area" + alternative_names: + - "flfirediff" + 211097: + name: "Wildfire fraction of area observed" + alternative_names: + - "offirediff" + 211098: + name: "Wildfire observed area" + alternative_names: + - "oafirediff" + 211099: + name: "Wildfire radiative power" + alternative_names: + - "frpfirediff" + 211100: + name: "Wildfire combustion rate" + alternative_names: + - "crfirediff" + 211101: + name: "Wildfire radiative power maximum" + alternative_names: + - "maxfrpfirediff" + 211102: + name: "Wildfire flux of sulfur dioxide" + alternative_names: + - "so2firediff" + 211103: + name: "Wildfire flux of methanol (ch3oh)" + alternative_names: + - "ch3ohfirediff" + 211104: + name: "Wildfire flux of ethanol (c2h5oh)" + alternative_names: + - "c2h5ohfirediff" + 211105: + name: "Wildfire flux of propane (c3h8)" + alternative_names: + - "c3h8firediff" + 211106: + name: "Wildfire flux of ethene (c2h4)" + alternative_names: + - "c2h4firediff" + 211107: + name: "Wildfire flux of propene (c3h6)" + alternative_names: + - "c3h6firediff" + 211108: + name: "Wildfire flux of isoprene (c5h8)" + alternative_names: + - "c5h8firediff" + 211109: + name: "Wildfire flux of terpenes (c5h8)n" + alternative_names: + - "terpenesfirediff" + 211110: + name: "Wildfire flux of toluene_lump (c7h8+ c6h6 + c8h10)" + alternative_names: + - "toluenefirediff" + 211111: + name: "Wildfire flux of higher alkenes (cnh2n, c>=4)" + alternative_names: + - "hialkenesfirediff" + 211112: + name: "Wildfire flux of higher alkanes (cnh2n+2, c>=4)" + alternative_names: + - "hialkanesfirediff" + 211113: + name: "Wildfire flux of formaldehyde (ch2o)" + alternative_names: + - "ch2ofirediff" + 211114: + name: "Wildfire flux of acetaldehyde (c2h4o)" + alternative_names: + - "c2h4ofirediff" + 211115: + name: "Wildfire flux of acetone (c3h6o)" + alternative_names: + - "c3h6ofirediff" + 211116: + name: "Wildfire flux of ammonia (nh3)" + alternative_names: + - "nh3firediff" + 211117: + name: "Wildfire flux of dimethyl sulfide (dms) (c2h6s)" + alternative_names: + - "c2h6sfirediff" + 211118: + name: "Wildfire flux of ethane (c2h6)" + alternative_names: + - "c2h6firediff" + 211119: + name: "Altitude of emitter" + alternative_names: + - "alediff" + 211120: + name: "Altitude of plume top" + alternative_names: + - "aptdiff" + 211121: + name: "Nitrogen dioxide mass mixing ratio difference" + alternative_names: + - "no2diff" + 211122: + name: "Sulphur dioxide mass mixing ratio difference" + alternative_names: + - "so2diff" + 211123: + name: "Carbon monoxide mass mixing ratio difference" + alternative_names: + - "codiff" + 211124: + name: "Formaldehyde" + alternative_names: + - "hchodiff" + 211125: + name: "Total column nitrogen dioxide" + alternative_names: + - "tcno2diff" + 211126: + name: "Total column sulphur dioxide" + alternative_names: + - "tcso2diff" + 211127: + name: "Total column carbon monoxide" + alternative_names: + - "tccodiff" + 211128: + name: "Total column formaldehyde" + alternative_names: + - "tchchodiff" + 211129: + name: "Nitrogen oxides" + alternative_names: + - "noxdiff" + 211130: + name: "Total column nitrogen oxides" + alternative_names: + - "tcnoxdiff" + 211131: + name: "Reactive tracer 1 mass mixing ratio" + alternative_names: + - "grg1diff" + 211132: + name: "Total column grg tracer 1" + alternative_names: + - "tcgrg1diff" + 211133: + name: "Reactive tracer 2 mass mixing ratio" + alternative_names: + - "grg2diff" + 211134: + name: "Total column grg tracer 2" + alternative_names: + - "tcgrg2diff" + 211135: + name: "Reactive tracer 3 mass mixing ratio" + alternative_names: + - "grg3diff" + 211136: + name: "Total column grg tracer 3" + alternative_names: + - "tcgrg3diff" + 211137: + name: "Reactive tracer 4 mass mixing ratio" + alternative_names: + - "grg4diff" + 211138: + name: "Total column grg tracer 4" + alternative_names: + - "tcgrg4diff" + 211139: + name: "Reactive tracer 5 mass mixing ratio" + alternative_names: + - "grg5diff" + 211140: + name: "Total column grg tracer 5" + alternative_names: + - "tcgrg5diff" + 211141: + name: "Reactive tracer 6 mass mixing ratio" + alternative_names: + - "grg6diff" + 211142: + name: "Total column grg tracer 6" + alternative_names: + - "tcgrg6diff" + 211143: + name: "Reactive tracer 7 mass mixing ratio" + alternative_names: + - "grg7diff" + 211144: + name: "Total column grg tracer 7" + alternative_names: + - "tcgrg7diff" + 211145: + name: "Reactive tracer 8 mass mixing ratio" + alternative_names: + - "grg8diff" + 211146: + name: "Total column grg tracer 8" + alternative_names: + - "tcgrg8diff" + 211147: + name: "Reactive tracer 9 mass mixing ratio" + alternative_names: + - "grg9diff" + 211148: + name: "Total column grg tracer 9" + alternative_names: + - "tcgrg9diff" + 211149: + name: "Reactive tracer 10 mass mixing ratio" + alternative_names: + - "grg10diff" + 211150: + name: "Total column grg tracer 10" + alternative_names: + - "tcgrg10diff" + 211151: + name: "Surface flux nitrogen oxides" + alternative_names: + - "sfnoxdiff" + 211152: + name: "Surface flux nitrogen dioxide" + alternative_names: + - "sfno2diff" + 211153: + name: "Surface flux sulphur dioxide" + alternative_names: + - "sfso2diff" + 211154: + name: "Surface flux carbon monoxide" + alternative_names: + - "sfco2diff" + 211155: + name: "Surface flux formaldehyde" + alternative_names: + - "sfhchodiff" + 211156: + name: "Surface flux gems ozone" + alternative_names: + - "sfgo3diff" + 211157: + name: "Surface flux reactive tracer 1" + alternative_names: + - "sfgr1diff" + 211158: + name: "Surface flux reactive tracer 2" + alternative_names: + - "sfgr2diff" + 211159: + name: "Surface flux reactive tracer 3" + alternative_names: + - "sfgr3diff" + 211160: + name: "Surface flux reactive tracer 4" + alternative_names: + - "sfgr4diff" + 211161: + name: "Surface flux reactive tracer 5" + alternative_names: + - "sfgr5diff" + 211162: + name: "Surface flux reactive tracer 6" + alternative_names: + - "sfgr6diff" + 211163: + name: "Surface flux reactive tracer 7" + alternative_names: + - "sfgr7diff" + 211164: + name: "Surface flux reactive tracer 8" + alternative_names: + - "sfgr8diff" + 211165: + name: "Surface flux reactive tracer 9" + alternative_names: + - "sfgr9diff" + 211166: + name: "Surface flux reactive tracer 10" + alternative_names: + - "sfgr10diff" + 211170: + name: "Volcanic sulfur dioxide mass mixing ratio increment" + alternative_names: + - "vso2diff" + 211181: + name: "Radon" + alternative_names: + - "radiff" + 211182: + name: "Sulphur hexafluoride" + alternative_names: + - "sf6diff" + 211183: + name: "Total column radon" + alternative_names: + - "tcradiff" + 211184: + name: "Total column sulphur hexafluoride" + alternative_names: + - "tcsf6diff" + 211185: + name: "Anthropogenic emissions of sulphur hexafluoride" + alternative_names: + - "sf6apfdiff" + 211203: + name: "Ozone mass mixing ratio difference (full chemistry scheme)" + alternative_names: + - "go3diff" + 211206: + name: "Gems total column ozone" + alternative_names: + - "gtco3diff" + 211207: + name: "Total aerosol optical depth at 550nm" + alternative_names: + - "aod550diff" + 211208: + name: "Sea salt aerosol optical depth at 550nm" + alternative_names: + - "ssaod550diff" + 211209: + name: "Dust aerosol optical depth at 550nm" + alternative_names: + - "duaod550diff" + 211210: + name: "Organic matter aerosol optical depth at 550nm" + alternative_names: + - "omaod550diff" + 211211: + name: "Black carbon aerosol optical depth at 550nm" + alternative_names: + - "bcaod550diff" + 211212: + name: "Sulphate aerosol optical depth at 550nm" + alternative_names: + - "suaod550diff" + 211213: + name: "Total aerosol optical depth at 469nm" + alternative_names: + - "aod469diff" + 211214: + name: "Total aerosol optical depth at 670nm" + alternative_names: + - "aod670diff" + 211215: + name: "Total aerosol optical depth at 865nm" + alternative_names: + - "aod865diff" + 211216: + name: "Total aerosol optical depth at 1240nm" + alternative_names: + - "aod1240diff" + 211247: + name: "Nitrate fine mode aerosol mass mixing ratio" + alternative_names: + - "aermr16diff" + 211248: + name: "Nitrate coarse mode aerosol mass mixing ratio" + alternative_names: + - "aermr17diff" + 211249: + name: "Ammonium aerosol mass mixing ratio" + alternative_names: + - "aermr18diff" + 211252: + name: "Biogenic secondary organic aerosol mass mixing ratio increment" + alternative_names: + - "aermr19diff" + 211253: + name: "Anthropogenic secondary organic aerosol mass mixing ratio increment" + alternative_names: + - "aermr20diff" + 212001: + name: "Experimental product" + alternative_names: + - "_param_212001" + 212002: + name: "Experimental product" + alternative_names: + - "_param_212002" + 212003: + name: "Experimental product" + alternative_names: + - "_param_212003" + 212004: + name: "Experimental product" + alternative_names: + - "_param_212004" + 212005: + name: "Experimental product" + alternative_names: + - "_param_212005" + 212006: + name: "Experimental product" + alternative_names: + - "_param_212006" + 212007: + name: "Experimental product" + alternative_names: + - "_param_212007" + 212008: + name: "Experimental product" + alternative_names: + - "_param_212008" + 212009: + name: "Experimental product" + alternative_names: + - "_param_212009" + 212010: + name: "Experimental product" + alternative_names: + - "_param_212010" + 212011: + name: "Experimental product" + alternative_names: + - "_param_212011" + 212012: + name: "Experimental product" + alternative_names: + - "_param_212012" + 212013: + name: "Experimental product" + alternative_names: + - "_param_212013" + 212014: + name: "Experimental product" + alternative_names: + - "_param_212014" + 212015: + name: "Experimental product" + alternative_names: + - "_param_212015" + 212016: + name: "Experimental product" + alternative_names: + - "_param_212016" + 212017: + name: "Experimental product" + alternative_names: + - "_param_212017" + 212018: + name: "Experimental product" + alternative_names: + - "_param_212018" + 212019: + name: "Experimental product" + alternative_names: + - "_param_212019" + 212020: + name: "Experimental product" + alternative_names: + - "_param_212020" + 212021: + name: "Experimental product" + alternative_names: + - "_param_212021" + 212022: + name: "Experimental product" + alternative_names: + - "_param_212022" + 212023: + name: "Experimental product" + alternative_names: + - "_param_212023" + 212024: + name: "Experimental product" + alternative_names: + - "_param_212024" + 212025: + name: "Experimental product" + alternative_names: + - "_param_212025" + 212026: + name: "Experimental product" + alternative_names: + - "_param_212026" + 212027: + name: "Experimental product" + alternative_names: + - "_param_212027" + 212028: + name: "Experimental product" + alternative_names: + - "_param_212028" + 212029: + name: "Experimental product" + alternative_names: + - "_param_212029" + 212030: + name: "Experimental product" + alternative_names: + - "_param_212030" + 212031: + name: "Experimental product" + alternative_names: + - "_param_212031" + 212032: + name: "Experimental product" + alternative_names: + - "_param_212032" + 212033: + name: "Experimental product" + alternative_names: + - "_param_212033" + 212034: + name: "Experimental product" + alternative_names: + - "_param_212034" + 212035: + name: "Experimental product" + alternative_names: + - "_param_212035" + 212036: + name: "Experimental product" + alternative_names: + - "_param_212036" + 212037: + name: "Experimental product" + alternative_names: + - "_param_212037" + 212038: + name: "Experimental product" + alternative_names: + - "_param_212038" + 212039: + name: "Experimental product" + alternative_names: + - "_param_212039" + 212040: + name: "Experimental product" + alternative_names: + - "_param_212040" + 212041: + name: "Experimental product" + alternative_names: + - "_param_212041" + 212042: + name: "Experimental product" + alternative_names: + - "_param_212042" + 212043: + name: "Experimental product" + alternative_names: + - "_param_212043" + 212044: + name: "Experimental product" + alternative_names: + - "_param_212044" + 212045: + name: "Experimental product" + alternative_names: + - "_param_212045" + 212046: + name: "Experimental product" + alternative_names: + - "_param_212046" + 212047: + name: "Experimental product" + alternative_names: + - "_param_212047" + 212048: + name: "Experimental product" + alternative_names: + - "_param_212048" + 212049: + name: "Experimental product" + alternative_names: + - "_param_212049" + 212050: + name: "Experimental product" + alternative_names: + - "_param_212050" + 212051: + name: "Experimental product" + alternative_names: + - "_param_212051" + 212052: + name: "Experimental product" + alternative_names: + - "_param_212052" + 212053: + name: "Experimental product" + alternative_names: + - "_param_212053" + 212054: + name: "Experimental product" + alternative_names: + - "_param_212054" + 212055: + name: "Experimental product" + alternative_names: + - "_param_212055" + 212056: + name: "Experimental product" + alternative_names: + - "_param_212056" + 212057: + name: "Experimental product" + alternative_names: + - "_param_212057" + 212058: + name: "Experimental product" + alternative_names: + - "_param_212058" + 212059: + name: "Experimental product" + alternative_names: + - "_param_212059" + 212060: + name: "Experimental product" + alternative_names: + - "_param_212060" + 212061: + name: "Experimental product" + alternative_names: + - "_param_212061" + 212062: + name: "Experimental product" + alternative_names: + - "_param_212062" + 212063: + name: "Experimental product" + alternative_names: + - "_param_212063" + 212064: + name: "Experimental product" + alternative_names: + - "_param_212064" + 212065: + name: "Experimental product" + alternative_names: + - "_param_212065" + 212066: + name: "Experimental product" + alternative_names: + - "_param_212066" + 212067: + name: "Experimental product" + alternative_names: + - "_param_212067" + 212068: + name: "Experimental product" + alternative_names: + - "_param_212068" + 212069: + name: "Experimental product" + alternative_names: + - "_param_212069" + 212070: + name: "Experimental product" + alternative_names: + - "_param_212070" + 212071: + name: "Experimental product" + alternative_names: + - "_param_212071" + 212072: + name: "Experimental product" + alternative_names: + - "_param_212072" + 212073: + name: "Experimental product" + alternative_names: + - "_param_212073" + 212074: + name: "Experimental product" + alternative_names: + - "_param_212074" + 212075: + name: "Experimental product" + alternative_names: + - "_param_212075" + 212076: + name: "Experimental product" + alternative_names: + - "_param_212076" + 212077: + name: "Experimental product" + alternative_names: + - "_param_212077" + 212078: + name: "Experimental product" + alternative_names: + - "_param_212078" + 212079: + name: "Experimental product" + alternative_names: + - "_param_212079" + 212080: + name: "Experimental product" + alternative_names: + - "_param_212080" + 212081: + name: "Experimental product" + alternative_names: + - "_param_212081" + 212082: + name: "Experimental product" + alternative_names: + - "_param_212082" + 212083: + name: "Experimental product" + alternative_names: + - "_param_212083" + 212084: + name: "Experimental product" + alternative_names: + - "_param_212084" + 212085: + name: "Experimental product" + alternative_names: + - "_param_212085" + 212086: + name: "Experimental product" + alternative_names: + - "_param_212086" + 212087: + name: "Experimental product" + alternative_names: + - "_param_212087" + 212088: + name: "Experimental product" + alternative_names: + - "_param_212088" + 212089: + name: "Experimental product" + alternative_names: + - "_param_212089" + 212090: + name: "Experimental product" + alternative_names: + - "_param_212090" + 212091: + name: "Experimental product" + alternative_names: + - "_param_212091" + 212092: + name: "Experimental product" + alternative_names: + - "_param_212092" + 212093: + name: "Experimental product" + alternative_names: + - "_param_212093" + 212094: + name: "Experimental product" + alternative_names: + - "_param_212094" + 212095: + name: "Experimental product" + alternative_names: + - "_param_212095" + 212096: + name: "Experimental product" + alternative_names: + - "_param_212096" + 212097: + name: "Experimental product" + alternative_names: + - "_param_212097" + 212098: + name: "Experimental product" + alternative_names: + - "_param_212098" + 212099: + name: "Experimental product" + alternative_names: + - "_param_212099" + 212100: + name: "Experimental product" + alternative_names: + - "_param_212100" + 212101: + name: "Experimental product" + alternative_names: + - "_param_212101" + 212102: + name: "Experimental product" + alternative_names: + - "_param_212102" + 212103: + name: "Experimental product" + alternative_names: + - "_param_212103" + 212104: + name: "Experimental product" + alternative_names: + - "_param_212104" + 212105: + name: "Experimental product" + alternative_names: + - "_param_212105" + 212106: + name: "Experimental product" + alternative_names: + - "_param_212106" + 212107: + name: "Experimental product" + alternative_names: + - "_param_212107" + 212108: + name: "Experimental product" + alternative_names: + - "_param_212108" + 212109: + name: "Experimental product" + alternative_names: + - "_param_212109" + 212110: + name: "Experimental product" + alternative_names: + - "_param_212110" + 212111: + name: "Experimental product" + alternative_names: + - "_param_212111" + 212112: + name: "Experimental product" + alternative_names: + - "_param_212112" + 212113: + name: "Experimental product" + alternative_names: + - "_param_212113" + 212114: + name: "Experimental product" + alternative_names: + - "_param_212114" + 212115: + name: "Experimental product" + alternative_names: + - "_param_212115" + 212116: + name: "Experimental product" + alternative_names: + - "_param_212116" + 212117: + name: "Experimental product" + alternative_names: + - "_param_212117" + 212118: + name: "Experimental product" + alternative_names: + - "_param_212118" + 212119: + name: "Experimental product" + alternative_names: + - "_param_212119" + 212120: + name: "Experimental product" + alternative_names: + - "_param_212120" + 212121: + name: "Experimental product" + alternative_names: + - "_param_212121" + 212122: + name: "Experimental product" + alternative_names: + - "_param_212122" + 212123: + name: "Experimental product" + alternative_names: + - "_param_212123" + 212124: + name: "Experimental product" + alternative_names: + - "_param_212124" + 212125: + name: "Experimental product" + alternative_names: + - "_param_212125" + 212126: + name: "Experimental product" + alternative_names: + - "_param_212126" + 212127: + name: "Experimental product" + alternative_names: + - "_param_212127" + 212128: + name: "Experimental product" + alternative_names: + - "_param_212128" + 212129: + name: "Experimental product" + alternative_names: + - "_param_212129" + 212130: + name: "Experimental product" + alternative_names: + - "_param_212130" + 212131: + name: "Experimental product" + alternative_names: + - "_param_212131" + 212132: + name: "Experimental product" + alternative_names: + - "_param_212132" + 212133: + name: "Experimental product" + alternative_names: + - "_param_212133" + 212134: + name: "Experimental product" + alternative_names: + - "_param_212134" + 212135: + name: "Experimental product" + alternative_names: + - "_param_212135" + 212136: + name: "Experimental product" + alternative_names: + - "_param_212136" + 212137: + name: "Experimental product" + alternative_names: + - "_param_212137" + 212138: + name: "Experimental product" + alternative_names: + - "_param_212138" + 212139: + name: "Experimental product" + alternative_names: + - "_param_212139" + 212140: + name: "Experimental product" + alternative_names: + - "_param_212140" + 212141: + name: "Experimental product" + alternative_names: + - "_param_212141" + 212142: + name: "Experimental product" + alternative_names: + - "_param_212142" + 212143: + name: "Experimental product" + alternative_names: + - "_param_212143" + 212144: + name: "Experimental product" + alternative_names: + - "_param_212144" + 212145: + name: "Experimental product" + alternative_names: + - "_param_212145" + 212146: + name: "Experimental product" + alternative_names: + - "_param_212146" + 212147: + name: "Experimental product" + alternative_names: + - "_param_212147" + 212148: + name: "Experimental product" + alternative_names: + - "_param_212148" + 212149: + name: "Experimental product" + alternative_names: + - "_param_212149" + 212150: + name: "Experimental product" + alternative_names: + - "_param_212150" + 212151: + name: "Experimental product" + alternative_names: + - "_param_212151" + 212152: + name: "Experimental product" + alternative_names: + - "_param_212152" + 212153: + name: "Experimental product" + alternative_names: + - "_param_212153" + 212154: + name: "Experimental product" + alternative_names: + - "_param_212154" + 212155: + name: "Experimental product" + alternative_names: + - "_param_212155" + 212156: + name: "Experimental product" + alternative_names: + - "_param_212156" + 212157: + name: "Experimental product" + alternative_names: + - "_param_212157" + 212158: + name: "Experimental product" + alternative_names: + - "_param_212158" + 212159: + name: "Experimental product" + alternative_names: + - "_param_212159" + 212160: + name: "Experimental product" + alternative_names: + - "_param_212160" + 212161: + name: "Experimental product" + alternative_names: + - "_param_212161" + 212162: + name: "Experimental product" + alternative_names: + - "_param_212162" + 212163: + name: "Experimental product" + alternative_names: + - "_param_212163" + 212164: + name: "Experimental product" + alternative_names: + - "_param_212164" + 212165: + name: "Experimental product" + alternative_names: + - "_param_212165" + 212166: + name: "Experimental product" + alternative_names: + - "_param_212166" + 212167: + name: "Experimental product" + alternative_names: + - "_param_212167" + 212168: + name: "Experimental product" + alternative_names: + - "_param_212168" + 212169: + name: "Experimental product" + alternative_names: + - "_param_212169" + 212170: + name: "Experimental product" + alternative_names: + - "_param_212170" + 212171: + name: "Experimental product" + alternative_names: + - "_param_212171" + 212172: + name: "Experimental product" + alternative_names: + - "_param_212172" + 212173: + name: "Experimental product" + alternative_names: + - "_param_212173" + 212174: + name: "Experimental product" + alternative_names: + - "_param_212174" + 212175: + name: "Experimental product" + alternative_names: + - "_param_212175" + 212176: + name: "Experimental product" + alternative_names: + - "_param_212176" + 212177: + name: "Experimental product" + alternative_names: + - "_param_212177" + 212178: + name: "Experimental product" + alternative_names: + - "_param_212178" + 212179: + name: "Experimental product" + alternative_names: + - "_param_212179" + 212180: + name: "Experimental product" + alternative_names: + - "_param_212180" + 212181: + name: "Experimental product" + alternative_names: + - "_param_212181" + 212182: + name: "Experimental product" + alternative_names: + - "_param_212182" + 212183: + name: "Experimental product" + alternative_names: + - "_param_212183" + 212184: + name: "Experimental product" + alternative_names: + - "_param_212184" + 212185: + name: "Experimental product" + alternative_names: + - "_param_212185" + 212186: + name: "Experimental product" + alternative_names: + - "_param_212186" + 212187: + name: "Experimental product" + alternative_names: + - "_param_212187" + 212188: + name: "Experimental product" + alternative_names: + - "_param_212188" + 212189: + name: "Experimental product" + alternative_names: + - "_param_212189" + 212190: + name: "Experimental product" + alternative_names: + - "_param_212190" + 212191: + name: "Experimental product" + alternative_names: + - "_param_212191" + 212192: + name: "Experimental product" + alternative_names: + - "_param_212192" + 212193: + name: "Experimental product" + alternative_names: + - "_param_212193" + 212194: + name: "Experimental product" + alternative_names: + - "_param_212194" + 212195: + name: "Experimental product" + alternative_names: + - "_param_212195" + 212196: + name: "Experimental product" + alternative_names: + - "_param_212196" + 212197: + name: "Experimental product" + alternative_names: + - "_param_212197" + 212198: + name: "Experimental product" + alternative_names: + - "_param_212198" + 212199: + name: "Experimental product" + alternative_names: + - "_param_212199" + 212200: + name: "Experimental product" + alternative_names: + - "_param_212200" + 212201: + name: "Experimental product" + alternative_names: + - "_param_212201" + 212202: + name: "Experimental product" + alternative_names: + - "_param_212202" + 212203: + name: "Experimental product" + alternative_names: + - "_param_212203" + 212204: + name: "Experimental product" + alternative_names: + - "_param_212204" + 212205: + name: "Experimental product" + alternative_names: + - "_param_212205" + 212206: + name: "Experimental product" + alternative_names: + - "_param_212206" + 212207: + name: "Experimental product" + alternative_names: + - "_param_212207" + 212208: + name: "Experimental product" + alternative_names: + - "_param_212208" + 212209: + name: "Experimental product" + alternative_names: + - "_param_212209" + 212210: + name: "Experimental product" + alternative_names: + - "_param_212210" + 212211: + name: "Experimental product" + alternative_names: + - "_param_212211" + 212212: + name: "Experimental product" + alternative_names: + - "_param_212212" + 212213: + name: "Experimental product" + alternative_names: + - "_param_212213" + 212214: + name: "Experimental product" + alternative_names: + - "_param_212214" + 212215: + name: "Experimental product" + alternative_names: + - "_param_212215" + 212216: + name: "Experimental product" + alternative_names: + - "_param_212216" + 212217: + name: "Experimental product" + alternative_names: + - "_param_212217" + 212218: + name: "Experimental product" + alternative_names: + - "_param_212218" + 212219: + name: "Experimental product" + alternative_names: + - "_param_212219" + 212220: + name: "Experimental product" + alternative_names: + - "_param_212220" + 212221: + name: "Experimental product" + alternative_names: + - "_param_212221" + 212222: + name: "Experimental product" + alternative_names: + - "_param_212222" + 212223: + name: "Experimental product" + alternative_names: + - "_param_212223" + 212224: + name: "Experimental product" + alternative_names: + - "_param_212224" + 212225: + name: "Experimental product" + alternative_names: + - "_param_212225" + 212226: + name: "Experimental product" + alternative_names: + - "_param_212226" + 212227: + name: "Experimental product" + alternative_names: + - "_param_212227" + 212228: + name: "Experimental product" + alternative_names: + - "_param_212228" + 212229: + name: "Experimental product" + alternative_names: + - "_param_212229" + 212230: + name: "Experimental product" + alternative_names: + - "_param_212230" + 212231: + name: "Experimental product" + alternative_names: + - "_param_212231" + 212232: + name: "Experimental product" + alternative_names: + - "_param_212232" + 212233: + name: "Experimental product" + alternative_names: + - "_param_212233" + 212234: + name: "Experimental product" + alternative_names: + - "_param_212234" + 212235: + name: "Experimental product" + alternative_names: + - "_param_212235" + 212236: + name: "Experimental product" + alternative_names: + - "_param_212236" + 212237: + name: "Experimental product" + alternative_names: + - "_param_212237" + 212238: + name: "Experimental product" + alternative_names: + - "_param_212238" + 212239: + name: "Experimental product" + alternative_names: + - "_param_212239" + 212240: + name: "Experimental product" + alternative_names: + - "_param_212240" + 212241: + name: "Experimental product" + alternative_names: + - "_param_212241" + 212242: + name: "Experimental product" + alternative_names: + - "_param_212242" + 212243: + name: "Experimental product" + alternative_names: + - "_param_212243" + 212244: + name: "Experimental product" + alternative_names: + - "_param_212244" + 212245: + name: "Experimental product" + alternative_names: + - "_param_212245" + 212246: + name: "Experimental product" + alternative_names: + - "_param_212246" + 212247: + name: "Experimental product" + alternative_names: + - "_param_212247" + 212248: + name: "Experimental product" + alternative_names: + - "_param_212248" + 212249: + name: "Experimental product" + alternative_names: + - "_param_212249" + 212250: + name: "Experimental product" + alternative_names: + - "_param_212250" + 212251: + name: "Experimental product" + alternative_names: + - "_param_212251" + 212252: + name: "Experimental product" + alternative_names: + - "_param_212252" + 212253: + name: "Experimental product" + alternative_names: + - "_param_212253" + 212254: + name: "Experimental product" + alternative_names: + - "_param_212254" + 212255: + name: "Experimental product" + alternative_names: + - "_param_212255" + 213001: + name: "Random pattern 1 for sppt" + alternative_names: + - "sppt1" + 213002: + name: "Random pattern 2 for sppt" + alternative_names: + - "sppt2" + 213003: + name: "Random pattern 3 for sppt" + alternative_names: + - "sppt3" + 213004: + name: "Random pattern 4 for sppt" + alternative_names: + - "sppt4" + 213005: + name: "Random pattern 5 for sppt" + alternative_names: + - "sppt5" + 213101: + name: "Random pattern 1 for spp scheme" + alternative_names: + - "spp1" + 213102: + name: "Random pattern 2 for spp scheme" + alternative_names: + - "spp2" + 213103: + name: "Random pattern 3 for spp scheme" + alternative_names: + - "spp3" + 213104: + name: "Random pattern 4 for spp scheme" + alternative_names: + - "spp4" + 213105: + name: "Random pattern 5 for spp scheme" + alternative_names: + - "spp5" + 213106: + name: "Random pattern 6 for spp scheme" + alternative_names: + - "spp6" + 213107: + name: "Random pattern 7 for spp scheme" + alternative_names: + - "spp7" + 213108: + name: "Random pattern 8 for spp scheme" + alternative_names: + - "spp8" + 213109: + name: "Random pattern 9 for spp scheme" + alternative_names: + - "spp9" + 213110: + name: "Random pattern 10 for spp scheme" + alternative_names: + - "spp10" + 213111: + name: "Random pattern 11 for spp scheme" + alternative_names: + - "spp11" + 213112: + name: "Random pattern 12 for spp scheme" + alternative_names: + - "spp12" + 213113: + name: "Random pattern 13 for spp scheme" + alternative_names: + - "spp13" + 213114: + name: "Random pattern 14 for spp scheme" + alternative_names: + - "spp14" + 213115: + name: "Random pattern 15 for spp scheme" + alternative_names: + - "spp15" + 213116: + name: "Random pattern 16 for spp scheme" + alternative_names: + - "spp16" + 213117: + name: "Random pattern 17 for spp scheme" + alternative_names: + - "spp17" + 213118: + name: "Random pattern 18 for spp scheme" + alternative_names: + - "spp18" + 213119: + name: "Random pattern 19 for spp scheme" + alternative_names: + - "spp19" + 213120: + name: "Random pattern 20 for spp scheme" + alternative_names: + - "spp20" + 213121: + name: "Random pattern 21 for spp scheme" + alternative_names: + - "spp21" + 213122: + name: "Random pattern 22 for spp scheme" + alternative_names: + - "spp22" + 213123: + name: "Random pattern 23 for spp scheme" + alternative_names: + - "spp23" + 213124: + name: "Random pattern 24 for spp scheme" + alternative_names: + - "spp24" + 213125: + name: "Random pattern 25 for spp scheme" + alternative_names: + - "spp25" + 213126: + name: "Random pattern 26 for spp scheme" + alternative_names: + - "spp26" + 213127: + name: "Random pattern 27 for spp scheme" + alternative_names: + - "spp27" + 213128: + name: "Random pattern 28 for spp scheme" + alternative_names: + - "spp28" + 213129: + name: "Random pattern 29 for spp scheme" + alternative_names: + - "spp29" + 213130: + name: "Random pattern 30 for spp scheme" + alternative_names: + - "spp30" + 213131: + name: "Random pattern 31 for spp scheme" + alternative_names: + - "spp31" + 213132: + name: "Random pattern 32 for spp scheme" + alternative_names: + - "spp32" + 213133: + name: "Random pattern 33 for spp scheme" + alternative_names: + - "spp33" + 213134: + name: "Random pattern 34 for spp scheme" + alternative_names: + - "spp34" + 213135: + name: "Random pattern 35 for spp scheme" + alternative_names: + - "spp35" + 213136: + name: "Random pattern 36 for spp scheme" + alternative_names: + - "spp36" + 213137: + name: "Random pattern 37 for spp scheme" + alternative_names: + - "spp37" + 213138: + name: "Random pattern 38 for spp scheme" + alternative_names: + - "spp38" + 213139: + name: "Random pattern 39 for spp scheme" + alternative_names: + - "spp39" + 213140: + name: "Random pattern 40 for spp scheme" + alternative_names: + - "spp40" + 213141: + name: "Random pattern 41 for spp scheme" + alternative_names: + - "spp41" + 213142: + name: "Random pattern 42 for spp scheme" + alternative_names: + - "spp42" + 213143: + name: "Random pattern 43 for spp scheme" + alternative_names: + - "spp43" + 213144: + name: "Random pattern 44 for spp scheme" + alternative_names: + - "spp44" + 213145: + name: "Random pattern 45 for spp scheme" + alternative_names: + - "spp45" + 213146: + name: "Random pattern 46 for spp scheme" + alternative_names: + - "spp46" + 213147: + name: "Random pattern 47 for spp scheme" + alternative_names: + - "spp47" + 213148: + name: "Random pattern 48 for spp scheme" + alternative_names: + - "spp48" + 213149: + name: "Random pattern 49 for spp scheme" + alternative_names: + - "spp49" + 213150: + name: "Random pattern 50 for spp scheme" + alternative_names: + - "spp50" + 213151: + name: "Random pattern 51 for spp scheme" + alternative_names: + - "spp51" + 213152: + name: "Random pattern 52 for spp scheme" + alternative_names: + - "spp52" + 213153: + name: "Random pattern 53 for spp scheme" + alternative_names: + - "spp53" + 213154: + name: "Random pattern 54 for spp scheme" + alternative_names: + - "spp54" + 213155: + name: "Random pattern 55 for spp scheme" + alternative_names: + - "spp55" + 213156: + name: "Random pattern 56 for spp scheme" + alternative_names: + - "spp56" + 213157: + name: "Random pattern 57 for spp scheme" + alternative_names: + - "spp57" + 213158: + name: "Random pattern 58 for spp scheme" + alternative_names: + - "spp58" + 213159: + name: "Random pattern 59 for spp scheme" + alternative_names: + - "spp59" + 213160: + name: "Random pattern 60 for spp scheme" + alternative_names: + - "spp60" + 213161: + name: "Random pattern 61 for spp scheme" + alternative_names: + - "spp61" + 213162: + name: "Random pattern 62 for spp scheme" + alternative_names: + - "spp62" + 213163: + name: "Random pattern 63 for spp scheme" + alternative_names: + - "spp63" + 213164: + name: "Random pattern 64 for spp scheme" + alternative_names: + - "spp64" + 213165: + name: "Random pattern 65 for spp scheme" + alternative_names: + - "spp65" + 213166: + name: "Random pattern 66 for spp scheme" + alternative_names: + - "spp66" + 213167: + name: "Random pattern 67 for spp scheme" + alternative_names: + - "spp67" + 213168: + name: "Random pattern 68 for spp scheme" + alternative_names: + - "spp68" + 213169: + name: "Random pattern 69 for spp scheme" + alternative_names: + - "spp69" + 213170: + name: "Random pattern 70 for spp scheme" + alternative_names: + - "spp70" + 213171: + name: "Random pattern 71 for spp scheme" + alternative_names: + - "spp71" + 213172: + name: "Random pattern 72 for spp scheme" + alternative_names: + - "spp72" + 213173: + name: "Random pattern 73 for spp scheme" + alternative_names: + - "spp73" + 213174: + name: "Random pattern 74 for spp scheme" + alternative_names: + - "spp74" + 213175: + name: "Random pattern 75 for spp scheme" + alternative_names: + - "spp75" + 213176: + name: "Random pattern 76 for spp scheme" + alternative_names: + - "spp76" + 213177: + name: "Random pattern 77 for spp scheme" + alternative_names: + - "spp77" + 213178: + name: "Random pattern 78 for spp scheme" + alternative_names: + - "spp78" + 213179: + name: "Random pattern 79 for spp scheme" + alternative_names: + - "spp79" + 213180: + name: "Random pattern 80 for spp scheme" + alternative_names: + - "spp80" + 213181: + name: "Random pattern 81 for spp scheme" + alternative_names: + - "spp81" + 213182: + name: "Random pattern 82 for spp scheme" + alternative_names: + - "spp82" + 213183: + name: "Random pattern 83 for spp scheme" + alternative_names: + - "spp83" + 213184: + name: "Random pattern 84 for spp scheme" + alternative_names: + - "spp84" + 213185: + name: "Random pattern 85 for spp scheme" + alternative_names: + - "spp85" + 213186: + name: "Random pattern 86 for spp scheme" + alternative_names: + - "spp86" + 213187: + name: "Random pattern 87 for spp scheme" + alternative_names: + - "spp87" + 213188: + name: "Random pattern 88 for spp scheme" + alternative_names: + - "spp88" + 213189: + name: "Random pattern 89 for spp scheme" + alternative_names: + - "spp89" + 213190: + name: "Random pattern 90 for spp scheme" + alternative_names: + - "spp90" + 213191: + name: "Random pattern 91 for spp scheme" + alternative_names: + - "spp91" + 213192: + name: "Random pattern 92 for spp scheme" + alternative_names: + - "spp92" + 213193: + name: "Random pattern 93 for spp scheme" + alternative_names: + - "spp93" + 213194: + name: "Random pattern 94 for spp scheme" + alternative_names: + - "spp94" + 213195: + name: "Random pattern 95 for spp scheme" + alternative_names: + - "spp95" + 213196: + name: "Random pattern 96 for spp scheme" + alternative_names: + - "spp96" + 213197: + name: "Random pattern 97 for spp scheme" + alternative_names: + - "spp97" + 213198: + name: "Random pattern 98 for spp scheme" + alternative_names: + - "spp98" + 213199: + name: "Random pattern 99 for spp scheme" + alternative_names: + - "spp99" + 213200: + name: "Random pattern 100 for spp scheme" + alternative_names: + - "spp100" + 213201: + name: "Random pattern 101 for spp scheme" + alternative_names: + - "spp101" + 213202: + name: "Random pattern 102 for spp scheme" + alternative_names: + - "spp102" + 213203: + name: "Random pattern 103 for spp scheme" + alternative_names: + - "spp103" + 213204: + name: "Random pattern 104 for spp scheme" + alternative_names: + - "spp104" + 213205: + name: "Random pattern 105 for spp scheme" + alternative_names: + - "spp105" + 213206: + name: "Random pattern 106 for spp scheme" + alternative_names: + - "spp106" + 213207: + name: "Random pattern 107 for spp scheme" + alternative_names: + - "spp107" + 213208: + name: "Random pattern 108 for spp scheme" + alternative_names: + - "spp108" + 213209: + name: "Random pattern 109 for spp scheme" + alternative_names: + - "spp109" + 213210: + name: "Random pattern 110 for spp scheme" + alternative_names: + - "spp110" + 213211: + name: "Random pattern 111 for spp scheme" + alternative_names: + - "spp111" + 213212: + name: "Random pattern 112 for spp scheme" + alternative_names: + - "spp112" + 213213: + name: "Random pattern 113 for spp scheme" + alternative_names: + - "spp113" + 213214: + name: "Random pattern 114 for spp scheme" + alternative_names: + - "spp114" + 213215: + name: "Random pattern 115 for spp scheme" + alternative_names: + - "spp115" + 213216: + name: "Random pattern 116 for spp scheme" + alternative_names: + - "spp116" + 213217: + name: "Random pattern 117 for spp scheme" + alternative_names: + - "spp117" + 213218: + name: "Random pattern 118 for spp scheme" + alternative_names: + - "spp118" + 213219: + name: "Random pattern 119 for spp scheme" + alternative_names: + - "spp119" + 213220: + name: "Random pattern 120 for spp scheme" + alternative_names: + - "spp120" + 213221: + name: "Random pattern 121 for spp scheme" + alternative_names: + - "spp121" + 214001: + name: "Cosine of solar zenith angle" + alternative_names: + - "uvcossza" + 214002: + name: "Uv biologically effective dose" + alternative_names: + - "uvbed" + 214003: + name: "Uv biologically effective dose clear-sky" + alternative_names: + - "uvbedcs" + 214004: + name: "Total surface uv spectral flux (280-285 nm)" + alternative_names: + - "uvsflxt280285" + 214005: + name: "Total surface uv spectral flux (285-290 nm)" + alternative_names: + - "uvsflxt285290" + 214006: + name: "Total surface uv spectral flux (290-295 nm)" + alternative_names: + - "uvsflxt290295" + 214007: + name: "Total surface uv spectral flux (295-300 nm)" + alternative_names: + - "uvsflxt295300" + 214008: + name: "Total surface uv spectral flux (300-305 nm)" + alternative_names: + - "uvsflxt300305" + 214009: + name: "Total surface uv spectral flux (305-310 nm)" + alternative_names: + - "uvsflxt305310" + 214010: + name: "Total surface uv spectral flux (310-315 nm)" + alternative_names: + - "uvsflxt310315" + 214011: + name: "Total surface uv spectral flux (315-320 nm)" + alternative_names: + - "uvsflxt315320" + 214012: + name: "Total surface uv spectral flux (320-325 nm)" + alternative_names: + - "uvsflxt320325" + 214013: + name: "Total surface uv spectral flux (325-330 nm)" + alternative_names: + - "uvsflxt325330" + 214014: + name: "Total surface uv spectral flux (330-335 nm)" + alternative_names: + - "uvsflxt330335" + 214015: + name: "Total surface uv spectral flux (335-340 nm)" + alternative_names: + - "uvsflxt335340" + 214016: + name: "Total surface uv spectral flux (340-345 nm)" + alternative_names: + - "uvsflxt340345" + 214017: + name: "Total surface uv spectral flux (345-350 nm)" + alternative_names: + - "uvsflxt345350" + 214018: + name: "Total surface uv spectral flux (350-355 nm)" + alternative_names: + - "uvsflxt350355" + 214019: + name: "Total surface uv spectral flux (355-360 nm)" + alternative_names: + - "uvsflxt355360" + 214020: + name: "Total surface uv spectral flux (360-365 nm)" + alternative_names: + - "uvsflxt360365" + 214021: + name: "Total surface uv spectral flux (365-370 nm)" + alternative_names: + - "uvsflxt365370" + 214022: + name: "Total surface uv spectral flux (370-375 nm)" + alternative_names: + - "uvsflxt370375" + 214023: + name: "Total surface uv spectral flux (375-380 nm)" + alternative_names: + - "uvsflxt375380" + 214024: + name: "Total surface uv spectral flux (380-385 nm)" + alternative_names: + - "uvsflxt380385" + 214025: + name: "Total surface uv spectral flux (385-390 nm)" + alternative_names: + - "uvsflxt385390" + 214026: + name: "Total surface uv spectral flux (390-395 nm)" + alternative_names: + - "uvsflxt390395" + 214027: + name: "Total surface uv spectral flux (395-400 nm)" + alternative_names: + - "uvsflxt395400" + 214028: + name: "Clear-sky surface uv spectral flux (280-285 nm)" + alternative_names: + - "uvsflxcs280285" + 214029: + name: "Clear-sky surface uv spectral flux (285-290 nm)" + alternative_names: + - "uvsflxcs285290" + 214030: + name: "Clear-sky surface uv spectral flux (290-295 nm)" + alternative_names: + - "uvsflxcs290295" + 214031: + name: "Clear-sky surface uv spectral flux (295-300 nm)" + alternative_names: + - "uvsflxcs295300" + 214032: + name: "Clear-sky surface uv spectral flux (300-305 nm)" + alternative_names: + - "uvsflxcs300305" + 214033: + name: "Clear-sky surface uv spectral flux (305-310 nm)" + alternative_names: + - "uvsflxcs305310" + 214034: + name: "Clear-sky surface uv spectral flux (310-315 nm)" + alternative_names: + - "uvsflxcs310315" + 214035: + name: "Clear-sky surface uv spectral flux (315-320 nm)" + alternative_names: + - "uvsflxcs315320" + 214036: + name: "Clear-sky surface uv spectral flux (320-325 nm)" + alternative_names: + - "uvsflxcs320325" + 214037: + name: "Clear-sky surface uv spectral flux (325-330 nm)" + alternative_names: + - "uvsflxcs325330" + 214038: + name: "Clear-sky surface uv spectral flux (330-335 nm)" + alternative_names: + - "uvsflxcs330335" + 214039: + name: "Clear-sky surface uv spectral flux (335-340 nm)" + alternative_names: + - "uvsflxcs335340" + 214040: + name: "Clear-sky surface uv spectral flux (340-345 nm)" + alternative_names: + - "uvsflxcs340345" + 214041: + name: "Clear-sky surface uv spectral flux (345-350 nm)" + alternative_names: + - "uvsflxcs345350" + 214042: + name: "Clear-sky surface uv spectral flux (350-355 nm)" + alternative_names: + - "uvsflxcs350355" + 214043: + name: "Clear-sky surface uv spectral flux (355-360 nm)" + alternative_names: + - "uvsflxcs355360" + 214044: + name: "Clear-sky surface uv spectral flux (360-365 nm)" + alternative_names: + - "uvsflxcs360365" + 214045: + name: "Clear-sky surface uv spectral flux (365-370 nm)" + alternative_names: + - "uvsflxcs365370" + 214046: + name: "Clear-sky surface uv spectral flux (370-375 nm)" + alternative_names: + - "uvsflxcs370375" + 214047: + name: "Clear-sky surface uv spectral flux (375-380 nm)" + alternative_names: + - "uvsflxcs375380" + 214048: + name: "Clear-sky surface uv spectral flux (380-385 nm)" + alternative_names: + - "uvsflxcs380385" + 214049: + name: "Clear-sky surface uv spectral flux (385-390 nm)" + alternative_names: + - "uvsflxcs385390" + 214050: + name: "Clear-sky surface uv spectral flux (390-395 nm)" + alternative_names: + - "uvsflxcs390395" + 214051: + name: "Clear-sky surface uv spectral flux (395-400 nm)" + alternative_names: + - "uvsflxcs395400" + 214052: + name: "Profile of optical thickness at 340 nm" + alternative_names: + - "aot340" + 215001: + name: "Source/gain of sea salt aerosol (0.03 - 0.5 um)" + alternative_names: + - "aersrcsss" + 215002: + name: "Source/gain of sea salt aerosol (0.5 - 5 um)" + alternative_names: + - "aersrcssm" + 215003: + name: "Source/gain of sea salt aerosol (5 - 20 um)" + alternative_names: + - "aersrcssl" + 215004: + name: "Dry deposition of sea salt aerosol (0.03 - 0.5 um)" + alternative_names: + - "aerddpsss" + 215005: + name: "Dry deposition of sea salt aerosol (0.5 - 5 um)" + alternative_names: + - "aerddpssm" + 215006: + name: "Dry deposition of sea salt aerosol (5 - 20 um)" + alternative_names: + - "aerddpssl" + 215007: + name: "Sedimentation of sea salt aerosol (0.03 - 0.5 um)" + alternative_names: + - "aersdmsss" + 215008: + name: "Sedimentation of sea salt aerosol (0.5 - 5 um)" + alternative_names: + - "aersdmssm" + 215009: + name: "Sedimentation of sea salt aerosol (5 - 20 um)" + alternative_names: + - "aersdmssl" + 215010: + name: "Wet deposition of sea salt aerosol (0.03 - 0.5 um) by large-scale precipitation" + alternative_names: + - "aerwdlssss" + 215011: + name: "Wet deposition of sea salt aerosol (0.5 - 5 um) by large-scale precipitation" + alternative_names: + - "aerwdlsssm" + 215012: + name: "Wet deposition of sea salt aerosol (5 - 20 um) by large-scale precipitation" + alternative_names: + - "aerwdlsssl" + 215013: + name: "Wet deposition of sea salt aerosol (0.03 - 0.5 um) by convective precipitation" + alternative_names: + - "aerwdccsss" + 215014: + name: "Wet deposition of sea salt aerosol (0.5 - 5 um) by convective precipitation" + alternative_names: + - "aerwdccssm" + 215015: + name: "Wet deposition of sea salt aerosol (5 - 20 um) by convective precipitation" + alternative_names: + - "aerwdccssl" + 215016: + name: "Negative fixer of sea salt aerosol (0.03 - 0.5 um)" + alternative_names: + - "aerngtsss" + 215017: + name: "Negative fixer of sea salt aerosol (0.5 - 5 um)" + alternative_names: + - "aerngtssm" + 215018: + name: "Negative fixer of sea salt aerosol (5 - 20 um)" + alternative_names: + - "aerngtssl" + 215019: + name: "Vertically integrated mass of sea salt aerosol (0.03 - 0.5 um)" + alternative_names: + - "aermsssss" + 215020: + name: "Vertically integrated mass of sea salt aerosol (0.5 - 5 um)" + alternative_names: + - "aermssssm" + 215021: + name: "Vertically integrated mass of sea salt aerosol (5 - 20 um)" + alternative_names: + - "aermssssl" + 215022: + name: "Sea salt aerosol (0.03 - 0.5 um) optical depth" + alternative_names: + - "aerodsss" + 215023: + name: "Sea salt aerosol (0.5 - 5 um) optical depth" + alternative_names: + - "aerodssm" + 215024: + name: "Sea salt aerosol (5 - 20 um) optical depth" + alternative_names: + - "aerodssl" + 215025: + name: "Source/gain of dust aerosol (0.03 - 0.55 um)" + alternative_names: + - "aersrcdus" + 215026: + name: "Source/gain of dust aerosol (0.55 - 9 um)" + alternative_names: + - "aersrcdum" + 215027: + name: "Source/gain of dust aerosol (9 - 20 um)" + alternative_names: + - "aersrcdul" + 215028: + name: "Dry deposition of dust aerosol (0.03 - 0.55 um)" + alternative_names: + - "aerddpdus" + 215029: + name: "Dry deposition of dust aerosol (0.55 - 9 um)" + alternative_names: + - "aerddpdum" + 215030: + name: "Dry deposition of dust aerosol (9 - 20 um)" + alternative_names: + - "aerddpdul" + 215031: + name: "Sedimentation of dust aerosol (0.03 - 0.55 um)" + alternative_names: + - "aersdmdus" + 215032: + name: "Sedimentation of dust aerosol (0.55 - 9 um)" + alternative_names: + - "aersdmdum" + 215033: + name: "Sedimentation of dust aerosol (9 - 20 um)" + alternative_names: + - "aersdmdul" + 215034: + name: "Wet deposition of dust aerosol (0.03 - 0.55 um) by large-scale precipitation" + alternative_names: + - "aerwdlsdus" + 215035: + name: "Wet deposition of dust aerosol (0.55 - 9 um) by large-scale precipitation" + alternative_names: + - "aerwdlsdum" + 215036: + name: "Wet deposition of dust aerosol (9 - 20 um) by large-scale precipitation" + alternative_names: + - "aerwdlsdul" + 215037: + name: "Wet deposition of dust aerosol (0.03 - 0.55 um) by convective precipitation" + alternative_names: + - "aerwdccdus" + 215038: + name: "Wet deposition of dust aerosol (0.55 - 9 um) by convective precipitation" + alternative_names: + - "aerwdccdum" + 215039: + name: "Wet deposition of dust aerosol (9 - 20 um) by convective precipitation" + alternative_names: + - "aerwdccdul" + 215040: + name: "Negative fixer of dust aerosol (0.03 - 0.55 um)" + alternative_names: + - "aerngtdus" + 215041: + name: "Negative fixer of dust aerosol (0.55 - 9 um)" + alternative_names: + - "aerngtdum" + 215042: + name: "Negative fixer of dust aerosol (9 - 20 um)" + alternative_names: + - "aerngtdul" + 215043: + name: "Vertically integrated mass of dust aerosol (0.03 - 0.55 um)" + alternative_names: + - "aermssdus" + 215044: + name: "Vertically integrated mass of dust aerosol (0.55 - 9 um)" + alternative_names: + - "aermssdum" + 215045: + name: "Vertically integrated mass of dust aerosol (9 - 20 um)" + alternative_names: + - "aermssdul" + 215046: + name: "Dust aerosol (0.03 - 0.55 um) optical depth" + alternative_names: + - "aeroddus" + 215047: + name: "Dust aerosol (0.55 - 9 um) optical depth" + alternative_names: + - "aeroddum" + 215048: + name: "Dust aerosol (9 - 20 um) optical depth" + alternative_names: + - "aeroddul" + 215049: + name: "Source/gain of hydrophobic organic matter aerosol" + alternative_names: + - "aersrcomhphob" + 215050: + name: "Source/gain of hydrophilic organic matter aerosol" + alternative_names: + - "aersrcomhphil" + 215051: + name: "Dry deposition of hydrophobic organic matter aerosol" + alternative_names: + - "aerddpomhphob" + 215052: + name: "Dry deposition of hydrophilic organic matter aerosol" + alternative_names: + - "aerddpomhphil" + 215053: + name: "Sedimentation of hydrophobic organic matter aerosol" + alternative_names: + - "aersdmomhphob" + 215054: + name: "Sedimentation of hydrophilic organic matter aerosol" + alternative_names: + - "aersdmomhphil" + 215055: + name: "Wet deposition of hydrophobic organic matter aerosol by large-scale precipitation" + alternative_names: + - "aerwdlsomhphob" + 215056: + name: "Wet deposition of hydrophilic organic matter aerosol by large-scale precipitation" + alternative_names: + - "aerwdlsomhphil" + 215057: + name: "Wet deposition of hydrophobic organic matter aerosol by convective precipitation" + alternative_names: + - "aerwdccomhphob" + 215058: + name: "Wet deposition of hydrophilic organic matter aerosol by convective precipitation" + alternative_names: + - "aerwdccomhphil" + 215059: + name: "Negative fixer of hydrophobic organic matter aerosol" + alternative_names: + - "aerngtomhphob" + 215060: + name: "Negative fixer of hydrophilic organic matter aerosol" + alternative_names: + - "aerngtomhphil" + 215061: + name: "Vertically integrated mass of hydrophobic organic matter aerosol" + alternative_names: + - "aermssomhphob" + 215062: + name: "Vertically integrated mass of hydrophilic organic matter aerosol" + alternative_names: + - "aermssomhphil" + 215063: + name: "Hydrophobic organic matter aerosol optical depth" + alternative_names: + - "aerodomhphob" + 215064: + name: "Hydrophilic organic matter aerosol optical depth" + alternative_names: + - "aerodomhphil" + 215065: + name: "Source/gain of hydrophobic black carbon aerosol" + alternative_names: + - "aersrcbchphob" + 215066: + name: "Source/gain of hydrophilic black carbon aerosol" + alternative_names: + - "aersrcbchphil" + 215067: + name: "Dry deposition of hydrophobic black carbon aerosol" + alternative_names: + - "aerddpbchphob" + 215068: + name: "Dry deposition of hydrophilic black carbon aerosol" + alternative_names: + - "aerddpbchphil" + 215069: + name: "Sedimentation of hydrophobic black carbon aerosol" + alternative_names: + - "aersdmbchphob" + 215070: + name: "Sedimentation of hydrophilic black carbon aerosol" + alternative_names: + - "aersdmbchphil" + 215071: + name: "Wet deposition of hydrophobic black carbon aerosol by large-scale precipitation" + alternative_names: + - "aerwdlsbchphob" + 215072: + name: "Wet deposition of hydrophilic black carbon aerosol by large-scale precipitation" + alternative_names: + - "aerwdlsbchphil" + 215073: + name: "Wet deposition of hydrophobic black carbon aerosol by convective precipitation" + alternative_names: + - "aerwdccbchphob" + 215074: + name: "Wet deposition of hydrophilic black carbon aerosol by convective precipitation" + alternative_names: + - "aerwdccbchphil" + 215075: + name: "Negative fixer of hydrophobic black carbon aerosol" + alternative_names: + - "aerngtbchphob" + 215076: + name: "Negative fixer of hydrophilic black carbon aerosol" + alternative_names: + - "aerngtbchphil" + 215077: + name: "Vertically integrated mass of hydrophobic black carbon aerosol" + alternative_names: + - "aermssbchphob" + 215078: + name: "Vertically integrated mass of hydrophilic black carbon aerosol" + alternative_names: + - "aermssbchphil" + 215079: + name: "Hydrophobic black carbon aerosol optical depth" + alternative_names: + - "aerodbchphob" + 215080: + name: "Hydrophilic black carbon aerosol optical depth" + alternative_names: + - "aerodbchphil" + 215081: + name: "Source/gain of sulphate aerosol" + alternative_names: + - "aersrcsu" + 215082: + name: "Dry deposition of sulphate aerosol" + alternative_names: + - "aerddpsu" + 215083: + name: "Sedimentation of sulphate aerosol" + alternative_names: + - "aersdmsu" + 215084: + name: "Wet deposition of sulphate aerosol by large-scale precipitation" + alternative_names: + - "aerwdlssu" + 215085: + name: "Wet deposition of sulphate aerosol by convective precipitation" + alternative_names: + - "aerwdccsu" + 215086: + name: "Negative fixer of sulphate aerosol" + alternative_names: + - "aerngtsu" + 215087: + name: "Vertically integrated mass of sulphate aerosol" + alternative_names: + - "aermsssu" + 215088: + name: "Sulphate aerosol optical depth" + alternative_names: + - "aerodsu" + 215089: + name: "Accumulated total aerosol optical depth at 550 nm" + alternative_names: + - "accaod550" + 215090: + name: "Effective (snow effect included) uv visible albedo for direct radiation" + alternative_names: + - "aluvpsn" + 215091: + name: "10 metre wind speed dust emission potential" + alternative_names: + - "aerdep10si" + 215092: + name: "10 metre wind gustiness dust emission potential" + alternative_names: + - "aerdep10fg" + 215093: + name: "Total aerosol optical thickness at 532 nm" + alternative_names: + - "aot532" + 215094: + name: "Natural (sea-salt and dust) aerosol optical thickness at 532 nm" + alternative_names: + - "naot532" + 215095: + name: + "Anthropogenic (black carbon, organic matter, sulphate) aerosol optical + thickness at 532 nm" + alternative_names: + - "aaot532" + 215096: + name: "Total absorption aerosol optical depth at 340 nm" + alternative_names: + - "aodabs340" + 215097: + name: "Total absorption aerosol optical depth at 355 nm" + alternative_names: + - "aodabs355" + 215098: + name: "Total absorption aerosol optical depth at 380 nm" + alternative_names: + - "aodabs380" + 215099: + name: "Total absorption aerosol optical depth at 400 nm" + alternative_names: + - "aodabs400" + 215100: + name: "Total absorption aerosol optical depth at 440 nm" + alternative_names: + - "aodabs440" + 215101: + name: "Total absorption aerosol optical depth at 469 nm" + alternative_names: + - "aodabs469" + 215102: + name: "Total absorption aerosol optical depth at 500 nm" + alternative_names: + - "aodabs500" + 215103: + name: "Total absorption aerosol optical depth at 532 nm" + alternative_names: + - "aodabs532" + 215104: + name: "Total absorption aerosol optical depth at 550 nm" + alternative_names: + - "aodabs550" + 215105: + name: "Total absorption aerosol optical depth at 645 nm" + alternative_names: + - "aodabs645" + 215106: + name: "Total absorption aerosol optical depth at 670 nm" + alternative_names: + - "aodabs670" + 215107: + name: "Total absorption aerosol optical depth at 800 nm" + alternative_names: + - "aodabs800" + 215108: + name: "Total absorption aerosol optical depth at 858 nm" + alternative_names: + - "aodabs858" + 215109: + name: "Total absorption aerosol optical depth at 865 nm" + alternative_names: + - "aodabs865" + 215110: + name: "Total absorption aerosol optical depth at 1020 nm" + alternative_names: + - "aodabs1020" + 215111: + name: "Total absorption aerosol optical depth at 1064 nm" + alternative_names: + - "aodabs1064" + 215112: + name: "Total absorption aerosol optical depth at 1240 nm" + alternative_names: + - "aodabs1240" + 215113: + name: "Total absorption aerosol optical depth at 1640 nm" + alternative_names: + - "aodabs1640" + 215114: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 340 nm" + alternative_names: + - "aodfm340" + 215115: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 355 nm" + alternative_names: + - "aodfm355" + 215116: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 380 nm" + alternative_names: + - "aodfm380" + 215117: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 400 nm" + alternative_names: + - "aodfm400" + 215118: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 440 nm" + alternative_names: + - "aodfm440" + 215119: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 469 nm" + alternative_names: + - "aodfm469" + 215120: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 500 nm" + alternative_names: + - "aodfm500" + 215121: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 532 nm" + alternative_names: + - "aodfm532" + 215122: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 550 nm" + alternative_names: + - "aodfm550" + 215123: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 645 nm" + alternative_names: + - "aodfm645" + 215124: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 670 nm" + alternative_names: + - "aodfm670" + 215125: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 800 nm" + alternative_names: + - "aodfm800" + 215126: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 858 nm" + alternative_names: + - "aodfm858" + 215127: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 865 nm" + alternative_names: + - "aodfm865" + 215128: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 1020 nm" + alternative_names: + - "aodfm1020" + 215129: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 1064 nm" + alternative_names: + - "aodfm1064" + 215130: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 1240 nm" + alternative_names: + - "aodfm1240" + 215131: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 1640 nm" + alternative_names: + - "aodfm1640" + 215132: + name: "Single scattering albedo at 340 nm" + alternative_names: + - "ssa340" + 215133: + name: "Single scattering albedo at 355 nm" + alternative_names: + - "ssa355" + 215134: + name: "Single scattering albedo at 380 nm" + alternative_names: + - "ssa380" + 215135: + name: "Single scattering albedo at 400 nm" + alternative_names: + - "ssa400" + 215136: + name: "Single scattering albedo at 440 nm" + alternative_names: + - "ssa440" + 215137: + name: "Single scattering albedo at 469 nm" + alternative_names: + - "ssa469" + 215138: + name: "Single scattering albedo at 500 nm" + alternative_names: + - "ssa500" + 215139: + name: "Single scattering albedo at 532 nm" + alternative_names: + - "ssa532" + 215140: + name: "Single scattering albedo at 550 nm" + alternative_names: + - "ssa550" + 215141: + name: "Single scattering albedo at 645 nm" + alternative_names: + - "ssa645" + 215142: + name: "Single scattering albedo at 670 nm" + alternative_names: + - "ssa670" + 215143: + name: "Single scattering albedo at 800 nm" + alternative_names: + - "ssa800" + 215144: + name: "Single scattering albedo at 858 nm" + alternative_names: + - "ssa858" + 215145: + name: "Single scattering albedo at 865 nm" + alternative_names: + - "ssa865" + 215146: + name: "Single scattering albedo at 1020 nm" + alternative_names: + - "ssa1020" + 215147: + name: "Single scattering albedo at 1064 nm" + alternative_names: + - "ssa1064" + 215148: + name: "Single scattering albedo at 1240 nm" + alternative_names: + - "ssa1240" + 215149: + name: "Single scattering albedo at 1640 nm" + alternative_names: + - "ssa1640" + 215150: + name: "Asymmetry factor at 340 nm" + alternative_names: + - "asymmetry340" + 215151: + name: "Asymmetry factor at 355 nm" + alternative_names: + - "asymmetry355" + 215152: + name: "Asymmetry factor at 380 nm" + alternative_names: + - "asymmetry380" + 215153: + name: "Asymmetry factor at 400 nm" + alternative_names: + - "asymmetry400" + 215154: + name: "Asymmetry factor at 440 nm" + alternative_names: + - "asymmetry440" + 215155: + name: "Asymmetry factor at 469 nm" + alternative_names: + - "asymmetry469" + 215156: + name: "Asymmetry factor at 500 nm" + alternative_names: + - "asymmetry500" + 215157: + name: "Asymmetry factor at 532 nm" + alternative_names: + - "asymmetry532" + 215158: + name: "Asymmetry factor at 550 nm" + alternative_names: + - "asymmetry550" + 215159: + name: "Asymmetry factor at 645 nm" + alternative_names: + - "asymmetry645" + 215160: + name: "Asymmetry factor at 670 nm" + alternative_names: + - "asymmetry670" + 215161: + name: "Asymmetry factor at 800 nm" + alternative_names: + - "asymmetry800" + 215162: + name: "Asymmetry factor at 858 nm" + alternative_names: + - "asymmetry858" + 215163: + name: "Asymmetry factor at 865 nm" + alternative_names: + - "asymmetry865" + 215164: + name: "Asymmetry factor at 1020 nm" + alternative_names: + - "asymmetry1020" + 215165: + name: "Asymmetry factor at 1064 nm" + alternative_names: + - "asymmetry1064" + 215166: + name: "Asymmetry factor at 1240 nm" + alternative_names: + - "asymmetry1240" + 215167: + name: "Asymmetry factor at 1640 nm" + alternative_names: + - "asymmetry1640" + 215168: + name: "Source/gain of sulphur dioxide" + alternative_names: + - "aersrcso2" + 215169: + name: "Dry deposition of sulphur dioxide" + alternative_names: + - "aerddpso2" + 215170: + name: "Sedimentation of sulphur dioxide" + alternative_names: + - "aersdmso2" + 215171: + name: "Wet deposition of sulphur dioxide by large-scale precipitation" + alternative_names: + - "aerwdlsso2" + 215172: + name: "Wet deposition of sulphur dioxide by convective precipitation" + alternative_names: + - "aerwdccso2" + 215173: + name: "Negative fixer of sulphur dioxide" + alternative_names: + - "aerngtso2" + 215174: + name: "Vertically integrated mass of sulphur dioxide" + alternative_names: + - "aermssso2" + 215175: + name: "Sulphur dioxide optical depth" + alternative_names: + - "aerodso2" + 215176: + name: "Total absorption aerosol optical depth at 2130 nm" + alternative_names: + - "aodabs2130" + 215177: + name: "Total fine mode (r < 0.5 um) aerosol optical depth at 2130 nm" + alternative_names: + - "aodfm2130" + 215178: + name: "Single scattering albedo at 2130 nm" + alternative_names: + - "ssa2130" + 215179: + name: "Asymmetry factor at 2130 nm" + alternative_names: + - "asymmetry2130" + 215180: + name: "Aerosol extinction coefficient at 355 nm" + alternative_names: + - "aerext355" + 215181: + name: "Aerosol extinction coefficient at 532 nm" + alternative_names: + - "aerext532" + 215182: + name: "Aerosol extinction coefficient at 1064 nm" + alternative_names: + - "aerext1064" + 215183: + name: "Aerosol backscatter coefficient at 355 nm (from top of atmosphere)" + alternative_names: + - "aerbackscattoa355" + 215184: + name: "Aerosol backscatter coefficient at 532 nm (from top of atmosphere)" + alternative_names: + - "aerbackscattoa532" + 215185: + name: "Aerosol backscatter coefficient at 1064 nm (from top of atmosphere)" + alternative_names: + - "aerbackscattoa1064" + 215186: + name: "Aerosol backscatter coefficient at 355 nm (from ground)" + alternative_names: + - "aerbackscatgnd355" + 215187: + name: "Aerosol backscatter coefficient at 532 nm (from ground)" + alternative_names: + - "aerbackscatgnd532" + 215188: + name: "Aerosol backscatter coefficient at 1064 nm (from ground)" + alternative_names: + - "aerbackscatgnd1064" + 215189: + name: "Source/gain of fine-mode nitrate aerosol" + alternative_names: + - "aersrcnif" + 215190: + name: "Source/gain of coarse-mode nitrate aerosol" + alternative_names: + - "aersrcnic" + 215191: + name: "Dry deposition of fine-mode nitrate aerosol" + alternative_names: + - "aerddpnif" + 215192: + name: "Dry deposition of coarse-mode nitrate aerosol" + alternative_names: + - "aerddpnic" + 215193: + name: "Sedimentation of fine-mode nitrate aerosol" + alternative_names: + - "aersdmnif" + 215194: + name: "Sedimentation of coarse-mode nitrate aerosol" + alternative_names: + - "aersdmnic" + 215195: + name: "Wet deposition of fine-mode nitrate aerosol by large-scale precipitation" + alternative_names: + - "aerwdlnif" + 215196: + name: "Wet deposition of coarse-mode nitrate aerosol by large-scale precipitation" + alternative_names: + - "aerwdlnic" + 215197: + name: "Wet deposition of fine-mode nitrate aerosol by convective precipitation" + alternative_names: + - "aerwdcnif" + 215198: + name: "Wet deposition of coarse-mode nitrate aerosol by convective precipitation" + alternative_names: + - "aerwdcnic" + 215199: + name: "Negative fixer of fine-mode nitrate aerosol" + alternative_names: + - "aerngtnif" + 215200: + name: "Negative fixer of coarse-mode nitrate aerosol" + alternative_names: + - "aerngtnic" + 215201: + name: "Vertically integrated mass of fine-mode nitrate aerosol" + alternative_names: + - "aermssnif" + 215202: + name: "Vertically integrated mass of coarse-mode nitrate aerosol" + alternative_names: + - "aermssnic" + 215203: + name: "Fine-mode nitrate aerosol optical depth at 550 nm" + alternative_names: + - "aerodnif" + 215204: + name: "Coarse-mode nitrate aerosol optical depth at 550 nm" + alternative_names: + - "aerodnic" + 215205: + name: "Source/gain of ammonium aerosol" + alternative_names: + - "aersrcam" + 215206: + name: "Dry deposition of ammonium aerosol" + alternative_names: + - "aerddpam" + 215207: + name: "Sedimentation of ammonium aerosol" + alternative_names: + - "aersdmam" + 215208: + name: "Wet deposition of ammonium aerosol by large-scale precipitation" + alternative_names: + - "aerwdlam" + 215209: + name: "Wet deposition of ammonium aerosol by convective precipitation" + alternative_names: + - "aerwdcam" + 215210: + name: "Negative fixer of ammonium aerosol" + alternative_names: + - "aerngtam" + 215211: + name: "Vertically integrated mass of ammonium aerosol" + alternative_names: + - "aermssam" + 215212: + name: "Source/gain of biogenic secondary organic aerosol" + alternative_names: + - "aersrcsoab" + 215213: + name: "Dry deposition of biogenic secondary organic aerosol" + alternative_names: + - "aerddpsoab" + 215214: + name: "Sedimentation of biogenic secondary organic aerosol" + alternative_names: + - "aersdmsoab" + 215215: + name: "Wet deposition of biogenic secondary organic aerosol by large-scale precipitation" + alternative_names: + - "aerwdlsoab" + 215216: + name: "Wet deposition of biogenic secondary organic aerosol by convective precipitation" + alternative_names: + - "aerwdcsoab" + 215217: + name: "Negative fixer of biogenic secondary organic aerosol" + alternative_names: + - "aerngtsoab" + 215218: + name: "Vertically integrated mass of biogenic secondary organic aerosol" + alternative_names: + - "aermsssoab" + 215219: + name: "Source/gain of anthropogenic secondary organic aerosol" + alternative_names: + - "aersrcsoaa" + 215220: + name: "Dry deposition of anthropogenic secondary organic aerosol" + alternative_names: + - "aerddpsoaa" + 215221: + name: "Sedimentation of anthropogenic secondary organic aerosol" + alternative_names: + - "aersdmsoaa" + 215222: + name: + "Wet deposition of anthropogenic secondary organic aerosol by large-scale + precipitation" + alternative_names: + - "aerwdlsoaa" + 215223: + name: + "Wet deposition of anthropogenic secondary organic aerosol by convective + precipitation" + alternative_names: + - "aerwdcsoaa" + 215224: + name: "Negative fixer of anthropogenic secondary organic aerosol" + alternative_names: + - "aerngtsoaa" + 215225: + name: "Vertically integrated mass of anthropogenic secondary organic aerosol" + alternative_names: + - "aermsssoaa" + 215226: + name: "Secondary organic aerosol optical depth at 550 nm" + alternative_names: + - "soaod550" + 216001: + name: "Experimental product" + alternative_names: + - "_param_216001" + 216002: + name: "Experimental product" + alternative_names: + - "_param_216002" + 216003: + name: "Experimental product" + alternative_names: + - "_param_216003" + 216004: + name: "Experimental product" + alternative_names: + - "_param_216004" + 216005: + name: "Experimental product" + alternative_names: + - "_param_216005" + 216006: + name: "Experimental product" + alternative_names: + - "_param_216006" + 216007: + name: "Experimental product" + alternative_names: + - "_param_216007" + 216008: + name: "Experimental product" + alternative_names: + - "_param_216008" + 216009: + name: "Experimental product" + alternative_names: + - "_param_216009" + 216010: + name: "Experimental product" + alternative_names: + - "_param_216010" + 216011: + name: "Experimental product" + alternative_names: + - "_param_216011" + 216012: + name: "Experimental product" + alternative_names: + - "_param_216012" + 216013: + name: "Experimental product" + alternative_names: + - "_param_216013" + 216014: + name: "Experimental product" + alternative_names: + - "_param_216014" + 216015: + name: "Experimental product" + alternative_names: + - "_param_216015" + 216016: + name: "Experimental product" + alternative_names: + - "_param_216016" + 216017: + name: "Experimental product" + alternative_names: + - "_param_216017" + 216018: + name: "Experimental product" + alternative_names: + - "_param_216018" + 216019: + name: "Experimental product" + alternative_names: + - "_param_216019" + 216020: + name: "Experimental product" + alternative_names: + - "_param_216020" + 216021: + name: "Experimental product" + alternative_names: + - "_param_216021" + 216022: + name: "Experimental product" + alternative_names: + - "_param_216022" + 216023: + name: "Experimental product" + alternative_names: + - "_param_216023" + 216024: + name: "Experimental product" + alternative_names: + - "_param_216024" + 216025: + name: "Experimental product" + alternative_names: + - "_param_216025" + 216026: + name: "Experimental product" + alternative_names: + - "_param_216026" + 216027: + name: "Experimental product" + alternative_names: + - "_param_216027" + 216028: + name: "Experimental product" + alternative_names: + - "_param_216028" + 216029: + name: "Experimental product" + alternative_names: + - "_param_216029" + 216030: + name: "Experimental product" + alternative_names: + - "_param_216030" + 216031: + name: "Experimental product" + alternative_names: + - "_param_216031" + 216032: + name: "Experimental product" + alternative_names: + - "_param_216032" + 216033: + name: "Experimental product" + alternative_names: + - "_param_216033" + 216034: + name: "Experimental product" + alternative_names: + - "_param_216034" + 216035: + name: "Experimental product" + alternative_names: + - "_param_216035" + 216036: + name: "Experimental product" + alternative_names: + - "_param_216036" + 216037: + name: "Experimental product" + alternative_names: + - "_param_216037" + 216038: + name: "Experimental product" + alternative_names: + - "_param_216038" + 216039: + name: "Experimental product" + alternative_names: + - "_param_216039" + 216040: + name: "Experimental product" + alternative_names: + - "_param_216040" + 216041: + name: "Experimental product" + alternative_names: + - "_param_216041" + 216042: + name: "Experimental product" + alternative_names: + - "_param_216042" + 216043: + name: "Experimental product" + alternative_names: + - "_param_216043" + 216044: + name: "Experimental product" + alternative_names: + - "_param_216044" + 216045: + name: "Experimental product" + alternative_names: + - "_param_216045" + 216046: + name: "Experimental product" + alternative_names: + - "_param_216046" + 216047: + name: "Experimental product" + alternative_names: + - "_param_216047" + 216048: + name: "Experimental product" + alternative_names: + - "_param_216048" + 216049: + name: "Experimental product" + alternative_names: + - "_param_216049" + 216050: + name: "Experimental product" + alternative_names: + - "_param_216050" + 216051: + name: "Experimental product" + alternative_names: + - "_param_216051" + 216052: + name: "Experimental product" + alternative_names: + - "_param_216052" + 216053: + name: "Experimental product" + alternative_names: + - "_param_216053" + 216054: + name: "Experimental product" + alternative_names: + - "_param_216054" + 216055: + name: "Experimental product" + alternative_names: + - "_param_216055" + 216056: + name: "Experimental product" + alternative_names: + - "_param_216056" + 216057: + name: "Experimental product" + alternative_names: + - "_param_216057" + 216058: + name: "Experimental product" + alternative_names: + - "_param_216058" + 216059: + name: "Experimental product" + alternative_names: + - "_param_216059" + 216060: + name: "Experimental product" + alternative_names: + - "_param_216060" + 216061: + name: "Experimental product" + alternative_names: + - "_param_216061" + 216062: + name: "Experimental product" + alternative_names: + - "_param_216062" + 216063: + name: "Experimental product" + alternative_names: + - "_param_216063" + 216064: + name: "Experimental product" + alternative_names: + - "_param_216064" + 216065: + name: "Experimental product" + alternative_names: + - "_param_216065" + 216066: + name: "Experimental product" + alternative_names: + - "_param_216066" + 216067: + name: "Experimental product" + alternative_names: + - "_param_216067" + 216068: + name: "Experimental product" + alternative_names: + - "_param_216068" + 216069: + name: "Experimental product" + alternative_names: + - "_param_216069" + 216070: + name: "Experimental product" + alternative_names: + - "_param_216070" + 216071: + name: "Experimental product" + alternative_names: + - "_param_216071" + 216072: + name: "Experimental product" + alternative_names: + - "_param_216072" + 216073: + name: "Experimental product" + alternative_names: + - "_param_216073" + 216074: + name: "Experimental product" + alternative_names: + - "_param_216074" + 216075: + name: "Experimental product" + alternative_names: + - "_param_216075" + 216076: + name: "Experimental product" + alternative_names: + - "_param_216076" + 216077: + name: "Experimental product" + alternative_names: + - "_param_216077" + 216078: + name: "Experimental product" + alternative_names: + - "_param_216078" + 216079: + name: "Experimental product" + alternative_names: + - "_param_216079" + 216080: + name: "Experimental product" + alternative_names: + - "_param_216080" + 216081: + name: "Experimental product" + alternative_names: + - "_param_216081" + 216082: + name: "Experimental product" + alternative_names: + - "_param_216082" + 216083: + name: "Experimental product" + alternative_names: + - "_param_216083" + 216084: + name: "Experimental product" + alternative_names: + - "_param_216084" + 216085: + name: "Experimental product" + alternative_names: + - "_param_216085" + 216086: + name: "Experimental product" + alternative_names: + - "_param_216086" + 216087: + name: "Experimental product" + alternative_names: + - "_param_216087" + 216088: + name: "Experimental product" + alternative_names: + - "_param_216088" + 216089: + name: "Experimental product" + alternative_names: + - "_param_216089" + 216090: + name: "Experimental product" + alternative_names: + - "_param_216090" + 216091: + name: "Experimental product" + alternative_names: + - "_param_216091" + 216092: + name: "Experimental product" + alternative_names: + - "_param_216092" + 216093: + name: "Experimental product" + alternative_names: + - "_param_216093" + 216094: + name: "Experimental product" + alternative_names: + - "_param_216094" + 216095: + name: "Experimental product" + alternative_names: + - "_param_216095" + 216096: + name: "Experimental product" + alternative_names: + - "_param_216096" + 216097: + name: "Experimental product" + alternative_names: + - "_param_216097" + 216098: + name: "Experimental product" + alternative_names: + - "_param_216098" + 216099: + name: "Experimental product" + alternative_names: + - "_param_216099" + 216100: + name: "Experimental product" + alternative_names: + - "_param_216100" + 216101: + name: "Experimental product" + alternative_names: + - "_param_216101" + 216102: + name: "Experimental product" + alternative_names: + - "_param_216102" + 216103: + name: "Experimental product" + alternative_names: + - "_param_216103" + 216104: + name: "Experimental product" + alternative_names: + - "_param_216104" + 216105: + name: "Experimental product" + alternative_names: + - "_param_216105" + 216106: + name: "Experimental product" + alternative_names: + - "_param_216106" + 216107: + name: "Experimental product" + alternative_names: + - "_param_216107" + 216108: + name: "Experimental product" + alternative_names: + - "_param_216108" + 216109: + name: "Experimental product" + alternative_names: + - "_param_216109" + 216110: + name: "Experimental product" + alternative_names: + - "_param_216110" + 216111: + name: "Experimental product" + alternative_names: + - "_param_216111" + 216112: + name: "Experimental product" + alternative_names: + - "_param_216112" + 216113: + name: "Experimental product" + alternative_names: + - "_param_216113" + 216114: + name: "Experimental product" + alternative_names: + - "_param_216114" + 216115: + name: "Experimental product" + alternative_names: + - "_param_216115" + 216116: + name: "Experimental product" + alternative_names: + - "_param_216116" + 216117: + name: "Experimental product" + alternative_names: + - "_param_216117" + 216118: + name: "Experimental product" + alternative_names: + - "_param_216118" + 216119: + name: "Experimental product" + alternative_names: + - "_param_216119" + 216120: + name: "Experimental product" + alternative_names: + - "_param_216120" + 216121: + name: "Experimental product" + alternative_names: + - "_param_216121" + 216122: + name: "Experimental product" + alternative_names: + - "_param_216122" + 216123: + name: "Experimental product" + alternative_names: + - "_param_216123" + 216124: + name: "Experimental product" + alternative_names: + - "_param_216124" + 216125: + name: "Experimental product" + alternative_names: + - "_param_216125" + 216126: + name: "Experimental product" + alternative_names: + - "_param_216126" + 216127: + name: "Experimental product" + alternative_names: + - "_param_216127" + 216128: + name: "Experimental product" + alternative_names: + - "_param_216128" + 216129: + name: "Experimental product" + alternative_names: + - "_param_216129" + 216130: + name: "Experimental product" + alternative_names: + - "_param_216130" + 216131: + name: "Experimental product" + alternative_names: + - "_param_216131" + 216132: + name: "Experimental product" + alternative_names: + - "_param_216132" + 216133: + name: "Experimental product" + alternative_names: + - "_param_216133" + 216134: + name: "Experimental product" + alternative_names: + - "_param_216134" + 216135: + name: "Experimental product" + alternative_names: + - "_param_216135" + 216136: + name: "Experimental product" + alternative_names: + - "_param_216136" + 216137: + name: "Experimental product" + alternative_names: + - "_param_216137" + 216138: + name: "Experimental product" + alternative_names: + - "_param_216138" + 216139: + name: "Experimental product" + alternative_names: + - "_param_216139" + 216140: + name: "Experimental product" + alternative_names: + - "_param_216140" + 216141: + name: "Experimental product" + alternative_names: + - "_param_216141" + 216142: + name: "Experimental product" + alternative_names: + - "_param_216142" + 216143: + name: "Experimental product" + alternative_names: + - "_param_216143" + 216144: + name: "Experimental product" + alternative_names: + - "_param_216144" + 216145: + name: "Experimental product" + alternative_names: + - "_param_216145" + 216146: + name: "Experimental product" + alternative_names: + - "_param_216146" + 216147: + name: "Experimental product" + alternative_names: + - "_param_216147" + 216148: + name: "Experimental product" + alternative_names: + - "_param_216148" + 216149: + name: "Experimental product" + alternative_names: + - "_param_216149" + 216150: + name: "Experimental product" + alternative_names: + - "_param_216150" + 216151: + name: "Experimental product" + alternative_names: + - "_param_216151" + 216152: + name: "Experimental product" + alternative_names: + - "_param_216152" + 216153: + name: "Experimental product" + alternative_names: + - "_param_216153" + 216154: + name: "Experimental product" + alternative_names: + - "_param_216154" + 216155: + name: "Experimental product" + alternative_names: + - "_param_216155" + 216156: + name: "Experimental product" + alternative_names: + - "_param_216156" + 216157: + name: "Experimental product" + alternative_names: + - "_param_216157" + 216158: + name: "Experimental product" + alternative_names: + - "_param_216158" + 216159: + name: "Experimental product" + alternative_names: + - "_param_216159" + 216160: + name: "Experimental product" + alternative_names: + - "_param_216160" + 216161: + name: "Experimental product" + alternative_names: + - "_param_216161" + 216162: + name: "Experimental product" + alternative_names: + - "_param_216162" + 216163: + name: "Experimental product" + alternative_names: + - "_param_216163" + 216164: + name: "Experimental product" + alternative_names: + - "_param_216164" + 216165: + name: "Experimental product" + alternative_names: + - "_param_216165" + 216166: + name: "Experimental product" + alternative_names: + - "_param_216166" + 216167: + name: "Experimental product" + alternative_names: + - "_param_216167" + 216168: + name: "Experimental product" + alternative_names: + - "_param_216168" + 216169: + name: "Experimental product" + alternative_names: + - "_param_216169" + 216170: + name: "Experimental product" + alternative_names: + - "_param_216170" + 216171: + name: "Experimental product" + alternative_names: + - "_param_216171" + 216172: + name: "Experimental product" + alternative_names: + - "_param_216172" + 216173: + name: "Experimental product" + alternative_names: + - "_param_216173" + 216174: + name: "Experimental product" + alternative_names: + - "_param_216174" + 216175: + name: "Experimental product" + alternative_names: + - "_param_216175" + 216176: + name: "Experimental product" + alternative_names: + - "_param_216176" + 216177: + name: "Experimental product" + alternative_names: + - "_param_216177" + 216178: + name: "Experimental product" + alternative_names: + - "_param_216178" + 216179: + name: "Experimental product" + alternative_names: + - "_param_216179" + 216180: + name: "Experimental product" + alternative_names: + - "_param_216180" + 216181: + name: "Experimental product" + alternative_names: + - "_param_216181" + 216182: + name: "Experimental product" + alternative_names: + - "_param_216182" + 216183: + name: "Experimental product" + alternative_names: + - "_param_216183" + 216184: + name: "Experimental product" + alternative_names: + - "_param_216184" + 216185: + name: "Experimental product" + alternative_names: + - "_param_216185" + 216186: + name: "Experimental product" + alternative_names: + - "_param_216186" + 216187: + name: "Experimental product" + alternative_names: + - "_param_216187" + 216188: + name: "Experimental product" + alternative_names: + - "_param_216188" + 216189: + name: "Experimental product" + alternative_names: + - "_param_216189" + 216190: + name: "Experimental product" + alternative_names: + - "_param_216190" + 216191: + name: "Experimental product" + alternative_names: + - "_param_216191" + 216192: + name: "Experimental product" + alternative_names: + - "_param_216192" + 216193: + name: "Experimental product" + alternative_names: + - "_param_216193" + 216194: + name: "Experimental product" + alternative_names: + - "_param_216194" + 216195: + name: "Experimental product" + alternative_names: + - "_param_216195" + 216196: + name: "Experimental product" + alternative_names: + - "_param_216196" + 216197: + name: "Experimental product" + alternative_names: + - "_param_216197" + 216198: + name: "Experimental product" + alternative_names: + - "_param_216198" + 216199: + name: "Experimental product" + alternative_names: + - "_param_216199" + 216200: + name: "Experimental product" + alternative_names: + - "_param_216200" + 216201: + name: "Experimental product" + alternative_names: + - "_param_216201" + 216202: + name: "Experimental product" + alternative_names: + - "_param_216202" + 216203: + name: "Experimental product" + alternative_names: + - "_param_216203" + 216204: + name: "Experimental product" + alternative_names: + - "_param_216204" + 216205: + name: "Experimental product" + alternative_names: + - "_param_216205" + 216206: + name: "Experimental product" + alternative_names: + - "_param_216206" + 216207: + name: "Experimental product" + alternative_names: + - "_param_216207" + 216208: + name: "Experimental product" + alternative_names: + - "_param_216208" + 216209: + name: "Experimental product" + alternative_names: + - "_param_216209" + 216210: + name: "Experimental product" + alternative_names: + - "_param_216210" + 216211: + name: "Experimental product" + alternative_names: + - "_param_216211" + 216212: + name: "Experimental product" + alternative_names: + - "_param_216212" + 216213: + name: "Experimental product" + alternative_names: + - "_param_216213" + 216214: + name: "Experimental product" + alternative_names: + - "_param_216214" + 216215: + name: "Experimental product" + alternative_names: + - "_param_216215" + 216216: + name: "Experimental product" + alternative_names: + - "_param_216216" + 216217: + name: "Experimental product" + alternative_names: + - "_param_216217" + 216218: + name: "Experimental product" + alternative_names: + - "_param_216218" + 216219: + name: "Experimental product" + alternative_names: + - "_param_216219" + 216220: + name: "Experimental product" + alternative_names: + - "_param_216220" + 216221: + name: "Experimental product" + alternative_names: + - "_param_216221" + 216222: + name: "Experimental product" + alternative_names: + - "_param_216222" + 216223: + name: "Experimental product" + alternative_names: + - "_param_216223" + 216224: + name: "Experimental product" + alternative_names: + - "_param_216224" + 216225: + name: "Experimental product" + alternative_names: + - "_param_216225" + 216226: + name: "Experimental product" + alternative_names: + - "_param_216226" + 216227: + name: "Experimental product" + alternative_names: + - "_param_216227" + 216228: + name: "Experimental product" + alternative_names: + - "_param_216228" + 216229: + name: "Experimental product" + alternative_names: + - "_param_216229" + 216230: + name: "Experimental product" + alternative_names: + - "_param_216230" + 216231: + name: "Experimental product" + alternative_names: + - "_param_216231" + 216232: + name: "Experimental product" + alternative_names: + - "_param_216232" + 216233: + name: "Experimental product" + alternative_names: + - "_param_216233" + 216234: + name: "Experimental product" + alternative_names: + - "_param_216234" + 216235: + name: "Experimental product" + alternative_names: + - "_param_216235" + 216236: + name: "Experimental product" + alternative_names: + - "_param_216236" + 216237: + name: "Experimental product" + alternative_names: + - "_param_216237" + 216238: + name: "Experimental product" + alternative_names: + - "_param_216238" + 216239: + name: "Experimental product" + alternative_names: + - "_param_216239" + 216240: + name: "Experimental product" + alternative_names: + - "_param_216240" + 216241: + name: "Experimental product" + alternative_names: + - "_param_216241" + 216242: + name: "Experimental product" + alternative_names: + - "_param_216242" + 216243: + name: "Experimental product" + alternative_names: + - "_param_216243" + 216244: + name: "Experimental product" + alternative_names: + - "_param_216244" + 216245: + name: "Experimental product" + alternative_names: + - "_param_216245" + 216246: + name: "Experimental product" + alternative_names: + - "_param_216246" + 216247: + name: "Experimental product" + alternative_names: + - "_param_216247" + 216248: + name: "Experimental product" + alternative_names: + - "_param_216248" + 216249: + name: "Experimental product" + alternative_names: + - "_param_216249" + 216250: + name: "Experimental product" + alternative_names: + - "_param_216250" + 216251: + name: "Experimental product" + alternative_names: + - "_param_216251" + 216252: + name: "Experimental product" + alternative_names: + - "_param_216252" + 216253: + name: "Experimental product" + alternative_names: + - "_param_216253" + 216254: + name: "Experimental product" + alternative_names: + - "_param_216254" + 216255: + name: "Experimental product" + alternative_names: + - "_param_216255" + 217003: + name: "Hydrogen peroxide" + alternative_names: + - "h2o2" + 217004: + name: "Methane (chemistry)" + alternative_names: + - "ch4_c" + 217006: + name: "Nitric acid" + alternative_names: + - "hno3" + 217007: + name: "Methyl peroxide" + alternative_names: + - "ch3ooh" + 217009: + name: "Paraffins" + alternative_names: + - "par" + 217010: + name: "Ethene" + alternative_names: + - "c2h4" + 217011: + name: "Olefins" + alternative_names: + - "ole" + 217012: + name: "Aldehydes" + alternative_names: + - "ald2" + 217013: + name: "Peroxyacetyl nitrate" + alternative_names: + - "pan" + 217014: + name: "Peroxides" + alternative_names: + - "rooh" + 217015: + name: "Organic nitrates" + alternative_names: + - "onit" + 217016: + name: "Isoprene" + alternative_names: + - "c5h8" + 217018: + name: "Dimethyl sulfide" + alternative_names: + - "dms" + 217019: + name: "Ammonia mass mixing ratio" + alternative_names: + - "nh3" + 217020: + name: "Sulfate" + alternative_names: + - "so4" + 217021: + name: "Ammonium" + alternative_names: + - "nh4" + 217022: + name: "Methane sulfonic acid" + alternative_names: + - "msa" + 217023: + name: "Methyl glyoxal" + alternative_names: + - "ch3cocho" + 217024: + name: "Stratospheric ozone" + alternative_names: + - "o3s" + 217026: + name: "Lead" + alternative_names: + - "pb" + 217027: + name: "Nitrogen monoxide mass mixing ratio" + alternative_names: + - "no" + 217028: + name: "Hydroperoxy radical" + alternative_names: + - "ho2" + 217029: + name: "Methylperoxy radical" + alternative_names: + - "ch3o2" + 217030: + name: "Hydroxyl radical" + alternative_names: + - "oh" + 217032: + name: "Nitrate radical" + alternative_names: + - "no3" + 217033: + name: "Dinitrogen pentoxide" + alternative_names: + - "n2o5" + 217034: + name: "Pernitric acid" + alternative_names: + - "ho2no2" + 217035: + name: "Peroxy acetyl radical" + alternative_names: + - "c2o3" + 217036: + name: "Organic ethers" + alternative_names: + - "ror" + 217037: + name: "Par budget corrector" + alternative_names: + - "rxpar" + 217038: + name: "No to no2 operator" + alternative_names: + - "xo2" + 217039: + name: "No to alkyl nitrate operator" + alternative_names: + - "xo2n" + 217040: + name: "Amine" + alternative_names: + - "nh2" + 217041: + name: "Polar stratospheric cloud" + alternative_names: + - "psc" + 217042: + name: "Methanol" + alternative_names: + - "ch3oh" + 217043: + name: "Formic acid" + alternative_names: + - "hcooh" + 217044: + name: "Methacrylic acid" + alternative_names: + - "mcooh" + 217045: + name: "Ethane" + alternative_names: + - "c2h6" + 217046: + name: "Ethanol" + alternative_names: + - "c2h5oh" + 217047: + name: "Propane" + alternative_names: + - "c3h8" + 217048: + name: "Propene" + alternative_names: + - "c3h6" + 217049: + name: "Terpenes" + alternative_names: + - "c10h16" + 217050: + name: "Methacrolein mvk" + alternative_names: + - "ispd" + 217051: + name: "Nitrate" + alternative_names: + - "no3_a" + 217052: + name: "Acetone" + alternative_names: + - "ch3coch3" + 217053: + name: "Acetone product" + alternative_names: + - "aco2" + 217054: + name: "Ic3h7o2" + alternative_names: + - "ic3h7o2" + 217055: + name: "Hypropo2" + alternative_names: + - "hypropo2" + 217056: + name: "Nitrogen oxides transp" + alternative_names: + - "noxa" + 217057: + name: "Carbon dioxide (chemistry)" + alternative_names: + - "co2_c" + 217058: + name: "Nitrous oxide (chemistry)" + alternative_names: + - "n2o_c" + 217059: + name: "Water vapour (chemistry)" + alternative_names: + - "h2o" + 217060: + name: "Oxygen" + alternative_names: + - "o2" + 217061: + name: "Singlet oxygen" + alternative_names: + - "o2_1s" + 217062: + name: "Singlet delta oxygen" + alternative_names: + - "o2_1d" + 217063: + name: "Chlorine dioxide" + alternative_names: + - "oclo" + 217064: + name: "Chlorine nitrate" + alternative_names: + - "clono2" + 217065: + name: "Hypochlorous acid" + alternative_names: + - "hocl" + 217066: + name: "Chlorine" + alternative_names: + - "cl2" + 217067: + name: "Nitryl chloride" + alternative_names: + - "clno2" + 217068: + name: "Hydrogen bromide" + alternative_names: + - "hbr" + 217069: + name: "Dichlorine dioxide" + alternative_names: + - "cl2o2" + 217070: + name: "Hypobromous acid" + alternative_names: + - "hobr" + 217071: + name: "Trichlorofluoromethane" + alternative_names: + - "cfc11" + 217072: + name: "Dichlorodifluoromethane" + alternative_names: + - "cfc12" + 217073: + name: "Trichlorotrifluoroethane" + alternative_names: + - "cfc113" + 217074: + name: "Dichlorotetrafluoroethane" + alternative_names: + - "cfc114" + 217075: + name: "Chloropentafluoroethane" + alternative_names: + - "cfc115" + 217076: + name: "Tetrachloromethane" + alternative_names: + - "ccl4" + 217077: + name: "Methyl chloroform" + alternative_names: + - "ch3ccl3" + 217078: + name: "Methyl chloride" + alternative_names: + - "ch3cl" + 217079: + name: "Chlorodifluoromethane" + alternative_names: + - "hcfc22" + 217080: + name: "Methyl bromide" + alternative_names: + - "ch3br" + 217081: + name: "Dibromodifluoromethane" + alternative_names: + - "ha1202" + 217082: + name: "Bromochlorodifluoromethane" + alternative_names: + - "ha1211" + 217083: + name: "Trifluorobromomethane" + alternative_names: + - "ha1301" + 217084: + name: "Cbrf2cbrf2" + alternative_names: + - "ha2402" + 217085: + name: "Sulfuric acid" + alternative_names: + - "h2so4" + 217086: + name: "Nitrous acid" + alternative_names: + - "hono" + 217087: + name: "Alkanes low oh rate" + alternative_names: + - "hc3" + 217088: + name: "Alkanes med oh rate" + alternative_names: + - "hc5" + 217089: + name: "Alkanes high oh rate" + alternative_names: + - "hc8" + 217090: + name: "Terminal alkenes" + alternative_names: + - "olt" + 217091: + name: "Internal alkenes" + alternative_names: + - "oli" + 217092: + name: "Ethylperoxy radical" + alternative_names: + - "c2h5o2" + 217093: + name: "Butadiene" + alternative_names: + - "dien" + 217094: + name: "Ethyl hydroperoxide" + alternative_names: + - "c2h5ooh" + 217095: + name: "A-pinene cyclic terpenes" + alternative_names: + - "api" + 217096: + name: "Acetic acid" + alternative_names: + - "ch3cooh" + 217097: + name: "D-limonene cyclic diene" + alternative_names: + - "lim" + 217098: + name: "Acetaldehyde" + alternative_names: + - "ch3cho" + 217099: + name: "Toluene and less reactive aromatics" + alternative_names: + - "tol" + 217100: + name: "Xylene and more reactive aromatics" + alternative_names: + - "xyl" + 217101: + name: "Glycolaldehyde" + alternative_names: + - "glyald" + 217102: + name: "Cresol" + alternative_names: + - "cresol" + 217103: + name: "Acetaldehyde and higher" + alternative_names: + - "ald" + 217104: + name: "Peracetic acid" + alternative_names: + - "ch3coooh" + 217105: + name: "Ketones" + alternative_names: + - "ket" + 217106: + name: "Hoch2ch2o2" + alternative_names: + - "eo2" + 217107: + name: "Glyoxal" + alternative_names: + - "glyoxal" + 217108: + name: "Hoch2ch2o" + alternative_names: + - "eo" + 217109: + name: "Unsaturated dicarbonyls" + alternative_names: + - "dcb" + 217110: + name: "Methacrolein" + alternative_names: + - "macr" + 217111: + name: "Unsaturated hydroxy dicarbonyl" + alternative_names: + - "udd" + 217112: + name: "Isopropyldioxidanyl" + alternative_names: + - "c3h7o2" + 217113: + name: "Hydroxy ketone" + alternative_names: + - "hket" + 217114: + name: "Isopropyl hydroperoxide" + alternative_names: + - "c3h7ooh" + 217115: + name: "C3h6oho2" + alternative_names: + - "po2" + 217116: + name: "C3h6ohooh" + alternative_names: + - "pooh" + 217117: + name: "Higher organic peroxides" + alternative_names: + - "op2" + 217118: + name: "Hydroxyacetone" + alternative_names: + - "hyac" + 217119: + name: "Peroxyacetic acid" + alternative_names: + - "paa" + 217120: + name: "Ch3coch2o2" + alternative_names: + - "ro2" + 217121: + name: "Peroxy radical from c2h6" + alternative_names: + - "ethp" + 217122: + name: "Peroxy radical from hc3" + alternative_names: + - "hc3p" + 217123: + name: "Peroxy radical from hc5" + alternative_names: + - "hc5p" + 217124: + name: "Lumped alkenes" + alternative_names: + - "bigene" + 217125: + name: "Peroxy radical from hc8" + alternative_names: + - "hc8p" + 217126: + name: "Lumped alkanes" + alternative_names: + - "bigalk" + 217127: + name: "Peroxy radical from c2h4" + alternative_names: + - "etep" + 217128: + name: "C4h8o" + alternative_names: + - "mek" + 217129: + name: "Peroxy radical from terminal alkenes" + alternative_names: + - "oltp" + 217130: + name: "C4h9o3" + alternative_names: + - "eneo2" + 217131: + name: "Peroxy radical from internal alkenes" + alternative_names: + - "olip" + 217132: + name: "Ch3coch(oo)ch3" + alternative_names: + - "meko2" + 217133: + name: "Peroxy radical from c5h8" + alternative_names: + - "isopo2" + 217134: + name: "Ch3coch(ooh)ch3" + alternative_names: + - "mekooh" + 217135: + name: "Peroxy radical from a-pinene cyclic terpenes" + alternative_names: + - "apip" + 217136: + name: "Ch2=c(ch3)co3" + alternative_names: + - "mco3" + 217137: + name: "Peroxy radical from d-limonene cyclic diene" + alternative_names: + - "limp" + 217138: + name: "Methylvinylketone" + alternative_names: + - "mvk" + 217139: + name: "Phenoxy radical" + alternative_names: + - "pho" + 217140: + name: "Peroxy radical from toluene and less reactive aromatics" + alternative_names: + - "tolp" + 217141: + name: "Ch3c(o)ch(oo)ch2oh" + alternative_names: + - "macro2" + 217142: + name: "Peroxy radical from xylene and more reactive aromatics" + alternative_names: + - "xylp" + 217143: + name: "H3c(o)ch(ooh)ch2oh" + alternative_names: + - "macrooh" + 217144: + name: "Peroxy radical from cresol" + alternative_names: + - "cslp" + 217145: + name: "Unsaturated pans" + alternative_names: + - "mpan" + 217146: + name: "Unsaturated acyl peroxy radical" + alternative_names: + - "tco3_c" + 217147: + name: "Peroxy radical from ketones" + alternative_names: + - "ketp" + 217148: + name: "C5h11o2" + alternative_names: + - "alko2" + 217149: + name: "No3-alkenes adduct reacting to form carbonitrates" + alternative_names: + - "olnn" + 217150: + name: "C5h11ooh" + alternative_names: + - "alkooh" + 217151: + name: "No3-alkenes adduct reacting via decomposition" + alternative_names: + - "olnd" + 217152: + name: "Hoch2c(ch3)=chcho" + alternative_names: + - "bigald" + 217153: + name: "C5h6o2" + alternative_names: + - "hydrald" + 217154: + name: "Trop sulfuric acid" + alternative_names: + - "sulf" + 217155: + name: "Oxides" + alternative_names: + - "ox" + 217156: + name: "Ch2chc(ch3)(oo)ch2ono2" + alternative_names: + - "isopno3" + 217157: + name: "C3 organic nitrate" + alternative_names: + - "onitr" + 217158: + name: "Chlorine oxides" + alternative_names: + - "clox" + 217159: + name: "Bromine oxides" + alternative_names: + - "brox" + 217160: + name: "Hoch2c(ooh)(ch3)chchoh" + alternative_names: + - "xooh" + 217161: + name: "Hoch2c(ooh)(ch3)ch=ch2" + alternative_names: + - "isopooh" + 217162: + name: "Lumped aromatics" + alternative_names: + - "toluene" + 217163: + name: "Dimethyl sulfoxyde" + alternative_names: + - "dmso" + 217164: + name: "C7h9o5" + alternative_names: + - "tolo2" + 217165: + name: "C7h10o5" + alternative_names: + - "tolooh" + 217166: + name: "Hydrogensulfide" + alternative_names: + - "h2s" + 217167: + name: "C7h10o6" + alternative_names: + - "xoh" + 217168: + name: "All nitrogen oxides" + alternative_names: + - "noy" + 217169: + name: "Chlorine family" + alternative_names: + - "cly" + 217170: + name: "C10h16(oh)(oo)" + alternative_names: + - "terpo2" + 217171: + name: "Bromine family" + alternative_names: + - "bry" + 217172: + name: "C10h18o3" + alternative_names: + - "terpooh" + 217173: + name: "Nitrogen atom" + alternative_names: + - "n" + 217174: + name: "Chlorine monoxide" + alternative_names: + - "clo" + 217175: + name: "Chlorine atom" + alternative_names: + - "cl_c" + 217176: + name: "Bromine monoxide" + alternative_names: + - "bro" + 217177: + name: "Hydrogen atom" + alternative_names: + - "h_c" + 217178: + name: "Methyl group" + alternative_names: + - "ch3" + 217179: + name: "Aromatic-ho from toluene and less reactive aromatics" + alternative_names: + - "addt" + 217180: + name: "Aromatic-ho from xylene and more reactive aromatics" + alternative_names: + - "addx" + 217181: + name: "Ammonium nitrate" + alternative_names: + - "nh4no3" + 217182: + name: "Aromatic-ho from csl" + alternative_names: + - "addc" + 217183: + name: "Secondary organic aerosol type 1" + alternative_names: + - "soa1" + 217184: + name: "Secondary organic aerosol type 2a" + alternative_names: + - "soa2a" + 217185: + name: "Secondary organic aerosol type 2b" + alternative_names: + - "soa2b" + 217186: + name: "Condensable gas type 1" + alternative_names: + - "sog1" + 217187: + name: "Condensable gas type 2a" + alternative_names: + - "sog2a" + 217188: + name: "Condensable gas type 2b" + alternative_names: + - "sog2b" + 217189: + name: "Sulfur trioxide" + alternative_names: + - "so3" + 217190: + name: "Carbonyl sulfide" + alternative_names: + - "ocs_c" + 217191: + name: "Bromine atom" + alternative_names: + - "br" + 217192: + name: "Bromine" + alternative_names: + - "br2" + 217193: + name: "Bromine monochloride" + alternative_names: + - "brcl" + 217194: + name: "Bromine nitrate" + alternative_names: + - "brono2" + 217195: + name: "Dibromomethane" + alternative_names: + - "ch2br2" + 217196: + name: "Methoxy radical" + alternative_names: + - "ch3o" + 217197: + name: "Tribromomethane" + alternative_names: + - "chbr3" + 217198: + name: "Asymmetric chlorine dioxide radical" + alternative_names: + - "cloo" + 217199: + name: "Hydrogen" + alternative_names: + - "h2" + 217200: + name: "Hydrogen chloride" + alternative_names: + - "hcl" + 217201: + name: "Formyl radical" + alternative_names: + - "hco" + 217202: + name: "Hydrogen fluoride" + alternative_names: + - "hf" + 217203: + name: "Oxygen atom" + alternative_names: + - "o" + 217204: + name: "Excited oxygen atom" + alternative_names: + - "o1d" + 217205: + name: "Ground state oxygen atom" + alternative_names: + - "o3p" + 217206: + name: "Stratospheric aerosol" + alternative_names: + - "strataer" + 217222: + name: "Aromatic peroxy radical mass mixing ratio" + alternative_names: + - "aroo2" + 217223: + name: "Ethyne mass mixing ratio" + alternative_names: + - "c2h2" + 217224: + name: "Acetonitrile mass mixing ratio" + alternative_names: + - "ch3cn" + 217225: + name: "Methyl peroxy nitrate mass mixing ratio" + alternative_names: + - "ch3o2no2" + 217226: + name: "Hydrogen cyanide mass mixing ratio" + alternative_names: + - "hcn" + 217227: + name: "Hydroperoxy aldehydes type 1 mass mixing ratio" + alternative_names: + - "hpald1" + 217228: + name: "Hydroperoxy aldehydes type 2 mass mixing ratio" + alternative_names: + - "hpald" + 217229: + name: "Isoprene peroxy type b mass mixing ratio" + alternative_names: + - "isopbo2" + 217230: + name: "Isoprene peroxy type d mass mixing ratio" + alternative_names: + - "isopdo2" + 217231: + name: "Anthropogenic volatile organic compounds mass mixing ratio" + alternative_names: + - "voca" + 217232: + name: "Biomass burning volatile organic compounds mass mixing ratio" + alternative_names: + - "vocbb" + 218003: + name: "Total column hydrogen peroxide" + alternative_names: + - "tc_h2o2" + 218004: + name: "Total column methane" + alternative_names: + - "tc_ch4" + 218006: + name: "Total column nitric acid" + alternative_names: + - "tc_hno3" + 218007: + name: "Total column methyl peroxide" + alternative_names: + - "tc_ch3ooh" + 218009: + name: "Total column paraffins" + alternative_names: + - "tc_par" + 218010: + name: "Total column ethene" + alternative_names: + - "tc_c2h4" + 218011: + name: "Total column olefins" + alternative_names: + - "tc_ole" + 218012: + name: "Total column aldehydes" + alternative_names: + - "tc_ald2" + 218013: + name: "Total column peroxyacetyl nitrate" + alternative_names: + - "tc_pan" + 218014: + name: "Total column peroxides" + alternative_names: + - "tc_rooh" + 218015: + name: "Total column organic nitrates" + alternative_names: + - "tc_onit" + 218016: + name: "Total column isoprene" + alternative_names: + - "tc_c5h8" + 218018: + name: "Total column dimethyl sulfide" + alternative_names: + - "tc_dms" + 218019: + name: "Total column ammonia" + alternative_names: + - "tc_nh3" + 218020: + name: "Total column sulfate" + alternative_names: + - "tc_so4" + 218021: + name: "Total column ammonium" + alternative_names: + - "tc_nh4" + 218022: + name: "Total column methane sulfonic acid" + alternative_names: + - "tc_msa" + 218023: + name: "Total column methyl glyoxal" + alternative_names: + - "tc_ch3cocho" + 218024: + name: "Total column stratospheric ozone" + alternative_names: + - "tc_o3s" + 218026: + name: "Total column lead" + alternative_names: + - "tc_pb" + 218027: + name: "Total column nitrogen monoxide" + alternative_names: + - "tc_no" + 218028: + name: "Total column hydroperoxy radical" + alternative_names: + - "tc_ho2" + 218029: + name: "Total column methylperoxy radical" + alternative_names: + - "tc_ch3o2" + 218030: + name: "Total column hydroxyl radical" + alternative_names: + - "tc_oh" + 218032: + name: "Total column nitrate radical" + alternative_names: + - "tc_no3" + 218033: + name: "Total column dinitrogen pentoxide" + alternative_names: + - "tc_n2o5" + 218034: + name: "Total column pernitric acid" + alternative_names: + - "tc_ho2no2" + 218035: + name: "Total column peroxy acetyl radical" + alternative_names: + - "tc_c2o3" + 218036: + name: "Total column organic ethers" + alternative_names: + - "tc_ror" + 218037: + name: "Total column par budget corrector" + alternative_names: + - "tc_rxpar" + 218038: + name: "Total column no to no2 operator" + alternative_names: + - "tc_xo2" + 218039: + name: "Total column no to alkyl nitrate operator" + alternative_names: + - "tc_xo2n" + 218040: + name: "Total column amine" + alternative_names: + - "tc_nh2" + 218041: + name: "Total column polar stratospheric cloud" + alternative_names: + - "tc_psc" + 218042: + name: "Total column methanol" + alternative_names: + - "tc_ch3oh" + 218043: + name: "Total column formic acid" + alternative_names: + - "tc_hcooh" + 218044: + name: "Total column methacrylic acid" + alternative_names: + - "tc_mcooh" + 218045: + name: "Total column ethane" + alternative_names: + - "tc_c2h6" + 218046: + name: "Total column ethanol" + alternative_names: + - "tc_c2h5oh" + 218047: + name: "Total column propane" + alternative_names: + - "tc_c3h8" + 218048: + name: "Total column propene" + alternative_names: + - "tc_c3h6" + 218049: + name: "Total column terpenes" + alternative_names: + - "tc_c10h16" + 218050: + name: "Total column methacrolein mvk" + alternative_names: + - "tc_ispd" + 218051: + name: "Total column nitrate" + alternative_names: + - "tc_no3_a" + 218052: + name: "Total column acetone" + alternative_names: + - "tc_ch3coch3" + 218053: + name: "Total column acetone product" + alternative_names: + - "tc_aco2" + 218054: + name: "Total column ic3h7o2" + alternative_names: + - "tc_ic3h7o2" + 218055: + name: "Total column hypropo2" + alternative_names: + - "tc_hypropo2" + 218056: + name: "Total column nitrogen oxides transp" + alternative_names: + - "tc_noxa" + 218057: + name: "Total column of carbon dioxide (chemistry)" + alternative_names: + - "tc_co2_c" + 218058: + name: "Total column of nitrous oxide (chemistry)" + alternative_names: + - "tc_n2o_c" + 218059: + name: "Total column of water vapour (chemistry)" + alternative_names: + - "tc_h2o" + 218060: + name: "Total column of oxygen" + alternative_names: + - "tc_o2" + 218061: + name: "Total column of singlet oxygen" + alternative_names: + - "tc_o2_1s" + 218062: + name: "Total column of singlet delta oxygen" + alternative_names: + - "tc_o2_1d" + 218063: + name: "Total column of chlorine dioxide" + alternative_names: + - "tc_oclo" + 218064: + name: "Total column of chlorine nitrate" + alternative_names: + - "tc_clono2" + 218065: + name: "Total column of hypochlorous acid" + alternative_names: + - "tc_hocl" + 218066: + name: "Total column of chlorine" + alternative_names: + - "tc_cl2" + 218067: + name: "Total column of nitryl chloride" + alternative_names: + - "tc_clno2" + 218068: + name: "Total column of hydrogen bromide" + alternative_names: + - "tc_hbr" + 218069: + name: "Total column of dichlorine dioxide" + alternative_names: + - "tc_cl2o2" + 218070: + name: "Total column of hypobromous acid" + alternative_names: + - "tc_hobr" + 218071: + name: "Total column of trichlorofluoromethane" + alternative_names: + - "tc_cfc11" + 218072: + name: "Total column of dichlorodifluoromethane" + alternative_names: + - "tc_cfc12" + 218073: + name: "Total column of trichlorotrifluoroethane" + alternative_names: + - "tc_cfc113" + 218074: + name: "Total column of dichlorotetrafluoroethane" + alternative_names: + - "tc_cfc114" + 218075: + name: "Total column of chloropentafluoroethane" + alternative_names: + - "tc_cfc115" + 218076: + name: "Total column of tetrachloromethane" + alternative_names: + - "tc_ccl4" + 218077: + name: "Total column of methyl chloroform" + alternative_names: + - "tc_ch3ccl3" + 218078: + name: "Total column of methyl chloride" + alternative_names: + - "tc_ch3cl" + 218079: + name: "Total column of chlorodifluoromethane" + alternative_names: + - "tc_hcfc22" + 218080: + name: "Total column of methyl bromide" + alternative_names: + - "tc_ch3br" + 218081: + name: "Total column of dibromodifluoromethane" + alternative_names: + - "tc_ha1202" + 218082: + name: "Total column of bromochlorodifluoromethane" + alternative_names: + - "tc_ha1211" + 218083: + name: "Total column of trifluorobromomethane" + alternative_names: + - "tc_ha1301" + 218084: + name: "Total column of cbrf2cbrf2" + alternative_names: + - "tc_ha2402" + 218085: + name: "Total column of sulfuric acid" + alternative_names: + - "tc_h2so4" + 218086: + name: "Total column of nitrous acid" + alternative_names: + - "tc_hono" + 218087: + name: "Total column of alkanes low oh rate" + alternative_names: + - "tc_hc3" + 218088: + name: "Total column of alkanes med oh rate" + alternative_names: + - "tc_hc5" + 218089: + name: "Total column of alkanes high oh rate" + alternative_names: + - "tc_hc8" + 218090: + name: "Total column of terminal alkenes" + alternative_names: + - "tc_olt" + 218091: + name: "Total column of internal alkenes" + alternative_names: + - "tc_oli" + 218092: + name: "Total column of ethylperoxy radical" + alternative_names: + - "tc_c2h5o2" + 218093: + name: "Total column of butadiene" + alternative_names: + - "tc_dien" + 218094: + name: "Total column of ethyl hydroperoxide" + alternative_names: + - "tc_c2h5ooh" + 218095: + name: "Total column of a-pinene cyclic terpenes" + alternative_names: + - "tc_api" + 218096: + name: "Total column of acetic acid" + alternative_names: + - "tc_ch3cooh" + 218097: + name: "Total column of d-limonene cyclic diene" + alternative_names: + - "tc_lim" + 218098: + name: "Total column of acetaldehyde" + alternative_names: + - "tc_ch3cho" + 218099: + name: "Total column of toluene and less reactive aromatics" + alternative_names: + - "tc_tol" + 218100: + name: "Total column of xylene and more reactive aromatics" + alternative_names: + - "tc_xyl" + 218101: + name: "Total column of glycolaldehyde" + alternative_names: + - "tc_glyald" + 218102: + name: "Total column of cresol" + alternative_names: + - "tc_cresol" + 218103: + name: "Total column of acetaldehyde and higher" + alternative_names: + - "tc_ald" + 218104: + name: "Total column of peracetic acid" + alternative_names: + - "tc_ch3coooh" + 218105: + name: "Total column of ketones" + alternative_names: + - "tc_ket" + 218106: + name: "Total column of hoch2ch2o2" + alternative_names: + - "tc_eo2" + 218107: + name: "Total column of glyoxal" + alternative_names: + - "tc_glyoxal" + 218108: + name: "Total column of hoch2ch2o" + alternative_names: + - "tc_eo" + 218109: + name: "Total column of unsaturated dicarbonyls" + alternative_names: + - "tc_dcb" + 218110: + name: "Total column of methacrolein" + alternative_names: + - "tc_macr" + 218111: + name: "Total column of unsaturated hydroxy dicarbonyl" + alternative_names: + - "tc_udd" + 218112: + name: "Total column of isopropyldioxidanyl" + alternative_names: + - "tc_c3h7o2" + 218113: + name: "Total column of hydroxy ketone" + alternative_names: + - "tc_hket" + 218114: + name: "Total column of isopropyl hydroperoxide" + alternative_names: + - "tc_c3h7ooh" + 218115: + name: "Total column of c3h6oho2" + alternative_names: + - "tc_po2" + 218116: + name: "Total column of c3h6ohooh" + alternative_names: + - "tc_pooh" + 218117: + name: "Total column of higher organic peroxides" + alternative_names: + - "tc_op2" + 218118: + name: "Total column of hydroxyacetone" + alternative_names: + - "tc_hyac" + 218119: + name: "Total column of peroxyacetic acid" + alternative_names: + - "tc_paa" + 218120: + name: "Total column of ch3coch2o2" + alternative_names: + - "tc_ro2" + 218121: + name: "Total column of peroxy radical from c2h6" + alternative_names: + - "tc_ethp" + 218122: + name: "Total column of peroxy radical from hc3" + alternative_names: + - "tc_hc3p" + 218123: + name: "Total column of peroxy radical from hc5" + alternative_names: + - "tc_hc5p" + 218124: + name: "Total column of lumped alkenes" + alternative_names: + - "tc_bigene" + 218125: + name: "Total column of peroxy radical from hc8" + alternative_names: + - "tc_hc8p" + 218126: + name: "Total column of lumped alkanes" + alternative_names: + - "tc_bigalk" + 218127: + name: "Total column of peroxy radical from c2h4" + alternative_names: + - "tc_etep" + 218128: + name: "Total column of c4h8o" + alternative_names: + - "tc_mek" + 218129: + name: "Total column of peroxy radical from terminal alkenes" + alternative_names: + - "tc_oltp" + 218130: + name: "Total column of c4h9o3" + alternative_names: + - "tc_eneo2" + 218131: + name: "Total column of peroxy radical from internal alkenes" + alternative_names: + - "tc_olip" + 218132: + name: "Total column of ch3coch(oo)ch3" + alternative_names: + - "tc_meko2" + 218133: + name: "Total column of peroxy radical from c5h8" + alternative_names: + - "tc_isopo2" + 218134: + name: "Total column of ch3coch(ooh)ch3" + alternative_names: + - "tc_mekooh" + 218135: + name: "Total column of peroxy radical from a-pinene cyclic terpenes" + alternative_names: + - "tc_apip" + 218136: + name: "Total column of ch2=c(ch3)co3" + alternative_names: + - "tc_mco3" + 218137: + name: "Total column of peroxy radical from d-limonene cyclic diene" + alternative_names: + - "tc_limp" + 218138: + name: "Total column of methylvinylketone" + alternative_names: + - "tc_mvk" + 218139: + name: "Total column of phenoxy radical" + alternative_names: + - "tc_pho" + 218140: + name: "Total column of peroxy radical from toluene and less reactive aromatics" + alternative_names: + - "tc_tolp" + 218141: + name: "Total column of ch3c(o)ch(oo)ch2oh" + alternative_names: + - "tc_macro2" + 218142: + name: "Total column of peroxy radical from xylene and more reactive aromatics" + alternative_names: + - "tc_xylp" + 218143: + name: "Total column of h3c(o)ch(ooh)ch2oh" + alternative_names: + - "tc_macrooh" + 218144: + name: "Total column of peroxy radical from cresol" + alternative_names: + - "tc_cslp" + 218145: + name: "Total column of unsaturated pans" + alternative_names: + - "tc_mpan" + 218146: + name: "Total column of unsaturated acyl peroxy radical" + alternative_names: + - "tc_tco3_c" + 218147: + name: "Total column of peroxy radical from ketones" + alternative_names: + - "tc_ketp" + 218148: + name: "Total column of c5h11o2" + alternative_names: + - "tc_alko2" + 218149: + name: "Total column of no3-alkenes adduct reacting to form carbonitrates" + alternative_names: + - "tc_olnn" + 218150: + name: "Total column of c5h11ooh" + alternative_names: + - "tc_alkooh" + 218151: + name: "Total column of no3-alkenes adduct reacting via decomposition" + alternative_names: + - "tc_olnd" + 218152: + name: "Total column of hoch2c(ch3)=chcho" + alternative_names: + - "tc_bigald" + 218153: + name: "Total column of c5h6o2" + alternative_names: + - "tc_hydrald" + 218154: + name: "Total column of trop sulfuric acid" + alternative_names: + - "tc_sulf" + 218155: + name: "Total column of oxides" + alternative_names: + - "tc_ox" + 218156: + name: "Total column of ch2chc(ch3)(oo)ch2ono2" + alternative_names: + - "tc_isopno3" + 218157: + name: "Total column of c3 organic nitrate" + alternative_names: + - "tc_onitr" + 218158: + name: "Total column of chlorine oxides" + alternative_names: + - "tc_clox" + 218159: + name: "Total column of bromine oxides" + alternative_names: + - "tc_brox" + 218160: + name: "Total column of hoch2c(ooh)(ch3)chchoh" + alternative_names: + - "tc_xooh" + 218161: + name: "Total column of hoch2c(ooh)(ch3)ch=ch2" + alternative_names: + - "tc_isopooh" + 218162: + name: "Total column of lumped aromatics" + alternative_names: + - "tc_toluene" + 218163: + name: "Total column of dimethyl sulfoxyde" + alternative_names: + - "tc_dmso" + 218164: + name: "Total column of c7h9o5" + alternative_names: + - "tc_tolo2" + 218165: + name: "Total column of c7h10o5" + alternative_names: + - "tc_tolooh" + 218166: + name: "Total column of hydrogensulfide" + alternative_names: + - "tc_h2s" + 218167: + name: "Total column of c7h10o6" + alternative_names: + - "tc_xoh" + 218168: + name: "Total column of all nitrogen oxides" + alternative_names: + - "tc_noy" + 218169: + name: "Total column of chlorine family" + alternative_names: + - "tc_cly" + 218170: + name: "Total column of c10h16(oh)(oo)" + alternative_names: + - "tc_terpo2" + 218171: + name: "Total column of bromine family" + alternative_names: + - "tc_bry" + 218172: + name: "Total column of c10h18o3" + alternative_names: + - "tc_terpooh" + 218173: + name: "Total column of nitrogen atom" + alternative_names: + - "tc_n" + 218174: + name: "Total column of chlorine monoxide" + alternative_names: + - "tc_clo" + 218175: + name: "Total column of chlorine atom" + alternative_names: + - "tc_cl_c" + 218176: + name: "Total column of bromine monoxide" + alternative_names: + - "tc_bro" + 218177: + name: "Total column of hydrogen atom" + alternative_names: + - "tc_h_c" + 218178: + name: "Total column of methyl group" + alternative_names: + - "tc_ch3" + 218179: + name: "Total column of aromatic-ho from toluene and less reactive aromatics" + alternative_names: + - "tc_addt" + 218180: + name: "Total column of aromatic-ho from xylene and more reactive aromatics" + alternative_names: + - "tc_addx" + 218181: + name: "Total column of ammonium nitrate" + alternative_names: + - "tc_nh4no3" + 218182: + name: "Total column of aromatic-ho from csl" + alternative_names: + - "tc_addc" + 218183: + name: "Total column of secondary organic aerosol type 1" + alternative_names: + - "tc_soa1" + 218184: + name: "Total column of secondary organic aerosol type 2a" + alternative_names: + - "tc_soa2a" + 218185: + name: "Total column of secondary organic aerosol type 2b" + alternative_names: + - "tc_soa2b" + 218186: + name: "Total column of condensable gas type 1" + alternative_names: + - "tc_sog1" + 218187: + name: "Total column of condensable gas type 2a" + alternative_names: + - "tc_sog2a" + 218188: + name: "Total column of condensable gas type 2b" + alternative_names: + - "tc_sog2b" + 218189: + name: "Total column of sulfur trioxide" + alternative_names: + - "tc_so3" + 218190: + name: "Total column of carbonyl sulfide" + alternative_names: + - "tc_ocs_c" + 218191: + name: "Total column of bromine atom" + alternative_names: + - "tc_br" + 218192: + name: "Total column of bromine" + alternative_names: + - "tc_br2" + 218193: + name: "Total column of bromine monochloride" + alternative_names: + - "tc_brcl" + 218194: + name: "Total column of bromine nitrate" + alternative_names: + - "tc_brono2" + 218195: + name: "Total column of dibromomethane" + alternative_names: + - "tc_ch2br2" + 218196: + name: "Total column of methoxy radical" + alternative_names: + - "tc_ch3o" + 218197: + name: "Total column of tribromomethane" + alternative_names: + - "tc_chbr3" + 218198: + name: "Total column of asymmetric chlorine dioxide radical" + alternative_names: + - "tc_cloo" + 218199: + name: "Total column of hydrogen" + alternative_names: + - "tc_h2" + 218200: + name: "Total column of hydrogen chloride" + alternative_names: + - "tc_hcl" + 218201: + name: "Total column of formyl radical" + alternative_names: + - "tc_hco" + 218202: + name: "Total column of hydrogen fluoride" + alternative_names: + - "tc_hf" + 218203: + name: "Total column of oxygen atom" + alternative_names: + - "tc_o" + 218204: + name: "Total column of excited oxygen atom" + alternative_names: + - "tc_o1d" + 218205: + name: "Total column of ground state oxygen atom" + alternative_names: + - "tc_o3p" + 218206: + name: "Total column of stratospheric aerosol" + alternative_names: + - "tc_strataer" + 218221: + name: "Column integrated mass density of volcanic sulfur dioxide" + alternative_names: + - "tc_vso2" + 218222: + name: "Column integrated mass density of aromatic peroxy radical" + alternative_names: + - "tc_aroo2" + 218223: + name: "Column integrated mass density of ethyne" + alternative_names: + - "tc_c2h2" + 218224: + name: "Column integrated mass density of acetonitrile" + alternative_names: + - "tc_ch3cn" + 218225: + name: "Column integrated mass density of methyl peroxy nitrate" + alternative_names: + - "tc_ch3o2no2" + 218226: + name: "Column integrated mass density of hydrogen cyanide" + alternative_names: + - "tc_hcn" + 218227: + name: "Column integrated mass density of hydroperoxy aldehydes type 1" + alternative_names: + - "tc_hpald1" + 218228: + name: "Column integrated mass density of hydroperoxy aldehydes type 2" + alternative_names: + - "tc_hpald2" + 218229: + name: "Column integrated mass density of isoprene peroxy type b" + alternative_names: + - "tc_isopbo2" + 218230: + name: "Column integrated mass density of isoprene peroxy type d" + alternative_names: + - "tc_isopdo2" + 218231: + name: "Column integrated mass density of anthropogenic volatile organic compounds" + alternative_names: + - "tc_voca" + 218232: + name: "Column integrated mass density of biomass burning volatile organic compounds" + alternative_names: + - "tc_vocbb" + 219001: + name: "Ozone emissions" + alternative_names: + - "e_go3" + 219002: + name: "Nitrogen oxides emissions" + alternative_names: + - "e_nox" + 219003: + name: "Hydrogen peroxide emissions" + alternative_names: + - "e_h2o2" + 219004: + name: "Methane emissions" + alternative_names: + - "e_ch4" + 219005: + name: "Carbon monoxide emissions" + alternative_names: + - "e_co" + 219006: + name: "Nitric acid emissions" + alternative_names: + - "e_hno3" + 219007: + name: "Methyl peroxide emissions" + alternative_names: + - "e_ch3ooh" + 219008: + name: "Formaldehyde emissions" + alternative_names: + - "e_hcho" + 219009: + name: "Paraffins emissions" + alternative_names: + - "e_par" + 219010: + name: "Ethene emissions" + alternative_names: + - "e_c2h4" + 219011: + name: "Olefins emissions" + alternative_names: + - "e_ole" + 219012: + name: "Aldehydes emissions" + alternative_names: + - "e_ald2" + 219013: + name: "Peroxyacetyl nitrate emissions" + alternative_names: + - "e_pan" + 219014: + name: "Peroxides emissions" + alternative_names: + - "e_rooh" + 219015: + name: "Organic nitrates emissions" + alternative_names: + - "e_onit" + 219016: + name: "Isoprene emissions" + alternative_names: + - "e_c5h8" + 219017: + name: "Sulfur dioxide emissions" + alternative_names: + - "e_so2" + 219018: + name: "Dimethyl sulfide emissions" + alternative_names: + - "e_dms" + 219019: + name: "Ammonia emissions" + alternative_names: + - "e_nh3" + 219020: + name: "Sulfate emissions" + alternative_names: + - "e_so4" + 219021: + name: "Ammonium emissions" + alternative_names: + - "e_nh4" + 219022: + name: "Methane sulfonic acid emissions" + alternative_names: + - "e_msa" + 219023: + name: "Methyl glyoxal emissions" + alternative_names: + - "e_ch3cocho" + 219024: + name: "Stratospheric ozone emissions" + alternative_names: + - "e_o3s" + 219025: + name: "Radon emissions" + alternative_names: + - "e_ra" + 219026: + name: "Lead emissions" + alternative_names: + - "e_pb" + 219027: + name: "Nitrogen monoxide emissions" + alternative_names: + - "e_no" + 219028: + name: "Hydroperoxy radical emissions" + alternative_names: + - "e_ho2" + 219029: + name: "Methylperoxy radical emissions" + alternative_names: + - "e_ch3o2" + 219030: + name: "Hydroxyl radical emissions" + alternative_names: + - "e_oh" + 219031: + name: "Nitrogen dioxide emissions" + alternative_names: + - "e_no2" + 219032: + name: "Nitrate radical emissions" + alternative_names: + - "e_no3" + 219033: + name: "Dinitrogen pentoxide emissions" + alternative_names: + - "e_n2o5" + 219034: + name: "Pernitric acid emissions" + alternative_names: + - "e_ho2no2" + 219035: + name: "Peroxy acetyl radical emissions" + alternative_names: + - "e_c2o3" + 219036: + name: "Organic ethers emissions" + alternative_names: + - "e_ror" + 219037: + name: "Par budget corrector emissions" + alternative_names: + - "e_rxpar" + 219038: + name: "No to no2 operator emissions" + alternative_names: + - "e_xo2" + 219039: + name: "No to alkyl nitrate operator emissions" + alternative_names: + - "e_xo2n" + 219040: + name: "Amine emissions" + alternative_names: + - "e_nh2" + 219041: + name: "Polar stratospheric cloud emissions" + alternative_names: + - "e_psc" + 219042: + name: "Methanol emissions" + alternative_names: + - "e_ch3oh" + 219043: + name: "Formic acid emissions" + alternative_names: + - "e_hcooh" + 219044: + name: "Methacrylic acid emissions" + alternative_names: + - "e_mcooh" + 219045: + name: "Ethane emissions" + alternative_names: + - "e_c2h6" + 219046: + name: "Ethanol emissions" + alternative_names: + - "e_c2h5oh" + 219047: + name: "Propane emissions" + alternative_names: + - "e_c3h8" + 219048: + name: "Propene emissions" + alternative_names: + - "e_c3h6" + 219049: + name: "Terpenes emissions" + alternative_names: + - "e_c10h16" + 219050: + name: "Methacrolein mvk emissions" + alternative_names: + - "e_ispd" + 219051: + name: "Nitrate emissions" + alternative_names: + - "e_no3_a" + 219052: + name: "Acetone emissions" + alternative_names: + - "e_ch3coch3" + 219053: + name: "Acetone product emissions" + alternative_names: + - "e_aco2" + 219054: + name: "Ic3h7o2 emissions" + alternative_names: + - "e_ic3h7o2" + 219055: + name: "Hypropo2 emissions" + alternative_names: + - "e_hypropo2" + 219056: + name: "Nitrogen oxides transp emissions" + alternative_names: + - "e_noxa" + 219057: + name: "Emissions of carbon dioxide (chemistry)" + alternative_names: + - "e_co2_c" + 219058: + name: "Emissions of nitrous oxide (chemistry)" + alternative_names: + - "e_n2o_c" + 219059: + name: "Emissions of water vapour (chemistry)" + alternative_names: + - "e_h2o" + 219060: + name: "Emissions of oxygen" + alternative_names: + - "e_o2" + 219061: + name: "Emissions of singlet oxygen" + alternative_names: + - "e_o2_1s" + 219062: + name: "Emissions of singlet delta oxygen" + alternative_names: + - "e_o2_1d" + 219063: + name: "Emissions of chlorine dioxide" + alternative_names: + - "e_oclo" + 219064: + name: "Emissions of chlorine nitrate" + alternative_names: + - "e_clono2" + 219065: + name: "Emissions of hypochlorous acid" + alternative_names: + - "e_hocl" + 219066: + name: "Emissions of chlorine" + alternative_names: + - "e_cl2" + 219067: + name: "Emissions of nitryl chloride" + alternative_names: + - "e_clno2" + 219068: + name: "Emissions of hydrogen bromide" + alternative_names: + - "e_hbr" + 219069: + name: "Emissions of dichlorine dioxide" + alternative_names: + - "e_cl2o2" + 219070: + name: "Emissions of hypobromous acid" + alternative_names: + - "e_hobr" + 219071: + name: "Emissions of trichlorofluoromethane" + alternative_names: + - "e_cfc11" + 219072: + name: "Emissions of dichlorodifluoromethane" + alternative_names: + - "e_cfc12" + 219073: + name: "Emissions of trichlorotrifluoroethane" + alternative_names: + - "e_cfc113" + 219074: + name: "Emissions of dichlorotetrafluoroethane" + alternative_names: + - "e_cfc114" + 219075: + name: "Emissions of chloropentafluoroethane" + alternative_names: + - "e_cfc115" + 219076: + name: "Emissions of tetrachloromethane" + alternative_names: + - "e_ccl4" + 219077: + name: "Emissions of methyl chloroform" + alternative_names: + - "e_ch3ccl3" + 219078: + name: "Emissions of methyl chloride" + alternative_names: + - "e_ch3cl" + 219079: + name: "Emissions of chlorodifluoromethane" + alternative_names: + - "e_hcfc22" + 219080: + name: "Emissions of methyl bromide" + alternative_names: + - "e_ch3br" + 219081: + name: "Emissions of dibromodifluoromethane" + alternative_names: + - "e_ha1202" + 219082: + name: "Emissions of bromochlorodifluoromethane" + alternative_names: + - "e_ha1211" + 219083: + name: "Emissions of trifluorobromomethane" + alternative_names: + - "e_ha1301" + 219084: + name: "Emissions of cbrf2cbrf2" + alternative_names: + - "e_ha2402" + 219085: + name: "Emissions of sulfuric acid" + alternative_names: + - "e_h2so4" + 219086: + name: "Emissions of nitrous acid" + alternative_names: + - "e_hono" + 219087: + name: "Emissions of alkanes low oh rate" + alternative_names: + - "e_hc3" + 219088: + name: "Emissions of alkanes med oh rate" + alternative_names: + - "e_hc5" + 219089: + name: "Emissions of alkanes high oh rate" + alternative_names: + - "e_hc8" + 219090: + name: "Emissions of terminal alkenes" + alternative_names: + - "e_olt" + 219091: + name: "Emissions of internal alkenes" + alternative_names: + - "e_oli" + 219092: + name: "Emissions of ethylperoxy radical" + alternative_names: + - "e_c2h5o2" + 219093: + name: "Emissions of butadiene" + alternative_names: + - "e_dien" + 219094: + name: "Emissions of ethyl hydroperoxide" + alternative_names: + - "e_c2h5ooh" + 219095: + name: "Emissions of a-pinene cyclic terpenes" + alternative_names: + - "e_api" + 219096: + name: "Emissions of acetic acid" + alternative_names: + - "e_ch3cooh" + 219097: + name: "Emissions of d-limonene cyclic diene" + alternative_names: + - "e_lim" + 219098: + name: "Emissions of acetaldehyde" + alternative_names: + - "e_ch3cho" + 219099: + name: "Emissions of toluene and less reactive aromatics" + alternative_names: + - "e_tol" + 219100: + name: "Emissions of xylene and more reactive aromatics" + alternative_names: + - "e_xyl" + 219101: + name: "Emissions of glycolaldehyde" + alternative_names: + - "e_glyald" + 219102: + name: "Emissions of cresol" + alternative_names: + - "e_cresol" + 219103: + name: "Emissions of acetaldehyde and higher" + alternative_names: + - "e_ald" + 219104: + name: "Emissions of peracetic acid" + alternative_names: + - "e_ch3coooh" + 219105: + name: "Emissions of ketones" + alternative_names: + - "e_ket" + 219106: + name: "Emissions of hoch2ch2o2" + alternative_names: + - "e_eo2" + 219107: + name: "Emissions of glyoxal" + alternative_names: + - "e_glyoxal" + 219108: + name: "Emissions of hoch2ch2o" + alternative_names: + - "e_eo" + 219109: + name: "Emissions of unsaturated dicarbonyls" + alternative_names: + - "e_dcb" + 219110: + name: "Emissions of methacrolein" + alternative_names: + - "e_macr" + 219111: + name: "Emissions of unsaturated hydroxy dicarbonyl" + alternative_names: + - "e_udd" + 219112: + name: "Emissions of isopropyldioxidanyl" + alternative_names: + - "e_c3h7o2" + 219113: + name: "Emissions of hydroxy ketone" + alternative_names: + - "e_hket" + 219114: + name: "Emissions of isopropyl hydroperoxide" + alternative_names: + - "e_c3h7ooh" + 219115: + name: "Emissions of c3h6oho2" + alternative_names: + - "e_po2" + 219116: + name: "Emissions of c3h6ohooh" + alternative_names: + - "e_pooh" + 219117: + name: "Emissions of higher organic peroxides" + alternative_names: + - "e_op2" + 219118: + name: "Emissions of hydroxyacetone" + alternative_names: + - "e_hyac" + 219119: + name: "Emissions of peroxyacetic acid" + alternative_names: + - "e_paa" + 219120: + name: "Emissions of ch3coch2o2" + alternative_names: + - "e_ro2" + 219121: + name: "Emissions of peroxy radical from c2h6" + alternative_names: + - "e_ethp" + 219122: + name: "Emissions of peroxy radical from hc3" + alternative_names: + - "e_hc3p" + 219123: + name: "Emissions of peroxy radical from hc5" + alternative_names: + - "e_hc5p" + 219124: + name: "Emissions of lumped alkenes" + alternative_names: + - "e_bigene" + 219125: + name: "Emissions of peroxy radical from hc8" + alternative_names: + - "e_hc8p" + 219126: + name: "Emissions of lumped alkanes" + alternative_names: + - "e_bigalk" + 219127: + name: "Emissions of peroxy radical from c2h4" + alternative_names: + - "e_etep" + 219128: + name: "Emissions of c4h8o" + alternative_names: + - "e_mek" + 219129: + name: "Emissions of peroxy radical from terminal alkenes" + alternative_names: + - "e_oltp" + 219130: + name: "Emissions of c4h9o3" + alternative_names: + - "e_eneo2" + 219131: + name: "Emissions of peroxy radical from internal alkenes" + alternative_names: + - "e_olip" + 219132: + name: "Emissions of ch3coch(oo)ch3" + alternative_names: + - "e_meko2" + 219133: + name: "Emissions of peroxy radical from c5h8" + alternative_names: + - "e_isopo2" + 219134: + name: "Emissions of ch3coch(ooh)ch3" + alternative_names: + - "e_mekooh" + 219135: + name: "Emissions of peroxy radical from a-pinene cyclic terpenes" + alternative_names: + - "e_apip" + 219136: + name: "Emissions of ch2=c(ch3)co3" + alternative_names: + - "e_mco3" + 219137: + name: "Emissions of peroxy radical from d-limonene cyclic diene" + alternative_names: + - "e_limp" + 219138: + name: "Emissions of methylvinylketone" + alternative_names: + - "e_mvk" + 219139: + name: "Emissions of phenoxy radical" + alternative_names: + - "e_pho" + 219140: + name: "Emissions of peroxy radical from toluene and less reactive aromatics" + alternative_names: + - "e_tolp" + 219141: + name: "Emissions of ch3c(o)ch(oo)ch2oh" + alternative_names: + - "e_macro2" + 219142: + name: "Emissions of peroxy radical from xylene and more reactive aromatics" + alternative_names: + - "e_xylp" + 219143: + name: "Emissions of h3c(o)ch(ooh)ch2oh" + alternative_names: + - "e_macrooh" + 219144: + name: "Emissions of peroxy radical from cresol" + alternative_names: + - "e_cslp" + 219145: + name: "Emissions of unsaturated pans" + alternative_names: + - "e_mpan" + 219146: + name: "Emissions of unsaturated acyl peroxy radical" + alternative_names: + - "e_tco3_c" + 219147: + name: "Emissions of peroxy radical from ketones" + alternative_names: + - "e_ketp" + 219148: + name: "Emissions of c5h11o2" + alternative_names: + - "e_alko2" + 219149: + name: "Emissions of no3-alkenes adduct reacting to form carbonitrates" + alternative_names: + - "e_olnn" + 219150: + name: "Emissions of c5h11ooh" + alternative_names: + - "e_alkooh" + 219151: + name: "Emissions of no3-alkenes adduct reacting via decomposition" + alternative_names: + - "e_olnd" + 219152: + name: "Emissions of hoch2c(ch3)=chcho" + alternative_names: + - "e_bigald" + 219153: + name: "Emissions of c5h6o2" + alternative_names: + - "e_hydrald" + 219154: + name: "Emissions of trop sulfuric acid" + alternative_names: + - "e_sulf" + 219155: + name: "Emissions of oxides" + alternative_names: + - "e_ox" + 219156: + name: "Emissions of ch2chc(ch3)(oo)ch2ono2" + alternative_names: + - "e_isopno3" + 219157: + name: "Emissions of c3 organic nitrate" + alternative_names: + - "e_onitr" + 219158: + name: "Emissions of chlorine oxides" + alternative_names: + - "e_clox" + 219159: + name: "Emissions of bromine oxides" + alternative_names: + - "e_brox" + 219160: + name: "Emissions of hoch2c(ooh)(ch3)chchoh" + alternative_names: + - "e_xooh" + 219161: + name: "Emissions of hoch2c(ooh)(ch3)ch=ch2" + alternative_names: + - "e_isopooh" + 219162: + name: "Emissions of lumped aromatics" + alternative_names: + - "e_toluene" + 219163: + name: "Emissions of dimethyl sulfoxyde" + alternative_names: + - "e_dmso" + 219164: + name: "Emissions of c7h9o5" + alternative_names: + - "e_tolo2" + 219165: + name: "Emissions of c7h10o5" + alternative_names: + - "e_tolooh" + 219166: + name: "Emissions of hydrogensulfide" + alternative_names: + - "e_h2s" + 219167: + name: "Emissions of c7h10o6" + alternative_names: + - "e_xoh" + 219168: + name: "Emissions of all nitrogen oxides" + alternative_names: + - "e_noy" + 219169: + name: "Emissions of chlorine family" + alternative_names: + - "e_cly" + 219170: + name: "Emissions of c10h16(oh)(oo)" + alternative_names: + - "e_terpo2" + 219171: + name: "Emissions of bromine family" + alternative_names: + - "e_bry" + 219172: + name: "Emissions of c10h18o3" + alternative_names: + - "e_terpooh" + 219173: + name: "Emissions of nitrogen atom" + alternative_names: + - "e_n" + 219174: + name: "Emissions of chlorine monoxide" + alternative_names: + - "e_clo" + 219175: + name: "Emissions of chlorine atom" + alternative_names: + - "e_cl_c" + 219176: + name: "Emissions of bromine monoxide" + alternative_names: + - "e_bro" + 219177: + name: "Emissions of hydrogen atom" + alternative_names: + - "e_h_c" + 219178: + name: "Emissions of methyl group" + alternative_names: + - "e_ch3" + 219179: + name: "Emissions of aromatic-ho from toluene and less reactive aromatics" + alternative_names: + - "e_addt" + 219180: + name: "Emissions of aromatic-ho from xylene and more reactive aromatics" + alternative_names: + - "e_addx" + 219181: + name: "Emissions of ammonium nitrate" + alternative_names: + - "e_nh4no3" + 219182: + name: "Emissions of aromatic-ho from csl" + alternative_names: + - "e_addc" + 219183: + name: "Emissions of secondary organic aerosol type 1" + alternative_names: + - "e_soa1" + 219184: + name: "Emissions of secondary organic aerosol type 2a" + alternative_names: + - "e_soa2a" + 219185: + name: "Emissions of secondary organic aerosol type 2b" + alternative_names: + - "e_soa2b" + 219186: + name: "Emissions of condensable gas type 1" + alternative_names: + - "e_sog1" + 219187: + name: "Emissions of condensable gas type 2a" + alternative_names: + - "e_sog2a" + 219188: + name: "Emissions of condensable gas type 2b" + alternative_names: + - "e_sog2b" + 219189: + name: "Emissions of sulfur trioxide" + alternative_names: + - "e_so3" + 219190: + name: "Emissions of carbonyl sulfide" + alternative_names: + - "e_ocs_c" + 219191: + name: "Emissions of bromine atom" + alternative_names: + - "e_br" + 219192: + name: "Emissions of bromine" + alternative_names: + - "e_br2" + 219193: + name: "Emissions of bromine monochloride" + alternative_names: + - "e_brcl" + 219194: + name: "Emissions of bromine nitrate" + alternative_names: + - "e_brono2" + 219195: + name: "Emissions of dibromomethane" + alternative_names: + - "e_ch2br2" + 219196: + name: "Emissions of methoxy radical" + alternative_names: + - "e_ch3o" + 219197: + name: "Emissions of tribromomethane" + alternative_names: + - "e_chbr3" + 219198: + name: "Emissions of asymmetric chlorine dioxide radical" + alternative_names: + - "e_cloo" + 219199: + name: "Emissions of hydrogen" + alternative_names: + - "e_h2" + 219200: + name: "Emissions of hydrogen chloride" + alternative_names: + - "e_hcl" + 219201: + name: "Emissions of formyl radical" + alternative_names: + - "e_hco" + 219202: + name: "Emissions of hydrogen fluoride" + alternative_names: + - "e_hf" + 219203: + name: "Emissions of oxygen atom" + alternative_names: + - "e_o" + 219204: + name: "Emissions of excited oxygen atom" + alternative_names: + - "e_o1d" + 219205: + name: "Emissions of ground state oxygen atom" + alternative_names: + - "e_o3p" + 219206: + name: "Emissions of stratospheric aerosol" + alternative_names: + - "e_strataer" + 219207: + name: "Wildfire flux of paraffins" + alternative_names: + - "parfire" + 219208: + name: "Wildfire flux of olefines" + alternative_names: + - "olefire" + 219209: + name: "Wildfire flux of aldehydes" + alternative_names: + - "ald2fire" + 219210: + name: "Wildfire flux of ketones" + alternative_names: + - "ketfire" + 219211: + name: "Wildfire flux of f a-pinene cyclic terpenes" + alternative_names: + - "apifire" + 219212: + name: "Wildfire flux of toluene less reactive aromatics" + alternative_names: + - "tolfire" + 219213: + name: "Wildfire flux of xylene more reactive aromatics" + alternative_names: + - "xylfire" + 219214: + name: "Wildfire flux of d-limonene cyclic diene" + alternative_names: + - "limfire" + 219215: + name: "Wildfire flux of terminal alkenes" + alternative_names: + - "oltfire" + 219216: + name: "Wildfire flux of alkanes low oh rate" + alternative_names: + - "hc3fire" + 219217: + name: "Wildfire flux of alkanes med oh rate" + alternative_names: + - "hc5fire" + 219218: + name: "Wildfire flux of alkanes high oh rate" + alternative_names: + - "hc8fire" + 219219: + name: "Wildfire flux of hydrogen cyanide" + alternative_names: + - "hcnfire" + 219220: + name: "Wildfire flux of acetonitrile" + alternative_names: + - "ch3cnfire" + 219221: + name: "Atmosphere emission mass flux of volcanic sulfur dioxide" + alternative_names: + - "e_vso2" + 219222: + name: "Atmosphere emission mass flux of aromatic peroxy radical" + alternative_names: + - "e_aroo2" + 219223: + name: "Atmosphere emission mass flux of ethyne" + alternative_names: + - "e_c2h2" + 219224: + name: "Atmosphere emission mass flux of acetonitrile" + alternative_names: + - "e_ch3cn" + 219225: + name: "Atmosphere emission mass flux of methyl peroxy nitrate" + alternative_names: + - "e_ch3o2no2" + 219226: + name: "Atmosphere emission mass flux of hydrogen cyanide" + alternative_names: + - "e_hcn" + 219227: + name: "Atmosphere emission mass flux of hydroperoxy aldehydes type 1" + alternative_names: + - "e_hpald1" + 219228: + name: "Atmosphere emission mass flux of hydroperoxy aldehydes type 2" + alternative_names: + - "e_hpald2" + 219229: + name: "Atmosphere emission mass flux of isoprene peroxy type b" + alternative_names: + - "e_isopbo2" + 219230: + name: "Atmosphere emission mass flux of isoprene peroxy type d" + alternative_names: + - "e_isopdo2" + 219231: + name: "Atmosphere emission mass flux of anthropogenic volatile organic compounds" + alternative_names: + - "e_voca" + 219232: + name: "Atmosphere emission mass flux of biomass burning volatile organic compounds" + alternative_names: + - "e_vocbb" + 220228: + name: "Total precipitation observation count" + alternative_names: + - "tpoc" + 221001: + name: "Ozone deposition velocity" + alternative_names: + - "dv_go3" + 221002: + name: "Nitrogen oxides deposition velocity" + alternative_names: + - "dv_nox" + 221003: + name: "Hydrogen peroxide deposition velocity" + alternative_names: + - "dv_h2o2" + 221004: + name: "Methane deposition velocity" + alternative_names: + - "dv_ch4" + 221005: + name: "Carbon monoxide deposition velocity" + alternative_names: + - "dv_co" + 221006: + name: "Nitric acid deposition velocity" + alternative_names: + - "dv_hno3" + 221007: + name: "Methyl peroxide deposition velocity" + alternative_names: + - "dv_ch3ooh" + 221008: + name: "Formaldehyde deposition velocity" + alternative_names: + - "dv_hcho" + 221009: + name: "Paraffins deposition velocity" + alternative_names: + - "dv_par" + 221010: + name: "Ethene deposition velocity" + alternative_names: + - "dv_c2h4" + 221011: + name: "Olefins deposition velocity" + alternative_names: + - "dv_ole" + 221012: + name: "Aldehydes deposition velocity" + alternative_names: + - "dv_ald2" + 221013: + name: "Peroxyacetyl nitrate deposition velocity" + alternative_names: + - "dv_pan" + 221014: + name: "Peroxides deposition velocity" + alternative_names: + - "dv_rooh" + 221015: + name: "Organic nitrates deposition velocity" + alternative_names: + - "dv_onit" + 221016: + name: "Isoprene deposition velocity" + alternative_names: + - "dv_c5h8" + 221017: + name: "Sulfur dioxide deposition velocity" + alternative_names: + - "dv_so2" + 221018: + name: "Dimethyl sulfide deposition velocity" + alternative_names: + - "dv_dms" + 221019: + name: "Ammonia deposition velocity" + alternative_names: + - "dv_nh3" + 221020: + name: "Sulfate deposition velocity" + alternative_names: + - "dv_so4" + 221021: + name: "Ammonium deposition velocity" + alternative_names: + - "dv_nh4" + 221022: + name: "Methane sulfonic acid deposition velocity" + alternative_names: + - "dv_msa" + 221023: + name: "Methyl glyoxal deposition velocity" + alternative_names: + - "dv_ch3cocho" + 221024: + name: "Stratospheric ozone deposition velocity" + alternative_names: + - "dv_o3s" + 221025: + name: "Radon deposition velocity" + alternative_names: + - "dv_ra" + 221026: + name: "Lead deposition velocity" + alternative_names: + - "dv_pb" + 221027: + name: "Nitrogen monoxide deposition velocity" + alternative_names: + - "dv_no" + 221028: + name: "Hydroperoxy radical deposition velocity" + alternative_names: + - "dv_ho2" + 221029: + name: "Methylperoxy radical deposition velocity" + alternative_names: + - "dv_ch3o2" + 221030: + name: "Hydroxyl radical deposition velocity" + alternative_names: + - "dv_oh" + 221031: + name: "Nitrogen dioxide deposition velocity" + alternative_names: + - "dv_no2" + 221032: + name: "Nitrate radical deposition velocity" + alternative_names: + - "dv_no3" + 221033: + name: "Dinitrogen pentoxide deposition velocity" + alternative_names: + - "dv_n2o5" + 221034: + name: "Pernitric acid deposition velocity" + alternative_names: + - "dv_ho2no2" + 221035: + name: "Peroxy acetyl radical deposition velocity" + alternative_names: + - "dv_c2o3" + 221036: + name: "Organic ethers deposition velocity" + alternative_names: + - "dv_ror" + 221037: + name: "Par budget corrector deposition velocity" + alternative_names: + - "dv_rxpar" + 221038: + name: "No to no2 operator deposition velocity" + alternative_names: + - "dv_xo2" + 221039: + name: "No to alkyl nitrate operator deposition velocity" + alternative_names: + - "dv_xo2n" + 221040: + name: "Amine deposition velocity" + alternative_names: + - "dv_nh2" + 221041: + name: "Polar stratospheric cloud deposition velocity" + alternative_names: + - "dv_psc" + 221042: + name: "Methanol deposition velocity" + alternative_names: + - "dv_ch3oh" + 221043: + name: "Formic acid deposition velocity" + alternative_names: + - "dv_hcooh" + 221044: + name: "Methacrylic acid deposition velocity" + alternative_names: + - "dv_mcooh" + 221045: + name: "Ethane deposition velocity" + alternative_names: + - "dv_c2h6" + 221046: + name: "Ethanol deposition velocity" + alternative_names: + - "dv_c2h5oh" + 221047: + name: "Propane deposition velocity" + alternative_names: + - "dv_c3h8" + 221048: + name: "Propene deposition velocity" + alternative_names: + - "dv_c3h6" + 221049: + name: "Terpenes deposition velocity" + alternative_names: + - "dv_c10h16" + 221050: + name: "Methacrolein mvk deposition velocity" + alternative_names: + - "dv_ispd" + 221051: + name: "Nitrate deposition velocity" + alternative_names: + - "dv_no3_a" + 221052: + name: "Acetone deposition velocity" + alternative_names: + - "dv_ch3coch3" + 221053: + name: "Acetone product deposition velocity" + alternative_names: + - "dv_aco2" + 221054: + name: "Ic3h7o2 deposition velocity" + alternative_names: + - "dv_ic3h7o2" + 221055: + name: "Hypropo2 deposition velocity" + alternative_names: + - "dv_hypropo2" + 221056: + name: "Nitrogen oxides transp deposition velocity" + alternative_names: + - "dv_noxa" + 221057: + name: "Dry deposition velocity of carbon dioxide (chemistry)" + alternative_names: + - "dv_co2_c" + 221058: + name: "Dry deposition velocity of nitrous oxide (chemistry)" + alternative_names: + - "dv_n2o_c" + 221059: + name: "Dry deposition velocity of water vapour (chemistry)" + alternative_names: + - "dv_h2o" + 221060: + name: "Dry deposition velocity of oxygen" + alternative_names: + - "dv_o2" + 221061: + name: "Dry deposition velocity of singlet oxygen" + alternative_names: + - "dv_o2_1s" + 221062: + name: "Dry deposition velocity of singlet delta oxygen" + alternative_names: + - "dv_o2_1d" + 221063: + name: "Dry deposition velocity of chlorine dioxide" + alternative_names: + - "dv_oclo" + 221064: + name: "Dry deposition velocity of chlorine nitrate" + alternative_names: + - "dv_clono2" + 221065: + name: "Dry deposition velocity of hypochlorous acid" + alternative_names: + - "dv_hocl" + 221066: + name: "Dry deposition velocity of chlorine" + alternative_names: + - "dv_cl2" + 221067: + name: "Dry deposition velocity of nitryl chloride" + alternative_names: + - "dv_clno2" + 221068: + name: "Dry deposition velocity of hydrogen bromide" + alternative_names: + - "dv_hbr" + 221069: + name: "Dry deposition velocity of dichlorine dioxide" + alternative_names: + - "dv_cl2o2" + 221070: + name: "Dry deposition velocity of hypobromous acid" + alternative_names: + - "dv_hobr" + 221071: + name: "Dry deposition velocity of trichlorofluoromethane" + alternative_names: + - "dv_cfc11" + 221072: + name: "Dry deposition velocity of dichlorodifluoromethane" + alternative_names: + - "dv_cfc12" + 221073: + name: "Dry deposition velocity of trichlorotrifluoroethane" + alternative_names: + - "dv_cfc113" + 221074: + name: "Dry deposition velocity of dichlorotetrafluoroethane" + alternative_names: + - "dv_cfc114" + 221075: + name: "Dry deposition velocity of chloropentafluoroethane" + alternative_names: + - "dv_cfc115" + 221076: + name: "Dry deposition velocity of tetrachloromethane" + alternative_names: + - "dv_ccl4" + 221077: + name: "Dry deposition velocity of methyl chloroform" + alternative_names: + - "dv_ch3ccl3" + 221078: + name: "Dry deposition velocity of methyl chloride" + alternative_names: + - "dv_ch3cl" + 221079: + name: "Dry deposition velocity of chlorodifluoromethane" + alternative_names: + - "dv_hcfc22" + 221080: + name: "Dry deposition velocity of methyl bromide" + alternative_names: + - "dv_ch3br" + 221081: + name: "Dry deposition velocity of dibromodifluoromethane" + alternative_names: + - "dv_ha1202" + 221082: + name: "Dry deposition velocity of bromochlorodifluoromethane" + alternative_names: + - "dv_ha1211" + 221083: + name: "Dry deposition velocity of trifluorobromomethane" + alternative_names: + - "dv_ha1301" + 221084: + name: "Dry deposition velocity of cbrf2cbrf2" + alternative_names: + - "dv_ha2402" + 221085: + name: "Dry deposition velocity of sulfuric acid" + alternative_names: + - "dv_h2so4" + 221086: + name: "Dry deposition velocity of nitrous acid" + alternative_names: + - "dv_hono" + 221087: + name: "Dry deposition velocity of alkanes low oh rate" + alternative_names: + - "dv_hc3" + 221088: + name: "Dry deposition velocity of alkanes med oh rate" + alternative_names: + - "dv_hc5" + 221089: + name: "Dry deposition velocity of alkanes high oh rate" + alternative_names: + - "dv_hc8" + 221090: + name: "Dry deposition velocity of terminal alkenes" + alternative_names: + - "dv_olt" + 221091: + name: "Dry deposition velocity of internal alkenes" + alternative_names: + - "dv_oli" + 221092: + name: "Dry deposition velocity of ethylperoxy radical" + alternative_names: + - "dv_c2h5o2" + 221093: + name: "Dry deposition velocity of butadiene" + alternative_names: + - "dv_dien" + 221094: + name: "Dry deposition velocity of ethyl hydroperoxide" + alternative_names: + - "dv_c2h5ooh" + 221095: + name: "Dry deposition velocity of a-pinene cyclic terpenes" + alternative_names: + - "dv_api" + 221096: + name: "Dry deposition velocity of acetic acid" + alternative_names: + - "dv_ch3cooh" + 221097: + name: "Dry deposition velocity of d-limonene cyclic diene" + alternative_names: + - "dv_lim" + 221098: + name: "Dry deposition velocity of acetaldehyde" + alternative_names: + - "dv_ch3cho" + 221099: + name: "Dry deposition velocity of toluene and less reactive aromatics" + alternative_names: + - "dv_tol" + 221100: + name: "Dry deposition velocity of xylene and more reactive aromatics" + alternative_names: + - "dv_xyl" + 221101: + name: "Dry deposition velocity of glycolaldehyde" + alternative_names: + - "dv_glyald" + 221102: + name: "Dry deposition velocity of cresol" + alternative_names: + - "dv_cresol" + 221103: + name: "Dry deposition velocity of acetaldehyde and higher" + alternative_names: + - "dv_ald" + 221104: + name: "Dry deposition velocity of peracetic acid" + alternative_names: + - "dv_ch3coooh" + 221105: + name: "Dry deposition velocity of ketones" + alternative_names: + - "dv_ket" + 221106: + name: "Dry deposition velocity of hoch2ch2o2" + alternative_names: + - "dv_eo2" + 221107: + name: "Dry deposition velocity of glyoxal" + alternative_names: + - "dv_glyoxal" + 221108: + name: "Dry deposition velocity of hoch2ch2o" + alternative_names: + - "dv_eo" + 221109: + name: "Dry deposition velocity of unsaturated dicarbonyls" + alternative_names: + - "dv_dcb" + 221110: + name: "Dry deposition velocity of methacrolein" + alternative_names: + - "dv_macr" + 221111: + name: "Dry deposition velocity of unsaturated hydroxy dicarbonyl" + alternative_names: + - "dv_udd" + 221112: + name: "Dry deposition velocity of isopropyldioxidanyl" + alternative_names: + - "dv_c3h7o2" + 221113: + name: "Dry deposition velocity of hydroxy ketone" + alternative_names: + - "dv_hket" + 221114: + name: "Dry deposition velocity of isopropyl hydroperoxide" + alternative_names: + - "dv_c3h7ooh" + 221115: + name: "Dry deposition velocity of c3h6oho2" + alternative_names: + - "dv_po2" + 221116: + name: "Dry deposition velocity of c3h6ohooh" + alternative_names: + - "dv_pooh" + 221117: + name: "Dry deposition velocity of higher organic peroxides" + alternative_names: + - "dv_op2" + 221118: + name: "Dry deposition velocity of hydroxyacetone" + alternative_names: + - "dv_hyac" + 221119: + name: "Dry deposition velocity of peroxyacetic acid" + alternative_names: + - "dv_paa" + 221120: + name: "Dry deposition velocity of ch3coch2o2" + alternative_names: + - "dv_ro2" + 221121: + name: "Dry deposition velocity of peroxy radical from c2h6" + alternative_names: + - "dv_ethp" + 221122: + name: "Dry deposition velocity of peroxy radical from hc3" + alternative_names: + - "dv_hc3p" + 221123: + name: "Dry deposition velocity of peroxy radical from hc5" + alternative_names: + - "dv_hc5p" + 221124: + name: "Dry deposition velocity of lumped alkenes" + alternative_names: + - "dv_bigene" + 221125: + name: "Dry deposition velocity of peroxy radical from hc8" + alternative_names: + - "dv_hc8p" + 221126: + name: "Dry deposition velocity of lumped alkanes" + alternative_names: + - "dv_bigalk" + 221127: + name: "Dry deposition velocity of peroxy radical from c2h4" + alternative_names: + - "dv_etep" + 221128: + name: "Dry deposition velocity of c4h8o" + alternative_names: + - "dv_mek" + 221129: + name: "Dry deposition velocity of peroxy radical from terminal alkenes" + alternative_names: + - "dv_oltp" + 221130: + name: "Dry deposition velocity of c4h9o3" + alternative_names: + - "dv_eneo2" + 221131: + name: "Dry deposition velocity of peroxy radical from internal alkenes" + alternative_names: + - "dv_olip" + 221132: + name: "Dry deposition velocity of ch3coch(oo)ch3" + alternative_names: + - "dv_meko2" + 221133: + name: "Dry deposition velocity of peroxy radical from c5h8" + alternative_names: + - "dv_isopo2" + 221134: + name: "Dry deposition velocity of ch3coch(ooh)ch3" + alternative_names: + - "dv_mekooh" + 221135: + name: "Dry deposition velocity of peroxy radical from a-pinene cyclic terpenes" + alternative_names: + - "dv_apip" + 221136: + name: "Dry deposition velocity of ch2=c(ch3)co3" + alternative_names: + - "dv_mco3" + 221137: + name: "Dry deposition velocity of peroxy radical from d-limonene cyclic diene" + alternative_names: + - "dv_limp" + 221138: + name: "Dry deposition velocity of methylvinylketone" + alternative_names: + - "dv_mvk" + 221139: + name: "Dry deposition velocity of phenoxy radical" + alternative_names: + - "dv_pho" + 221140: + name: + "Dry deposition velocity of peroxy radical from toluene and less reactive + aromatics" + alternative_names: + - "dv_tolp" + 221141: + name: "Dry deposition velocity of ch3c(o)ch(oo)ch2oh" + alternative_names: + - "dv_macro2" + 221142: + name: + "Dry deposition velocity of peroxy radical from xylene and more reactive + aromatics" + alternative_names: + - "dv_xylp" + 221143: + name: "Dry deposition velocity of h3c(o)ch(ooh)ch2oh" + alternative_names: + - "dv_macrooh" + 221144: + name: "Dry deposition velocity of peroxy radical from cresol" + alternative_names: + - "dv_cslp" + 221145: + name: "Dry deposition velocity of unsaturated pans" + alternative_names: + - "dv_mpan" + 221146: + name: "Dry deposition velocity of unsaturated acyl peroxy radical" + alternative_names: + - "dv_tco3_c" + 221147: + name: "Dry deposition velocity of peroxy radical from ketones" + alternative_names: + - "dv_ketp" + 221148: + name: "Dry deposition velocity of c5h11o2" + alternative_names: + - "dv_alko2" + 221149: + name: "Dry deposition velocity of no3-alkenes adduct reacting to form carbonitrates" + alternative_names: + - "dv_olnn" + 221150: + name: "Dry deposition velocity of c5h11ooh" + alternative_names: + - "dv_alkooh" + 221151: + name: "Dry deposition velocity of no3-alkenes adduct reacting via decomposition" + alternative_names: + - "dv_olnd" + 221152: + name: "Dry deposition velocity of hoch2c(ch3)=chcho" + alternative_names: + - "dv_bigald" + 221153: + name: "Dry deposition velocity of c5h6o2" + alternative_names: + - "dv_hydrald" + 221154: + name: "Dry deposition velocity of trop sulfuric acid" + alternative_names: + - "dv_sulf" + 221155: + name: "Dry deposition velocity of oxides" + alternative_names: + - "dv_ox" + 221156: + name: "Dry deposition velocity of ch2chc(ch3)(oo)ch2ono2" + alternative_names: + - "dv_isopno3" + 221157: + name: "Dry deposition velocity of c3 organic nitrate" + alternative_names: + - "dv_onitr" + 221158: + name: "Dry deposition velocity of chlorine oxides" + alternative_names: + - "dv_clox" + 221159: + name: "Dry deposition velocity of bromine oxides" + alternative_names: + - "dv_brox" + 221160: + name: "Dry deposition velocity of hoch2c(ooh)(ch3)chchoh" + alternative_names: + - "dv_xooh" + 221161: + name: "Dry deposition velocity of hoch2c(ooh)(ch3)ch=ch2" + alternative_names: + - "dv_isopooh" + 221162: + name: "Dry deposition velocity of lumped aromatics" + alternative_names: + - "dv_toluene" + 221163: + name: "Dry deposition velocity of dimethyl sulfoxyde" + alternative_names: + - "dv_dmso" + 221164: + name: "Dry deposition velocity of c7h9o5" + alternative_names: + - "dv_tolo2" + 221165: + name: "Dry deposition velocity of c7h10o5" + alternative_names: + - "dv_tolooh" + 221166: + name: "Dry deposition velocity of hydrogensulfide" + alternative_names: + - "dv_h2s" + 221167: + name: "Dry deposition velocity of c7h10o6" + alternative_names: + - "dv_xoh" + 221168: + name: "Dry deposition velocity of all nitrogen oxides" + alternative_names: + - "dv_noy" + 221169: + name: "Dry deposition velocity of chlorine family" + alternative_names: + - "dv_cly" + 221170: + name: "Dry deposition velocity of c10h16(oh)(oo)" + alternative_names: + - "dv_terpo2" + 221171: + name: "Dry deposition velocity of bromine family" + alternative_names: + - "dv_bry" + 221172: + name: "Dry deposition velocity of c10h18o3" + alternative_names: + - "dv_terpooh" + 221173: + name: "Dry deposition velocity of nitrogen atom" + alternative_names: + - "dv_n" + 221174: + name: "Dry deposition velocity of chlorine monoxide" + alternative_names: + - "dv_clo" + 221175: + name: "Dry deposition velocity of chlorine atom" + alternative_names: + - "dv_cl_c" + 221176: + name: "Dry deposition velocity of bromine monoxide" + alternative_names: + - "dv_bro" + 221177: + name: "Dry deposition velocity of hydrogen atom" + alternative_names: + - "dv_h_c" + 221178: + name: "Dry deposition velocity of methyl group" + alternative_names: + - "dv_ch3" + 221179: + name: "Dry deposition velocity of aromatic-ho from toluene and less reactive aromatics" + alternative_names: + - "dv_addt" + 221180: + name: "Dry deposition velocity of aromatic-ho from xylene and more reactive aromatics" + alternative_names: + - "dv_addx" + 221181: + name: "Dry deposition velocity of ammonium nitrate" + alternative_names: + - "dv_nh4no3" + 221182: + name: "Dry deposition velocity of aromatic-ho from csl" + alternative_names: + - "dv_addc" + 221183: + name: "Dry deposition velocity of secondary organic aerosol type 1" + alternative_names: + - "dv_soa1" + 221184: + name: "Dry deposition velocity of secondary organic aerosol type 2a" + alternative_names: + - "dv_soa2a" + 221185: + name: "Dry deposition velocity of secondary organic aerosol type 2b" + alternative_names: + - "dv_soa2b" + 221186: + name: "Dry deposition velocity of condensable gas type 1" + alternative_names: + - "dv_sog1" + 221187: + name: "Dry deposition velocity of condensable gas type 2a" + alternative_names: + - "dv_sog2a" + 221188: + name: "Dry deposition velocity of condensable gas type 2b" + alternative_names: + - "dv_sog2b" + 221189: + name: "Dry deposition velocity of sulfur trioxide" + alternative_names: + - "dv_so3" + 221190: + name: "Dry deposition velocity of carbonyl sulfide" + alternative_names: + - "dv_ocs_c" + 221191: + name: "Dry deposition velocity of bromine atom" + alternative_names: + - "dv_br" + 221192: + name: "Dry deposition velocity of bromine" + alternative_names: + - "dv_br2" + 221193: + name: "Dry deposition velocity of bromine monochloride" + alternative_names: + - "dv_brcl" + 221194: + name: "Dry deposition velocity of bromine nitrate" + alternative_names: + - "dv_brono2" + 221195: + name: "Dry deposition velocity of dibromomethane" + alternative_names: + - "dv_ch2br2" + 221196: + name: "Dry deposition velocity of methoxy radical" + alternative_names: + - "dv_ch3o" + 221197: + name: "Dry deposition velocity of tribromomethane" + alternative_names: + - "dv_chbr3" + 221198: + name: "Dry deposition velocity of asymmetric chlorine dioxide radical" + alternative_names: + - "dv_cloo" + 221199: + name: "Dry deposition velocity of hydrogen" + alternative_names: + - "dv_h2" + 221200: + name: "Dry deposition velocity of hydrogen chloride" + alternative_names: + - "dv_hcl" + 221201: + name: "Dry deposition velocity of formyl radical" + alternative_names: + - "dv_hco" + 221202: + name: "Dry deposition velocity of hydrogen fluoride" + alternative_names: + - "dv_hf" + 221203: + name: "Dry deposition velocity of oxygen atom" + alternative_names: + - "dv_o" + 221204: + name: "Dry deposition velocity of excited oxygen atom" + alternative_names: + - "dv_o1d" + 221205: + name: "Dry deposition velocity of ground state oxygen atom" + alternative_names: + - "dv_o3p" + 221206: + name: "Dry deposition velocity of stratospheric aerosol" + alternative_names: + - "dv_strataer" + 221221: + name: "Dry deposition velocity of volcanic sulfur dioxide" + alternative_names: + - "dv_vso2" + 221222: + name: "Dry deposition velocity of aromatic peroxy radical" + alternative_names: + - "dv_aroo2" + 221223: + name: "Dry deposition velocity of ethyne" + alternative_names: + - "dv_c2h2" + 221224: + name: "Dry deposition velocity of acetonitrile" + alternative_names: + - "dv_ch3cn" + 221225: + name: "Dry deposition velocity of methyl peroxy nitrate" + alternative_names: + - "dv_ch3o2no2" + 221226: + name: "Dry deposition velocity of hydrogen cyanide" + alternative_names: + - "dv_hcn" + 221227: + name: "Dry deposition velocity of hydroperoxy aldehydes type 1" + alternative_names: + - "dv_hpald1" + 221228: + name: "Dry deposition velocity of hydroperoxy aldehydes type 2" + alternative_names: + - "dv_hpald2" + 221229: + name: "Dry deposition velocity of isoprene peroxy type b" + alternative_names: + - "dv_isopbo2" + 221230: + name: "Dry deposition velocity of isoprene peroxy type d" + alternative_names: + - "dv_isopdo2" + 221231: + name: "Dry deposition velocity of anthropogenic volatile organic compounds" + alternative_names: + - "dv_voca" + 221232: + name: "Dry deposition velocity of biomass burning volatile organic compounds" + alternative_names: + - "dv_vocbb" + 222001: + name: "Time-integrated dry deposition mass flux of ozone" + alternative_names: + - "acc_dry_depm_o3" + 222003: + name: "Time-integrated dry deposition mass flux of hydrogen peroxide" + alternative_names: + - "acc_dry_depm_h2o2" + 222005: + name: "Time-integrated dry deposition mass flux of carbon monoxide" + alternative_names: + - "acc_dry_depm_co" + 222006: + name: "Time-integrated dry deposition mass flux of nitric acid" + alternative_names: + - "acc_dry_depm_hno3" + 222007: + name: "Time-integrated dry deposition mass flux of methyl peroxide" + alternative_names: + - "acc_dry_depm_ch3ooh" + 222008: + name: "Time-integrated dry deposition mass flux of formaldehyde" + alternative_names: + - "acc_dry_depm_hcho" + 222012: + name: "Time-integrated dry deposition mass flux of aldehydes" + alternative_names: + - "acc_dry_depm_ald2" + 222013: + name: "Time-integrated dry deposition mass flux of peroxyacetyl nitrate" + alternative_names: + - "acc_dry_depm_pan" + 222014: + name: "Time-integrated dry deposition mass flux of peroxides" + alternative_names: + - "acc_dry_depm_rooh" + 222015: + name: "Time-integrated dry deposition mass flux of organic nitrates" + alternative_names: + - "acc_dry_depm_onit" + 222016: + name: "Time-integrated dry deposition mass flux of isoprene" + alternative_names: + - "acc_dry_depm_c5h8" + 222017: + name: "Time-integrated dry deposition mass flux of sulphur dioxide" + alternative_names: + - "acc_dry_depm_so2" + 222019: + name: "Time-integrated dry deposition mass flux of ammonia" + alternative_names: + - "acc_dry_depm_nh3" + 222020: + name: "Time-integrated dry deposition mass flux of sulfate" + alternative_names: + - "acc_dry_depm_so4" + 222021: + name: "Time-integrated dry deposition mass flux of ammonium" + alternative_names: + - "acc_dry_depm_nh4" + 222023: + name: "Time-integrated dry deposition mass flux of methyl glyoxal" + alternative_names: + - "acc_dry_depm_ch3cocho" + 222024: + name: "Time-integrated dry deposition mass flux of ozone (stratospheric)" + alternative_names: + - "acc_dry_depm_o3s" + 222027: + name: "Time-integrated dry deposition mass flux of nitrogen monoxide" + alternative_names: + - "acc_dry_depm_no" + 222028: + name: "Time-integrated dry deposition mass flux of hydroperoxy radical" + alternative_names: + - "acc_dry_depm_ho2" + 222029: + name: "Time-integrated dry deposition mass flux of methylperoxy radical" + alternative_names: + - "acc_dry_depm_ch3o2" + 222031: + name: "Time-integrated dry deposition mass flux of nitrogen dioxide" + alternative_names: + - "acc_dry_depm_no2" + 222032: + name: "Time-integrated dry deposition mass flux of nitrate radical" + alternative_names: + - "acc_dry_depm_no3" + 222033: + name: "Time-integrated dry deposition mass flux of dinitrogen pentoxide" + alternative_names: + - "acc_dry_depm_n2o5" + 222034: + name: "Time-integrated dry deposition mass flux of pernitric acid" + alternative_names: + - "acc_dry_depm_ho2no2" + 222042: + name: "Time-integrated dry deposition mass flux of methanol" + alternative_names: + - "acc_dry_depm_ch3oh" + 222043: + name: "Time-integrated dry deposition mass flux of formic acid" + alternative_names: + - "acc_dry_depm_hcooh" + 222044: + name: "Time-integrated dry deposition mass flux of methacrylic acid" + alternative_names: + - "acc_dry_depm_mcooh" + 222045: + name: "Time-integrated dry deposition mass flux of ethane" + alternative_names: + - "acc_dry_depm_c2h6" + 222046: + name: "Time-integrated dry deposition mass flux of ethanol" + alternative_names: + - "acc_dry_depm_c2h5oh" + 222050: + name: "Time-integrated dry deposition mass flux of methacrolein" + alternative_names: + - "acc_dry_depm_ispd" + 222051: + name: "Time-integrated dry deposition mass flux of nitrate" + alternative_names: + - "acc_dry_depm_no3_a" + 222052: + name: "Time-integrated dry deposition mass flux of acetone" + alternative_names: + - "acc_dry_depm_ch3coch3" + 222086: + name: "Time-integrated dry deposition mass flux of nitrous acid" + alternative_names: + - "acc_dry_depm_hono" + 222099: + name: "Time-integrated dry deposition mass flux of toluene and less reactive aromatics" + alternative_names: + - "acc_dry_depm_tol" + 222100: + name: "Time-integrated dry deposition mass flux of xylene and more reactive aromatics" + alternative_names: + - "acc_dry_depm_xyl" + 222101: + name: "Time-integrated dry deposition mass flux of glycolaldehyde" + alternative_names: + - "acc_dry_depm_glyald" + 222107: + name: "Time-integrated dry deposition mass flux of glyoxal" + alternative_names: + - "acc_dry_depm_gly" + 222118: + name: "Time-integrated dry deposition mass flux of hydroxyacetone" + alternative_names: + - "acc_dry_depm_hyac" + 222161: + name: + "Time-integrated dry deposition mass flux of all hydroxy-peroxides products + of the reaction of hydroxy-isoprene adducts with o2" + alternative_names: + - "acc_dry_depm_isopooh" + 222224: + name: "Time-integrated dry deposition mass flux of acetonitrile" + alternative_names: + - "acc_dry_depm_ch3cn" + 222226: + name: "Time-integrated dry deposition mass flux of hydrogen cyanide" + alternative_names: + - "acc_dry_depm_hcn" + 223001: + name: "Time-integrated wet deposition mass flux of ozone" + alternative_names: + - "acc_wet_depm_o3" + 223003: + name: "Time-integrated wet deposition mass flux of hydrogen peroxide" + alternative_names: + - "acc_wet_depm_h2o2" + 223006: + name: "Time-integrated wet deposition mass flux of nitric acid" + alternative_names: + - "acc_wet_depm_hno3" + 223007: + name: "Time-integrated wet deposition mass flux of methyl peroxide" + alternative_names: + - "acc_wet_depm_ch3ooh" + 223008: + name: "Time-integrated wet deposition mass flux of formaldehyde" + alternative_names: + - "acc_wet_depm_hcho" + 223012: + name: "Time-integrated wet deposition mass flux of aldehydes" + alternative_names: + - "acc_wet_depm_ald2" + 223013: + name: "Time-integrated wet deposition mass flux of peroxyacetyl nitrate" + alternative_names: + - "acc_wet_depm_pan" + 223014: + name: "Time-integrated wet deposition mass flux of peroxides" + alternative_names: + - "acc_wet_depm_rooh" + 223015: + name: "Time-integrated wet deposition mass flux of organic nitrates" + alternative_names: + - "acc_wet_depm_onit" + 223016: + name: "Time-integrated wet deposition mass flux of isoprene" + alternative_names: + - "acc_wet_depm_c5h8" + 223017: + name: "Time-integrated wet deposition mass flux of sulphur dioxide" + alternative_names: + - "acc_wet_depm_so2" + 223019: + name: "Time-integrated wet deposition mass flux of ammonia" + alternative_names: + - "acc_wet_depm_nh3" + 223020: + name: "Time-integrated wet deposition mass flux of sulfate" + alternative_names: + - "acc_wet_depm_so4" + 223021: + name: "Time-integrated wet deposition mass flux of ammonium" + alternative_names: + - "acc_wet_depm_nh4" + 223022: + name: "Time-integrated wet deposition mass flux of methane sulfonic acid" + alternative_names: + - "acc_wet_depm_msa" + 223023: + name: "Time-integrated wet deposition mass flux of methyl glyoxal" + alternative_names: + - "acc_wet_depm_ch3cocho" + 223025: + name: "Time-integrated wet deposition mass flux of carbon monoxide" + alternative_names: + - "acc_wet_depm_co" + 223026: + name: "Time-integrated wet deposition mass flux of lead" + alternative_names: + - "acc_wet_depm_pb" + 223027: + name: "Time-integrated wet deposition mass flux of nitrogen monoxide" + alternative_names: + - "acc_wet_depm_no" + 223028: + name: "Time-integrated wet deposition mass flux of hydroperoxy radical" + alternative_names: + - "acc_wet_depm_ho2" + 223029: + name: "Time-integrated wet deposition mass flux of methylperoxy radical" + alternative_names: + - "acc_wet_depm_ch3o2" + 223031: + name: "Time-integrated wet deposition mass flux of nitrogen dioxide" + alternative_names: + - "acc_wet_depm_no2" + 223032: + name: "Time-integrated wet deposition mass flux of nitrate radical" + alternative_names: + - "acc_wet_depm_no3" + 223033: + name: "Time-integrated wet deposition mass flux of dinitrogen pentoxide" + alternative_names: + - "acc_wet_depm_n2o5" + 223034: + name: "Time-integrated wet deposition mass flux of pernitric acid" + alternative_names: + - "acc_wet_depm_ho2no2" + 223042: + name: "Time-integrated wet deposition mass flux of methanol" + alternative_names: + - "acc_wet_depm_ch3oh" + 223043: + name: "Time-integrated wet deposition mass flux of formic acid" + alternative_names: + - "acc_wet_depm_hcooh" + 223044: + name: "Time-integrated wet deposition mass flux of methacrylic acid" + alternative_names: + - "acc_wet_depm_mcooh" + 223045: + name: "Time-integrated wet deposition mass flux of ethane" + alternative_names: + - "acc_wet_depm_c2h6" + 223046: + name: "Time-integrated wet deposition mass flux of ethanol" + alternative_names: + - "acc_wet_depm_c2h5oh" + 223050: + name: "Time-integrated wet deposition mass flux of methacrolein" + alternative_names: + - "acc_wet_depm_ispd" + 223051: + name: "Time-integrated wet deposition mass flux of nitrate" + alternative_names: + - "acc_wet_depm_no3_a" + 223052: + name: "Time-integrated wet deposition mass flux of acetone" + alternative_names: + - "acc_wet_depm_ch3coch3" + 223064: + name: "Time-integrated wet deposition mass flux of chlorine nitrate" + alternative_names: + - "acc_wet_depm_clono2" + 223065: + name: "Time-integrated wet deposition mass flux of hypochlorous acid" + alternative_names: + - "acc_wet_depm_hocl" + 223068: + name: "Time-integrated wet deposition mass flux of hydrogen bromide" + alternative_names: + - "acc_wet_depm_hbr" + 223070: + name: "Time-integrated wet deposition mass flux of hypobromous acid" + alternative_names: + - "acc_wet_depm_hobr" + 223086: + name: "Time-integrated wet deposition mass flux of nitrous acid" + alternative_names: + - "acc_wet_depm_hono" + 223099: + name: "Time-integrated wet deposition mass flux of toluene and less reactive aromatics" + alternative_names: + - "acc_wet_depm_tol" + 223100: + name: "Time-integrated wet deposition mass flux of xylene and more reactive aromatics" + alternative_names: + - "acc_wet_depm_xyl" + 223101: + name: "Time-integrated wet deposition mass flux of glycolaldehyde" + alternative_names: + - "acc_wet_depm_glyald" + 223107: + name: "Time-integrated wet deposition mass flux of glyoxal" + alternative_names: + - "acc_wet_depm_gly" + 223118: + name: "Time-integrated wet deposition mass flux of hydroxyacetone" + alternative_names: + - "acc_wet_depm_hyac" + 223161: + name: + "Time-integrated wet deposition mass flux of all hydroxy-peroxides products + of the reaction of hydroxy-isoprene adducts with o2" + alternative_names: + - "acc_wet_depm_isopooh" + 223186: + name: "Time-integrated wet deposition mass flux of condensable gas type 1" + alternative_names: + - "acc_wet_depm_sog1" + 223187: + name: "Time-integrated wet deposition mass flux of condensable gas type 2a" + alternative_names: + - "acc_wet_depm_sog2a" + 223188: + name: "Time-integrated wet deposition mass flux of condensable gas type 2b" + alternative_names: + - "acc_wet_depm_sog2b" + 223194: + name: "Time-integrated wet deposition mass flux of bromine nitrate" + alternative_names: + - "acc_wet_depm_brono2" + 223200: + name: "Time-integrated wet deposition mass flux of hydrogen chloride" + alternative_names: + - "acc_wet_depm_hcl" + 223224: + name: "Time-integrated wet deposition mass flux of acetonitrile" + alternative_names: + - "acc_wet_depm_ch3cn" + 223226: + name: "Time-integrated wet deposition mass flux of hydrogen cyanide" + alternative_names: + - "acc_wet_depm_hcn" + 223227: + name: + "Time-integrated wet deposition mass flux of hydroperoxy aldehydes type + 1" + alternative_names: + - "acc_wet_depm_hpald1" + 223228: + name: + "Time-integrated wet deposition mass flux of hydroperoxy aldehydes type + 2" + alternative_names: + - "acc_wet_depm_hpald2" + 228001: + name: "Convective inhibition" + alternative_names: + - "cin" + 228002: + name: "Orography" + alternative_names: + - "orog" + 228003: + name: "Friction velocity" + alternative_names: + - "zust" + 228004: + name: "Mean 2 metre temperature" + alternative_names: + - "mean2t" + 228005: + name: "Mean of 10 metre wind speed" + alternative_names: + - "mean10ws" + 228006: + name: "Mean total cloud cover" + alternative_names: + - "meantcc" + 228007: + name: "Lake total depth" + alternative_names: + - "dl" + 228008: + name: "Lake mix-layer temperature" + alternative_names: + - "lmlt" + 228009: + name: "Lake mix-layer depth" + alternative_names: + - "lmld" + 228010: + name: "Lake bottom temperature" + alternative_names: + - "lblt" + 228011: + name: "Lake total layer temperature" + alternative_names: + - "ltlt" + 228012: + name: "Lake shape factor" + alternative_names: + - "lshf" + 228013: + name: "Lake ice surface temperature" + alternative_names: + - "lict" + 228014: + name: "Lake ice total depth" + alternative_names: + - "licd" + 228015: + name: "Minimum vertical gradient of refractivity inside trapping layer" + alternative_names: + - "dndzn" + 228016: + name: "Mean vertical gradient of refractivity inside trapping layer" + alternative_names: + - "dndza" + 228017: + name: "Duct base height" + alternative_names: + - "dctb" + 228018: + name: "Trapping layer base height" + alternative_names: + - "tplb" + 228019: + name: "Trapping layer top height" + alternative_names: + - "tplt" + 228020: + name: "-10 degrees c isothermal level (atm)" + alternative_names: + - "degm10l" + 228021: + name: "Total sky direct short-wave (solar) radiation at surface" + alternative_names: + - "fdir" + 228022: + name: "Surface direct short-wave radiation, clear sky" + alternative_names: + - "cdir" + 228023: + name: "Cloud base height" + alternative_names: + - "cbh" + 228024: + name: "Deg0" + alternative_names: + - "deg0l" + - "0 degrees c isothermal level (atm)" + 228025: + name: "Horizontal visibility" + alternative_names: + - "hvis" + 228026: + name: "Maximum temperature at 2 metres in the last 3 hours" + alternative_names: + - "mx2t3" + 228027: + name: "Minimum temperature at 2 metres in the last 3 hours" + alternative_names: + - "mn2t3" + 228028: + name: "Maximum 10 metre wind gust in the last 3 hours" + alternative_names: + - "10fg3" + 228029: + name: "Instantaneous 10 metre wind gust" + alternative_names: + - "i10fg" + 228030: + name: "Relative humidity with respect to water" + alternative_names: + - "rhw" + 228031: + name: "Relative humidity with respect to ice" + alternative_names: + - "rhi" + 228032: + name: "Snow albedo" + alternative_names: + - "asn" + 228033: + name: "Fraction of stratiform precipitation cover" + alternative_names: + - "fspc" + 228034: + name: "Fraction of convective precipitation cover" + alternative_names: + - "fcpc" + 228035: + name: "Maximum cape in the last 6 hours" + alternative_names: + - "mxcape6" + 228036: + name: "Maximum capes in the last 6 hours" + alternative_names: + - "mxcapes6" + 228037: + name: "2 metre relative humidity with respect to water" + alternative_names: + - "2rhw" + 228038: + name: "Liquid water content in snow pack" + alternative_names: + - "lwcs" + 228039: + name: "Soil moisture" + alternative_names: + - "sm" + 228040: + name: "Soil wetness index in layer 1" + alternative_names: + - "swi1" + 228041: + name: "Soil wetness index in layer 2" + alternative_names: + - "swi2" + 228042: + name: "Soil wetness index in layer 3" + alternative_names: + - "swi3" + 228043: + name: "Soil wetness index in layer 4" + alternative_names: + - "swi4" + 228044: + name: "Convective available potential energy shear" + alternative_names: + - "capes" + 228045: + name: "Tropopause pressure" + alternative_names: + - "trpp" + 228046: + name: "Height of convective cloud top" + alternative_names: + - "hcct" + 228047: + name: "Height of zero-degree wet-bulb temperature" + alternative_names: + - "hwbt0" + 228048: + name: "Height of one-degree wet-bulb temperature" + alternative_names: + - "hwbt1" + 228050: + name: "Instantaneous total lightning flash density" + alternative_names: + - "litoti" + 228051: + name: "Averaged total lightning flash density in the last hour" + alternative_names: + - "litota1" + 228052: + name: "Instantaneous cloud-to-ground lightning flash density" + alternative_names: + - "licgi" + 228053: + name: "Averaged cloud-to-ground lightning flash density in the last hour" + alternative_names: + - "licga1" + 228054: + name: "Unbalanced component of specific humidity" + alternative_names: + - "ucq" + 228055: + name: "Unbalanced component of specific cloud liquid water content" + alternative_names: + - "ucclwc" + 228056: + name: "Unbalanced component of specific cloud ice water content" + alternative_names: + - "ucciwc" + 228057: + name: "Averaged total lightning flash density in the last 3 hours" + alternative_names: + - "litota3" + 228058: + name: "Averaged total lightning flash density in the last 6 hours" + alternative_names: + - "litota6" + 228059: + name: "Averaged cloud-to-ground lightning flash density in the last 3 hours" + alternative_names: + - "licga3" + 228060: + name: "Averaged cloud-to-ground lightning flash density in the last 6 hours" + alternative_names: + - "licga6" + 228070: + name: "Smos observed soil moisture retrieved using neural network" + alternative_names: + - "smnnob" + 228071: + name: "Smos observed soil moisture uncertainty retrieved using neural network" + alternative_names: + - "smnner" + 228072: + name: "Smos radio frequency interference probability" + alternative_names: + - "smnnrfi" + 228073: + name: "Smos number of observations per grid point" + alternative_names: + - "smnnnb" + 228074: + name: "Smos observation time for the satellite soil moisture data" + alternative_names: + - "smnntim" + 228078: + name: "Gpp coefficient from biogenic flux adjustment system" + alternative_names: + - "gppbfas" + 228079: + name: "Rec coefficient from biogenic flux adjustment system" + alternative_names: + - "recbfas" + 228080: + name: "Accumulated carbon dioxide net ecosystem exchange" + alternative_names: + - "aco2nee" + 228081: + name: "Accumulated carbon dioxide gross primary production" + alternative_names: + - "aco2gpp" + 228082: + name: "Accumulated carbon dioxide ecosystem respiration" + alternative_names: + - "aco2rec" + 228083: + name: "Flux of carbon dioxide net ecosystem exchange" + alternative_names: + - "fco2nee" + 228084: + name: "Flux of carbon dioxide gross primary production" + alternative_names: + - "fco2gpp" + 228085: + name: "Flux of carbon dioxide ecosystem respiration" + alternative_names: + - "fco2rec" + 228086: + name: "Soil moisture top 20 cm" + alternative_names: + - "sm20" + 228087: + name: "Soil moisture top 100 cm" + alternative_names: + - "sm100" + 228088: + name: "Total column supercooled liquid water" + alternative_names: + - "tcslw" + 228089: + name: "Total column rain water" + alternative_names: + - "tcrw" + 228090: + name: "Total column snow water" + alternative_names: + - "tcsw" + 228091: + name: "Canopy cover fraction" + alternative_names: + - "ccf" + 228092: + name: "Soil texture fraction" + alternative_names: + - "stf" + 228093: + name: "Volumetric soil moisture" + alternative_names: + - "swv" + 228094: + name: "Ice temperature" + alternative_names: + - "ist" + 228095: + name: "Soil temperature top 20 cm" + alternative_names: + - "st20" + 228096: + name: "Soil temperature top 100 cm" + alternative_names: + - "st100" + 228100: + name: "Evaporation from the top of canopy" + alternative_names: + - "evatc" + 228101: + name: "Evaporation from bare soil" + alternative_names: + - "evabs" + 228102: + name: "Evaporation from open water surfaces excluding oceans" + alternative_names: + - "evaow" + 228103: + name: "Evaporation from vegetation transpiration" + alternative_names: + - "evavt" + 228104: + name: "Atmosphere emission mass flux of methane from wetlands" + alternative_names: + - "e_wlch4" + 228105: + name: "Solar induced chlorophyll fluorescence at 740nm" + alternative_names: + - "sif740" + 228106: + name: "Solar induced chlorophyll fluorescence at 755nm" + alternative_names: + - "sif755" + 228107: + name: "Solar induced chlorophyll fluorescence at 771nm" + alternative_names: + - "sif771" + 228108: + name: "Solar induced chlorophyll fluorescence at 757nm" + alternative_names: + - "sif757" + 228109: + name: "Accumulated mass emission of methane from wetlands" + alternative_names: + - "acc_e_wlch4" + 228129: + name: "Surface short-wave (solar) radiation downward clear-sky" + alternative_names: + - "ssrdc" + 228130: + name: "Surface long-wave (thermal) radiation downward clear-sky" + alternative_names: + - "strdc" + 228131: + name: "10 metre u-component of neutral wind" + alternative_names: + - "u10n" + 228132: + name: "10 metre v-component of neutral wind" + alternative_names: + - "v10n" + 228134: + name: "V-tendency from non-orographic wave drag" + alternative_names: + - "vtnowd" + 228136: + name: "U-tendency from non-orographic wave drag" + alternative_names: + - "utnowd" + 228139: + name: "Soil temperature" + alternative_names: + - "st" + 228141: + name: "Snow depth water equivalent" + alternative_names: + - "sd" + 228143: + name: "Convective precipitation" + alternative_names: + - "cp" + 228144: + name: "Snowfall water equivalent" + alternative_names: + - "sf" + 228164: + name: "Total cloud cover" + alternative_names: + - "tcc" + 228170: + name: "Field capacity" + alternative_names: + - "cap" + 228171: + name: "Wilting point" + alternative_names: + - "wilt" + 228205: + name: "Water runoff and drainage" + alternative_names: + - "ro" + 228216: + name: "Accumulated freezing rain" + alternative_names: + - "fzra" + 228217: + name: "Instantaneous large-scale surface precipitation fraction" + alternative_names: + - "ilspf" + 228218: + name: "Convective rain rate" + alternative_names: + - "crr" + 228219: + name: "Large scale rain rate" + alternative_names: + - "lsrr" + 228220: + name: "Convective snowfall rate water equivalent" + alternative_names: + - "csfr" + 228221: + name: "Large scale snowfall rate water equivalent" + alternative_names: + - "lssfr" + 228222: + name: "Maximum total precipitation rate in the last 3 hours" + alternative_names: + - "mxtpr3" + 228223: + name: "Minimum total precipitation rate in the last 3 hours" + alternative_names: + - "mntpr3" + 228224: + name: "Maximum total precipitation rate in the last 6 hours" + alternative_names: + - "mxtpr6" + 228225: + name: "Minimum total precipitation rate in the last 6 hours" + alternative_names: + - "mntpr6" + 228226: + name: "Maximum total precipitation rate since previous post-processing" + alternative_names: + - "mxtpr" + 228227: + name: "Minimum total precipitation rate since previous post-processing" + alternative_names: + - "mntpr" + 228228: + name: "Total precipitation" + alternative_names: + - "tp" + 228229: + name: "Smos first brightness temperature bias correction parameter" + alternative_names: + - "smos_tb_cdfa" + 228230: + name: "Smos second brightness temperature bias correction parameter" + alternative_names: + - "smos_tb_cdfb" + 228231: + name: "Mixed-layer cape in the lowest 50 hpa" + alternative_names: + - "mlcape50" + 228232: + name: "Mixed-layer cin in the lowest 50 hpa" + alternative_names: + - "mlcin50" + 228233: + name: "Mixed-layer cape in the lowest 100 hpa" + alternative_names: + - "mlcape100" + 228234: + name: "Mixed-layer cin in the lowest 100 hpa" + alternative_names: + - "mlcin100" + 228235: + name: "Most-unstable cape" + alternative_names: + - "mucape" + 228236: + name: "Most-unstable cin" + alternative_names: + - "mucin" + 228237: + name: "Departure level of the most unstable parcel expressed as pressure" + alternative_names: + - "mudlp" + 228239: + name: "200 metre u wind component" + alternative_names: + - "200u" + 228240: + name: "200 metre v wind component" + alternative_names: + - "200v" + 228241: + name: "200 metre wind speed" + alternative_names: + - "200si" + 228242: + name: "Surface solar radiation diffuse total sky" + alternative_names: + - "fdif" + 228243: + name: "Surface solar radiation diffuse clear-sky" + alternative_names: + - "cdif" + 228244: + name: "Surface albedo of direct radiation" + alternative_names: + - "aldr" + 228245: + name: "Surface albedo of diffuse radiation" + alternative_names: + - "aldf" + 228246: + name: "100 metre u wind component" + alternative_names: + - "100u" + 228247: + name: "100 metre v wind component" + alternative_names: + - "100v" + 228248: + name: "Surface short wave-effective total cloudiness" + alternative_names: + - "tccsw" + 228249: + name: "100 metre wind speed" + alternative_names: + - "100si" + 228250: + name: "Irrigation fraction" + alternative_names: + - "irrfr" + 228251: + name: "Potential evaporation" + alternative_names: + - "pev" + 228252: + name: "Irrigation" + alternative_names: + - "irr" + 228253: + name: "Ascat first soil moisture cdf matching parameter" + alternative_names: + - "ascat_sm_cdfa" + 228254: + name: "Ascat second soil moisture cdf matching parameter" + alternative_names: + - "ascat_sm_cdfb" + 228255: + name: "Surface long wave-effective total cloudiness" + alternative_names: + - "tcclw" + 229001: + name: "Urban cover" + alternative_names: + - "cur" + 229002: + name: "Road cover" + alternative_names: + - "cro" + 229003: + name: "Building cover" + alternative_names: + - "cbu" + 229004: + name: "Building height" + alternative_names: + - "bldh" + 229005: + name: "Vertical-to-horizontal area ratio" + alternative_names: + - "hwr" + 229006: + name: "Standard deviation of building height" + alternative_names: + - "bhstd" + 229007: + name: "Wetland cover" + alternative_names: + - "cwe" + 229008: + name: "Wetland type" + alternative_names: + - "twe" + 229009: + name: "Irrigation cover" + alternative_names: + - "cirr" + 229010: + name: "C4 crop cover" + alternative_names: + - "c4cr" + 229011: + name: "C4 grass cover" + alternative_names: + - "c4gr" + 230008: + name: "Surface runoff (variable resolution)" + alternative_names: + - "srovar" + 230009: + name: "Sub-surface runoff (variable resolution)" + alternative_names: + - "ssrovar" + 230020: + name: "Clear sky surface photosynthetically active radiation (variable resolution)" + alternative_names: + - "parcsvar" + 230021: + name: "Total sky direct solar radiation at surface (variable resolution)" + alternative_names: + - "fdirvar" + 230022: + name: "Clear-sky direct solar radiation at surface (variable resolution)" + alternative_names: + - "cdirvar" + 230044: + name: "Snow evaporation (variable resolution)" + alternative_names: + - "esvar" + 230045: + name: "Snowmelt (variable resolution)" + alternative_names: + - "smltvar" + 230046: + name: "Solar duration (variable resolution)" + alternative_names: + - "sdurvar" + 230047: + name: "Direct solar radiation (variable resolution)" + alternative_names: + - "dsrpvar" + 230050: + name: "Large-scale precipitation fraction (variable resolution)" + alternative_names: + - "lspfvar" + 230057: + name: "Downward uv radiation at the surface (variable resolution)" + alternative_names: + - "uvbvar" + 230058: + name: "Photosynthetically active radiation at the surface (variable resolution)" + alternative_names: + - "parvar" + 230080: + name: "Accumulated carbon dioxide net ecosystem exchange (variable resolution)" + alternative_names: + - "aco2neevar" + 230081: + name: "Accumulated carbon dioxide gross primary production (variable resolution)" + alternative_names: + - "aco2gppvar" + 230082: + name: "Accumulated carbon dioxide ecosystem respiration (variable resolution)" + alternative_names: + - "aco2recvar" + 230129: + name: "Surface solar radiation downward clear-sky (variable resolution)" + alternative_names: + - "ssrdcvar" + 230130: + name: "Surface thermal radiation downward clear-sky (variable resolution)" + alternative_names: + - "strdcvar" + 230142: + name: "Stratiform precipitation (large-scale precipitation) (variable resolution)" + alternative_names: + - "lspvar" + 230143: + name: "Convective precipitation (variable resolution)" + alternative_names: + - "cpvar" + 230144: + name: "Snowfall (convective + stratiform) (variable resolution)" + alternative_names: + - "sfvar" + 230145: + name: "Boundary layer dissipation (variable resolution)" + alternative_names: + - "bldvar" + 230146: + name: "Surface sensible heat flux (variable resolution)" + alternative_names: + - "sshfvar" + 230147: + name: "Surface latent heat flux (variable resolution)" + alternative_names: + - "slhfvar" + 230169: + name: "Surface solar radiation downwards (variable resolution)" + alternative_names: + - "ssrdvar" + 230174: + name: "Albedo (variable resolution)" + alternative_names: + - "alvar" + 230175: + name: "Surface thermal radiation downwards (variable resolution)" + alternative_names: + - "strdvar" + 230176: + name: "Surface net solar radiation (variable resolution)" + alternative_names: + - "ssrvar" + 230177: + name: "Surface net thermal radiation (variable resolution)" + alternative_names: + - "strvar" + 230178: + name: "Top net solar radiation (variable resolution)" + alternative_names: + - "tsrvar" + 230179: + name: "Top net thermal radiation (variable resolution)" + alternative_names: + - "ttrvar" + 230180: + name: "East-west surface stress (variable resolution)" + alternative_names: + - "ewssvar" + 230181: + name: "North-south surface stress (variable resolution)" + alternative_names: + - "nsssvar" + 230182: + name: "Evaporation (variable resolution)" + alternative_names: + - "evar" + 230189: + name: "Sunshine duration (variable resolution)" + alternative_names: + - "sundvar" + 230195: + name: "Longitudinal component of gravity wave stress (variable resolution)" + alternative_names: + - "lgwsvar" + 230196: + name: "Meridional component of gravity wave stress (variable resolution)" + alternative_names: + - "mgwsvar" + 230197: + name: "Gravity wave dissipation (variable resolution)" + alternative_names: + - "gwdvar" + 230198: + name: "Skin reservoir content (variable resolution)" + alternative_names: + - "srcvar" + 230205: + name: "Runoff (variable resolution)" + alternative_names: + - "rovar" + 230208: + name: "Top net solar radiation, clear sky (variable resolution)" + alternative_names: + - "tsrcvar" + 230209: + name: "Top net thermal radiation, clear sky (variable resolution)" + alternative_names: + - "ttrcvar" + 230210: + name: "Surface net solar radiation, clear sky (variable resolution)" + alternative_names: + - "ssrcvar" + 230211: + name: "Surface net thermal radiation, clear sky (variable resolution)" + alternative_names: + - "strcvar" + 230212: + name: "Toa incident solar radiation (variable resolution)" + alternative_names: + - "tisrvar" + 230213: + name: "Vertically integrated moisture divergence (variable resolution)" + alternative_names: + - "vimdvar" + 230216: + name: "Accumulated freezing rain (variable resolution)" + alternative_names: + - "fzravar" + 230228: + name: "Total precipitation (variable resolution)" + alternative_names: + - "tpvar" + 230239: + name: "Convective snowfall (variable resolution)" + alternative_names: + - "csfvar" + 230240: + name: "Large-scale snowfall (variable resolution)" + alternative_names: + - "lsfvar" + 230251: + name: "Potential evaporation (variable resolution)" + alternative_names: + - "pevvar" + 231001: + name: "Accumulated freezing rain water equivalent" + alternative_names: + - "fzrawe" + 231002: + name: "Runoff water equivalent (surface plus subsurface)" + alternative_names: + - "rowe" + 231003: + name: "Snow evaporation water equivalent" + alternative_names: + - "eswe" + 231004: + name: "Potential evaporation rate" + alternative_names: + - "pevr" + 231005: + name: "Potential evaporation" + alternative_names: + - "peva" + 231006: + name: "Tile fraction" + alternative_names: + - "tifr" + 231007: + name: "Tile percentage" + alternative_names: + - "tipe" + 231008: + name: "Forecast logarithm of surface roughness length for moisture" + alternative_names: + - "flsrm" + 231009: + name: "Surface runoff rate" + alternative_names: + - "surfror" + 231010: + name: "Surface runoff" + alternative_names: + - "surfro" + 231011: + name: "Sub-surface runoff rate" + alternative_names: + - "ssurfror" + 231012: + name: "Sub-surface runoff" + alternative_names: + - "ssurfro" + 231013: + name: "Reflectance in 0.4 micron channel" + alternative_names: + - "rfl04" + 231014: + name: "Vertical divergence" + alternative_names: + - "vdiv" + 231015: + name: "Drag thermal coefficient" + alternative_names: + - "dtc" + 231016: + name: "Drag evaporation coefficient" + alternative_names: + - "dec" + 231017: + name: "Pressure departure from hydrostatic state" + alternative_names: + - "pdhs" + 231018: + name: "Surface net radiation flux (sw and lw)" + alternative_names: + - "snrf" + 231019: + name: "Top net radiation flux (sw and lw)" + alternative_names: + - "tnrf" + 231020: + name: "Time-mean top net radiation flux (sw and lw)" + alternative_names: + - "mtnrf" + 231021: + name: "Global irradiance on tilted surfaces" + alternative_names: + - "gits" + 231022: + name: "Eady growth rate" + alternative_names: + - "eagr" + 231023: + name: "Tropical cyclones track density" + alternative_names: + - "tdtc" + 231024: + name: "Canopy air temperature" + alternative_names: + - "cant" + 231025: + name: "Soil wetness index (total layer)" + alternative_names: + - "swit" + 231026: + name: "Soil wetness index (root zone)" + alternative_names: + - "swir" + 231027: + name: "Soil wetness index (layer)" + alternative_names: + - "swil" + 231028: + name: "Distance downward from roof surface" + alternative_names: + - "ddrf" + 231029: + name: "Distance inward from outer wall surface" + alternative_names: + - "diws" + 231030: + name: "Distance downward from road surface" + alternative_names: + - "ddrd" + 231031: + name: "Renewable power capacity" + alternative_names: + - "rpc" + 231032: + name: "Renewable power production rate" + alternative_names: + - "rppr" + 231033: + name: "Renewable power production" + alternative_names: + - "rpp" + 231034: + name: "Wind power capacity" + alternative_names: + - "wpc" + 231035: + name: "Wind power production rate" + alternative_names: + - "wppr" + 231036: + name: "Wind power production" + alternative_names: + - "wpp" + 231037: + name: "Solar photovoltaic (pv) power capacity" + alternative_names: + - "pvpc" + 231038: + name: "Solar photovoltaic (pv) power production rate" + alternative_names: + - "pvppr" + 231039: + name: "Solar photovoltaic (pv) power production" + alternative_names: + - "pvpp" + 231040: + name: "Graupel (snow pellets) precipitation" + alternative_names: + - "tgrp" + 231041: + name: "Time-integrated total lightning flash density" + alternative_names: + - "litotint" + 231042: + name: "Maximum total column integrated graupel (snow pellets)" + alternative_names: + - "maxtcg" + 231043: + name: "Minimum visibility" + alternative_names: + - "minvis" + 231044: + name: "Geometric height of theta level above ground" + alternative_names: + - "hthg" + 231045: + name: "Pressure at cloud base" + alternative_names: + - "pcdb" + 231046: + name: "Geometric height of adiabatic condensation level above ground" + alternative_names: + - "hacg" + 231047: + name: "Geometric height of free convection level above ground" + alternative_names: + - "hfcg" + 231048: + name: "Geometric height of neutral buoyancy level above ground" + alternative_names: + - "hnbg" + 231049: + name: "Geometric height of atmospheric isothermal level above ground" + alternative_names: + - "haig" + 231050: + name: "Roof temperature" + alternative_names: + - "rft" + 231051: + name: "Wall temperature" + alternative_names: + - "wlt" + 231052: + name: "Road temperature" + alternative_names: + - "rdt" + 231053: + name: "Snow depth water equivalent on roof" + alternative_names: + - "sdrf" + 231054: + name: "Snow depth water equivalent on road" + alternative_names: + - "sdrd" + 231055: + name: "Urban canyon temperature" + alternative_names: + - "uct" + 231056: + name: "Urban canyon specific humidity" + alternative_names: + - "ucq" + 231057: + name: "Convective snowfall water equivalent" + alternative_names: + - "csfwe" + 231058: + name: "Large-scale snowfall water equivalent" + alternative_names: + - "lsfwe" + 231059: + name: "Lake surface temperature" + alternative_names: + - "lslt" + 231060: + name: "Surface bulk richardson number" + alternative_names: + - "sbrn" + 231061: + name: "Time-maximum 2 metre relative humidity" + alternative_names: + - "mx2r" + 231062: + name: "Time-minimum 2 metre relative humidity" + alternative_names: + - "mn2r" + 231063: + name: "Surface roughness for heat" + alternative_names: + - "srhe" + 231064: + name: "Surface roughness for moisture" + alternative_names: + - "srmo" + 232000: + name: "Burned area" + alternative_names: + - "fba" + 232001: + name: "Burning area" + alternative_names: + - "bia" + 232002: + name: "Burnable area" + alternative_names: + - "baa" + 232003: + name: "Un-burnable area" + alternative_names: + - "ubaa" + 232004: + name: "Fuel load" + alternative_names: + - "fuell" + 232005: + name: "Combustion completeness" + alternative_names: + - "combc" + 232006: + name: "Fuel moisture content" + alternative_names: + - "fuelmc" + 232007: + name: "Live leaf fuel load" + alternative_names: + - "llfl" + 232008: + name: "Live wood fuel load" + alternative_names: + - "lwfl" + 232009: + name: "Dead leaf fuel load" + alternative_names: + - "dlfl" + 232010: + name: "Dead wood fuel load" + alternative_names: + - "dwfl" + 232011: + name: "Live fuel moisture content" + alternative_names: + - "lfmc" + 232012: + name: "Fine dead leaf moisture content" + alternative_names: + - "fdlmc" + 232013: + name: "Dense dead leaf moisture content" + alternative_names: + - "ddlmc" + 232014: + name: "Fine dead wood moisture content" + alternative_names: + - "fdwmc" + 232015: + name: "Dense dead wood moisture content" + alternative_names: + - "ddwmc" + 233000: + name: + "Time-integrated total column vertically-integrated eastward geopotential + flux" + alternative_names: + - "tvige" + 233001: + name: + "Time-integrated total column vertically-integrated northward geopotential + flux" + alternative_names: + - "tvign" + 233002: + name: + "Time-integrated total column vertically-integrated divergence of water + geopotential flux" + alternative_names: + - "tviwgd" + 233003: + name: + "Time-integrated total column vertically-integrated divergence of geopotential + flux" + alternative_names: + - "tvigd" + 233004: + name: "Time-integrated total column vertically-integrated eastward enthalpy flux" + alternative_names: + - "tviee" + 233005: + name: "Time-integrated total column vertically-integrated northward enthalpy flux" + alternative_names: + - "tvien" + 233006: + name: + "Time-integrated total column vertically-integrated eastward kinetic energy + flux" + alternative_names: + - "tvikee" + 233007: + name: + "Time-integrated total column vertically-integrated northward kinetic energy + flux" + alternative_names: + - "tviken" + 233008: + name: + "Time-integrated total column vertically-integrated eastward total energy + flux" + alternative_names: + - "tvitee" + 233009: + name: + "Time-integrated total column vertically-integrated northward total energy + flux" + alternative_names: + - "tviten" + 233010: + name: + "Time-integrated total column vertically-integrated divergence of enthalpy + flux" + alternative_names: + - "tvied" + 233011: + name: + "Time-integrated total column vertically-integrated divergence of kinetic + energy flux" + alternative_names: + - "tviked" + 233012: + name: + "Time-integrated total column vertically-integrated divergence of total + energy flux" + alternative_names: + - "tvited" + 233013: + name: + "Time-integrated total column vertically-integrated divergence of water + enthalpy flux" + alternative_names: + - "tviwed" + 233014: + name: "Time integrated, vertically integrated divergence of mass flux" + alternative_names: + - "tvimd" + 233015: + name: "Time integrated, vertically integrated eastward mass flux" + alternative_names: + - "tvime" + 233016: + name: "Time integrated, vertically integrated northward mass flux" + alternative_names: + - "tvimn" + 233017: + name: "Time integrated, vertically integrated divergence of water vapour flux" + alternative_names: + - "tviwvd" + 233018: + name: + "Time integrated, vertically integrated divergence of cloud liquid water + flux" + alternative_names: + - "tviclwd" + 233019: + name: "Time integrated, vertically integrated divergence of cloud ice water flux" + alternative_names: + - "tviciwd" + 233020: + name: "Time integrated, vertically integrated divergence of rain flux" + alternative_names: + - "tvird" + 233021: + name: "Time integrated, vertically integrated divergence of snow flux" + alternative_names: + - "tvisd" + 233022: + name: "Time integrated, vertically integrated eastward water vapour flux" + alternative_names: + - "tviwve" + 233023: + name: "Time integrated, vertically integrated northward water vapour flux" + alternative_names: + - "tviwvn" + 233024: + name: "Time integrated, vertically integrated eastward cloud liquid water flux" + alternative_names: + - "tviclwe" + 233025: + name: "Time integrated, vertically integrated northward cloud liquid water flux" + alternative_names: + - "tviclwn" + 233026: + name: "Time integrated, vertically integrated eastward cloud ice water flux" + alternative_names: + - "tviciwe" + 233027: + name: "Time integrated, vertically integrated northward cloud ice water flux" + alternative_names: + - "tviciwn" + 233028: + name: "Time integrated, vertically integrated eastward rain flux" + alternative_names: + - "tvire" + 233029: + name: "Time integrated, vertically integrated northward rain flux" + alternative_names: + - "tvirn" + 233030: + name: "Time integrated, vertically integrated eastward snow flux" + alternative_names: + - "tvise" + 233031: + name: "Time integrated, vertically integrated northward snow flux" + alternative_names: + - "tvisn" + 233032: + name: "Time integrated, vertically integrated eastward ozone flux" + alternative_names: + - "tvioze" + 233033: + name: "Time integrated, vertically integrated northward ozone flux" + alternative_names: + - "tviozn" + 233034: + name: "Time integrated, vertically integrated divergence of ozone flux" + alternative_names: + - "tviozd" + 233035: + name: "Time integrated, vertically integrated net source of ozone" + alternative_names: + - "tvions" + 234139: + name: "Surface temperature significance" + alternative_names: + - "sts" + 234151: + name: "Mean sea level pressure significance" + alternative_names: + - "msls" + 234167: + name: "2 metre temperature significance" + alternative_names: + - "2ts" + 234228: + name: "Total precipitation significance" + alternative_names: + - "tps" + 235001: + name: "Mean temperature tendency due to short-wave radiation" + alternative_names: + - "mttswr" + 235002: + name: "Mean temperature tendency due to long-wave radiation" + alternative_names: + - "mttlwr" + 235003: + name: "Mean temperature tendency due to short-wave radiation, clear sky" + alternative_names: + - "mttswrcs" + 235004: + name: "Mean temperature tendency due to long-wave radiation, clear sky" + alternative_names: + - "mttlwrcs" + 235005: + name: "Mean temperature tendency due to parametrisations" + alternative_names: + - "mttpm" + 235006: + name: "Mean specific humidity tendency due to parametrisations" + alternative_names: + - "mqtpm" + 235007: + name: "Mean eastward wind tendency due to parametrisations" + alternative_names: + - "mutpm" + 235008: + name: "Mean northward wind tendency due to parametrisations" + alternative_names: + - "mvtpm" + 235009: + name: "Mean updraught mass flux" + alternative_names: + - "mumf" + 235010: + name: "Mean downdraught mass flux" + alternative_names: + - "mdmf" + 235011: + name: "Mean updraught detrainment rate" + alternative_names: + - "mudr" + 235012: + name: "Mean downdraught detrainment rate" + alternative_names: + - "mddr" + 235013: + name: "Mean total precipitation flux" + alternative_names: + - "mtpf" + 235014: + name: "Mean turbulent diffusion coefficient for heat" + alternative_names: + - "mtdch" + 235015: + name: "Time integral of rain flux" + alternative_names: + - "tirf" + 235017: + name: "Time integral of surface eastward momentum flux" + alternative_names: + - "tisemf" + 235018: + name: "Time integral of surface northward momentum flux" + alternative_names: + - "tisnmf" + 235019: + name: "Time integral of surface latent heat evaporation flux" + alternative_names: + - "tislhef" + 235020: + name: "Mean surface runoff rate" + alternative_names: + - "msror" + 235021: + name: "Mean sub-surface runoff rate" + alternative_names: + - "mssror" + 235022: + name: "Mean surface photosynthetically active radiation flux, clear sky" + alternative_names: + - "msparfcs" + 235023: + name: "Mean snow evaporation rate" + alternative_names: + - "mser" + 235024: + name: "Mean snowmelt rate" + alternative_names: + - "msmr" + 235025: + name: "Mean magnitude of turbulent surface stress" + alternative_names: + - "mmtss" + 235026: + name: "Mean large-scale precipitation fraction" + alternative_names: + - "mlspf" + 235027: + name: "Mean surface downward uv radiation flux" + alternative_names: + - "msdwuvrf" + 235028: + name: "Mean surface photosynthetically active radiation flux" + alternative_names: + - "msparf" + 235029: + name: "Mean large-scale precipitation rate" + alternative_names: + - "mlspr" + 235030: + name: "Mean convective precipitation rate" + alternative_names: + - "mcpr" + 235031: + name: "Mean snowfall rate" + alternative_names: + - "msr" + 235032: + name: "Mean boundary layer dissipation" + alternative_names: + - "mbld" + 235033: + name: "Mean surface sensible heat flux" + alternative_names: + - "msshf" + 235034: + name: "Mean surface latent heat flux" + alternative_names: + - "mslhf" + 235035: + name: "Mean surface downward short-wave radiation flux" + alternative_names: + - "msdwswrf" + 235036: + name: "Mean surface downward long-wave radiation flux" + alternative_names: + - "msdwlwrf" + 235037: + name: "Mean surface net short-wave radiation flux" + alternative_names: + - "msnswrf" + 235038: + name: "Mean surface net long-wave radiation flux" + alternative_names: + - "msnlwrf" + 235039: + name: "Mean top net short-wave radiation flux" + alternative_names: + - "mtnswrf" + 235040: + name: "Mean top net long-wave radiation flux" + alternative_names: + - "mtnlwrf" + 235041: + name: "Mean eastward turbulent surface stress" + alternative_names: + - "metss" + 235042: + name: "Mean northward turbulent surface stress" + alternative_names: + - "mntss" + 235043: + name: "Mean evaporation rate" + alternative_names: + - "mer" + 235044: + name: "Sunshine duration fraction" + alternative_names: + - "sdf" + 235045: + name: "Mean eastward gravity wave surface stress" + alternative_names: + - "megwss" + 235046: + name: "Mean northward gravity wave surface stress" + alternative_names: + - "mngwss" + 235047: + name: "Mean gravity wave dissipation" + alternative_names: + - "mgwd" + 235048: + name: "Mean runoff rate" + alternative_names: + - "mror" + 235049: + name: "Mean top net short-wave radiation flux, clear sky" + alternative_names: + - "mtnswrfcs" + 235050: + name: "Mean top net long-wave radiation flux, clear sky" + alternative_names: + - "mtnlwrfcs" + 235051: + name: "Mean surface net short-wave radiation flux, clear sky" + alternative_names: + - "msnswrfcs" + 235052: + name: "Mean surface net long-wave radiation flux, clear sky" + alternative_names: + - "msnlwrfcs" + 235053: + name: "Mean top downward short-wave radiation flux" + alternative_names: + - "mtdwswrf" + 235054: + name: "Mean vertically integrated moisture divergence" + alternative_names: + - "mvimd" + 235055: + name: "Mean total precipitation rate" + alternative_names: + - "mtpr" + 235056: + name: "Mean convective snowfall rate" + alternative_names: + - "mcsr" + 235057: + name: "Mean large-scale snowfall rate" + alternative_names: + - "mlssr" + 235058: + name: "Mean surface direct short-wave radiation flux" + alternative_names: + - "msdrswrf" + 235059: + name: "Mean surface direct short-wave radiation flux, clear sky" + alternative_names: + - "msdrswrfcs" + 235060: + name: "Mean surface diffuse short-wave radiation flux" + alternative_names: + - "msdfswrf" + 235061: + name: "Mean surface diffuse short-wave radiation flux, clear sky" + alternative_names: + - "msdfswrfcs" + 235062: + name: "Mean carbon dioxide net ecosystem exchange flux" + alternative_names: + - "mcdneef" + 235063: + name: "Mean carbon dioxide gross primary production flux" + alternative_names: + - "mcdgppf" + 235064: + name: "Mean carbon dioxide ecosystem respiration flux" + alternative_names: + - "mcderf" + 235065: + name: "Mean rain rate" + alternative_names: + - "mrr" + 235066: + name: "Mean convective rain rate" + alternative_names: + - "mcrr" + 235067: + name: "Mean large-scale rain rate" + alternative_names: + - "mlsrr" + 235068: + name: "Mean surface downward short-wave radiation flux, clear sky" + alternative_names: + - "msdwswrfcs" + 235069: + name: "Mean surface downward long-wave radiation flux, clear sky" + alternative_names: + - "msdwlwrfcs" + 235070: + name: "Mean potential evaporation rate" + alternative_names: + - "mper" + 235071: + name: "Time integral of surface latent heat sublimation flux" + alternative_names: + - "tislhsf" + 235072: + name: "Time integral of snow evaporation flux" + alternative_names: + - "tisef" + 235073: + name: "Time integral of evapotranspiration flux" + alternative_names: + - "tietrf" + 235074: + name: "Time-mean evapotranspiration flux" + alternative_names: + - "metrf" + 235075: + name: "Time integral of potential evapotranspiration rate" + alternative_names: + - "tipet" + 235076: + name: "Time-mean potential evapotranspiration rate" + alternative_names: + - "mpet" + 235077: + name: "Time-mean volumetric soil moisture" + alternative_names: + - "mvsw" + 235078: + name: "Time-mean snow depth water equivalent" + alternative_names: + - "msd" + 235079: + name: "Time-mean skin temperature" + alternative_names: + - "mskt" + 235080: + name: "Time-mean snow density" + alternative_names: + - "avg_rsn" + 235081: + name: "Time-mean low vegetation cover" + alternative_names: + - "avg_cvl" + 235082: + name: "Time-mean high vegetation cover" + alternative_names: + - "avg_cvh" + 235083: + name: "Time-mean sea ice area fraction" + alternative_names: + - "avg_ci" + 235084: + name: "Time-mean sea surface temperature" + alternative_names: + - "avg_sst" + 235085: + name: "Time-mean leaf area index, low vegetation" + alternative_names: + - "avg_lai_lv" + 235086: + name: "Time-mean leaf area index, high vegetation" + alternative_names: + - "avg_lai_hv" + 235087: + name: "Time-mean total column liquid water" + alternative_names: + - "avg_tclw" + 235088: + name: "Time-mean total column cloud ice water" + alternative_names: + - "avg_tciw" + 235089: + name: "Time-mean 2 metre specific humidity" + alternative_names: + - "avg_2sh" + 235090: + name: "Time-mean lake mix-layer temperature" + alternative_names: + - "avg_lmlt" + 235091: + name: "Time-mean lake mix-layer depth" + alternative_names: + - "avg_lmld" + 235092: + name: "Time-mean 2 metre relative humidity" + alternative_names: + - "avg_2r" + 235093: + name: "Time-mean fraction of snow cover" + alternative_names: + - "avg_fscov" + 235094: + name: "Time-mean soil temperature" + alternative_names: + - "avg_sot" + 235095: + name: "Time-mean snow depth" + alternative_names: + - "avg_sde" + 235096: + name: "Time-mean snow cover" + alternative_names: + - "avg_snowc" + 235097: + name: "Time-mean wind speed" + alternative_names: + - "avg_ws" + 235098: + name: "Time-mean pressure" + alternative_names: + - "avg_pres" + 235100: + name: "Time-mean potential vorticity" + alternative_names: + - "avg_pv" + 235101: + name: "Time-mean specific rain water content" + alternative_names: + - "avg_crwc" + 235102: + name: "Time-mean specific snow water content" + alternative_names: + - "avg_cswc" + 235103: + name: "Time-mean eta-coordinate vertical velocity" + alternative_names: + - "avg_etadot" + 235117: + name: "Time-mean most-unstable cape" + alternative_names: + - "avg_mucape" + 235129: + name: "Time-mean geopotential" + alternative_names: + - "avg_z" + 235130: + name: "Time-mean temperature" + alternative_names: + - "avg_t" + 235131: + name: "Time-mean u component of wind" + alternative_names: + - "avg_u" + 235132: + name: "Time-mean v component of wind" + alternative_names: + - "avg_v" + 235133: + name: "Time-mean specific humidity" + alternative_names: + - "avg_q" + 235134: + name: "Time-mean surface pressure" + alternative_names: + - "avg_sp" + 235135: + name: "Time-mean vertical velocity" + alternative_names: + - "avg_w" + 235136: + name: "Time-mean total column water" + alternative_names: + - "avg_tcw" + 235137: + name: "Time-mean total column vertically-integrated water vapour" + alternative_names: + - "avg_tcwv" + 235138: + name: "Time-mean vorticity (relative)" + alternative_names: + - "avg_vo" + 235141: + name: "Time-mean snow depth" + alternative_names: + - "avg_sd_m" + 235151: + name: "Time-mean mean sea level pressure" + alternative_names: + - "avg_msl" + 235152: + name: "Time-mean logarithm of surface pressure" + alternative_names: + - "avg_lnsp" + 235155: + name: "Time-mean divergence" + alternative_names: + - "avg_d" + 235157: + name: "Time-mean relative humidity" + alternative_names: + - "avg_r" + 235159: + name: "Time-mean boundary layer height" + alternative_names: + - "avg_blh" + 235165: + name: "Time-mean 10 metre u wind component" + alternative_names: + - "avg_10u" + 235166: + name: "Time-mean 10 metre v wind component" + alternative_names: + - "avg_10v" + 235168: + name: "Time-mean 2 metre dewpoint temperature" + alternative_names: + - "avg_2d" + 235186: + name: "Time-mean low cloud cover" + alternative_names: + - "avg_lcc_frac" + 235187: + name: "Time-mean medium cloud cover" + alternative_names: + - "avg_mcc_frac" + 235188: + name: "Time-mean high cloud cover" + alternative_names: + - "avg_hcc_frac" + 235203: + name: "Time-mean ozone mass mixing ratio" + alternative_names: + - "avg_o3" + 235238: + name: "Time-mean temperature of snow layer" + alternative_names: + - "avg_tsn" + 235243: + name: "Time-mean forecast albedo" + alternative_names: + - "avg_fal_frac" + 235244: + name: "Time-mean forecast surface roughness" + alternative_names: + - "avg_fsr" + 235245: + name: "Time-mean forecast logarithm of surface roughness for heat" + alternative_names: + - "avg_flsr" + 235246: + name: "Time-mean specific cloud liquid water content" + alternative_names: + - "avg_clwc" + 235247: + name: "Time-mean specific cloud ice water content" + alternative_names: + - "avg_ciwc" + 235248: + name: "Time-mean fraction of cloud cover" + alternative_names: + - "avg_cc" + 235257: + name: "Time-mean k index" + alternative_names: + - "avg_kx" + 235258: + name: "Time-mean total totals index" + alternative_names: + - "avg_totalx" + 235262: + name: "Time-mean clear air turbulence (cat)" + alternative_names: + - "avg_cat" + 235270: + name: "Time-mean discharge from rivers or streams" + alternative_names: + - "avg_dis" + 235271: + name: "Time-mean soil wetness index (total layer)" + alternative_names: + - "avg_swit" + 235272: + name: "Time-mean soil wetness index (root zone)" + alternative_names: + - "avg_swir" + 235273: + name: "Time-mean soil wetness index(layer)" + alternative_names: + - "avg_swil" + 235274: + name: "Time-mean floodplain depth" + alternative_names: + - "avg_flddep" + 235275: + name: "Time-mean floodplain flooded fraction" + alternative_names: + - "avg_fldffr" + 235276: + name: "Time-mean floodplain flooded area" + alternative_names: + - "avg_fldfar" + 235277: + name: "Time-mean river fraction" + alternative_names: + - "avg_rivfr" + 235278: + name: "Time-mean river area" + alternative_names: + - "avg_rivar" + 235279: + name: "Time-mean fraction of river coverage plus river related flooding" + alternative_names: + - "avg_rivcffr" + 235280: + name: "Time-mean area of river coverage plus river related flooding" + alternative_names: + - "avg_rivcfar" + 237077: + name: "Time-maximum volumetric soil moisture" + alternative_names: + - "max_vsw" + 237117: + name: "Time-maximum most-unstable cape" + alternative_names: + - "max_mucape" + 238077: + name: "Time-minimum volumetric soil moisture" + alternative_names: + - "min_vsw" + 238117: + name: "Time-minimum most-unstable cape" + alternative_names: + - "min_mucape" + 239077: + name: "Time-standard-deviation volumetric soil moisture" + alternative_names: + - "std_vsw" + 239117: + name: "Time-standard-deviation most-unstable cape" + alternative_names: + - "std_mucape" + 240011: + name: "Cross sectional area of flow in channel" + alternative_names: + - "chcross" + 240012: + name: "Side flow into river channel" + alternative_names: + - "chside" + 240013: + name: "Discharge from rivers or streams" + alternative_names: + - "dis" + 240014: + name: "River storage of water" + alternative_names: + - "rivsto" + 240015: + name: "Floodplain storage of water" + alternative_names: + - "fldsto" + 240016: + name: "Water fraction" + alternative_names: + - "fldfrc" + 240017: + name: "Days since last observation" + alternative_names: + - "dslr" + 240018: + name: "Frost index" + alternative_names: + - "frost" + 240020: + name: "Depth of water on soil surface" + alternative_names: + - "woss" + 240021: + name: "Upstream accumulated precipitation" + alternative_names: + - "tpups" + 240022: + name: "Upstream accumulated snow melt" + alternative_names: + - "smups" + 240023: + name: "Mean discharge in the last 6 hours" + alternative_names: + - "dis06" + 240024: + name: "Mean discharge in the last 24 hours" + alternative_names: + - "dis24" + 240026: + name: "Snow depth at elevation bands" + alternative_names: + - "sd_elev" + 240028: + name: "Groundwater upper storage" + alternative_names: + - "gwus" + 240029: + name: "Groundwater lower storage" + alternative_names: + - "gwls" + 240030: + name: "Lake depth" + alternative_names: + - "lakdph" + 240031: + name: "River depth" + alternative_names: + - "rivdph" + 240032: + name: "River outflow of water" + alternative_names: + - "rivout" + 240033: + name: "Floodplain outflow of water" + alternative_names: + - "fldout" + 240034: + name: "Floodpath outflow of water" + alternative_names: + - "pthflw" + 240035: + name: "Floodplain depth" + alternative_names: + - "flddep" + 240036: + name: "Floodplain flooded fraction" + alternative_names: + - "fldffr" + 240037: + name: "Floodplain flooded area" + alternative_names: + - "fldfar" + 240038: + name: "River fraction" + alternative_names: + - "rivfr" + 240039: + name: "River area" + alternative_names: + - "rivar" + 240040: + name: "Fraction of river coverage plus river related flooding" + alternative_names: + - "rivcffr" + 240041: + name: "Area of river coverage plus river related flooding" + alternative_names: + - "rivcfar" + 250001: + name: "Latitude" + alternative_names: + - "lat" + 250002: + name: "Longitude" + alternative_names: + - "lon" + 250003: + name: "Latitude on t grid" + alternative_names: + - "tlat" + 250004: + name: "Longitude on t grid" + alternative_names: + - "tlon" + 250005: + name: "Latitude on u grid" + alternative_names: + - "ulat" + 250006: + name: "Longitude on u grid" + alternative_names: + - "ulon" + 250007: + name: "Latitude on v grid" + alternative_names: + - "vlat" + 250008: + name: "Longitude on v grid" + alternative_names: + - "vlon" + 250009: + name: "Latitude on w grid" + alternative_names: + - "wlat" + 250010: + name: "Longitude on w grid" + alternative_names: + - "wlon" + 250011: + name: "Latitude on f grid" + alternative_names: + - "flat" + 250012: + name: "Longitude on f grid" + alternative_names: + - "flon" + 254001: + name: + "Covariance between 2-metre temperature and volumetric soil water layer + 1" + alternative_names: + - "covar_t2m_swvl1" + 254002: + name: + "Covariance between 2-metre relative humidity and volumetric soil water + layer 1" + alternative_names: + - "covar_rh2m_swvl1" + 254003: + name: + "Covariance between surface soil moisture and volumetric soil water layer + 1" + alternative_names: + - "covar_ssm_swvl1" + 254004: + name: + "Covariance between 2-metre temperature and volumetric soil water layer + 2" + alternative_names: + - "covar_t2m_swvl2" + 254005: + name: + "Covariance between 2-metre relative humidity and volumetric soil water + layer 2" + alternative_names: + - "covar_rh2m_swvl2" + 254006: + name: + "Covariance between surface soil moisture and volumetric soil water layer + 2" + alternative_names: + - "covar_ssm_swvl2" + 254007: + name: + "Covariance between 2-metre temperature and volumetric soil water layer + 3" + alternative_names: + - "covar_t2m_swvl3" + 254008: + name: + "Covariance between 2-metre relative humidity and volumetric soil water + layer 3" + alternative_names: + - "covar_rh2m_swvl3" + 254009: + name: + "Covariance between surface soil moisture and volumetric soil water layer + 3" + alternative_names: + - "covar_ssm_swvl3" + 254010: + name: "Covariance between 2-metre temperature and soil temperature layer 1" + alternative_names: + - "covar_t2m_stl1" + 254011: + name: + "Covariance between 2-metre relative humidity and soil temperature layer + 1" + alternative_names: + - "covar_rh2m_stl1" + 254012: + name: "Covariance between 2-metre temperature and soil temperature layer 2" + alternative_names: + - "covar_t2m_stl2" + 254013: + name: + "Covariance between 2-metre relative humidity and soil temperature layer + 2" + alternative_names: + - "covar_rh2m_stl2" + 254014: + name: "Covariance between 2-metre temperature and soil temperature layer 3" + alternative_names: + - "covar_t2m_stl3" + 254015: + name: + "Covariance between 2-metre relative humidity and soil temperature layer + 3" + alternative_names: + - "covar_rh2m_stl3" + 254016: + name: "Covariance between 2-metre temperature and temperature of snow layer 1" + alternative_names: + - "covar_t2m_tsn1" + 254017: + name: + "Covariance between 2-metre relative humidity and temperature of snow layer + 1" + alternative_names: + - "covar_rh2m_tsn1" + 254018: + name: "Covariance between 2-metre temperature and temperature of snow layer 2" + alternative_names: + - "covar_t2m_tsn2" + 254019: + name: + "Covariance between 2-metre relative humidity and temperature of snow layer + 2" + alternative_names: + - "covar_rh2m_tsn2" + 254020: + name: "Covariance between 2-metre temperature and temperature of snow layer 3" + alternative_names: + - "covar_t2m_tsn3" + 254021: + name: + "Covariance between 2-metre relative humidity and temperature of snow layer + 3" + alternative_names: + - "covar_rh2m_tsn3" + 260001: + name: "Total column graupel" + alternative_names: + - "tcolg" + 260002: + name: "Latent heat net flux" + alternative_names: + - "lhtfl" + 260003: + name: "Sensible heat net flux" + alternative_names: + - "shtfl" + 260004: + name: "Heat index" + alternative_names: + - "heatx" + 260005: + name: "Wind chill factor" + alternative_names: + - "wcf" + 260006: + name: "Minimum dew point depression" + alternative_names: + - "mindpd" + 260007: + name: "Snow phase change heat flux" + alternative_names: + - "snohf" + 260008: + name: "Vapor pressure" + alternative_names: + - "vapp" + 260009: + name: "Large scale precipitation (non-convective)" + alternative_names: + - "ncpcp" + 260010: + name: "Snowfall rate water equivalent" + alternative_names: + - "srweq" + 260011: + name: "Convective snow" + alternative_names: + - "snoc" + 260012: + name: "Large scale snow" + alternative_names: + - "snol" + 260013: + name: "Snow age" + alternative_names: + - "snoag" + 260014: + name: "Absolute humidity" + alternative_names: + - "absh" + 260015: + name: "Precipitation type" + alternative_names: + - "ptype" + 260016: + name: "Integrated liquid water" + alternative_names: + - "iliqw" + 260017: + name: "Condensate" + alternative_names: + - "tcond" + 260018: + name: "Cloud mixing ratio" + alternative_names: + - "clwmr" + 260019: + name: "Ice water mixing ratio" + alternative_names: + - "icmr" + 260020: + name: "Rain mixing ratio" + alternative_names: + - "rwmr" + 260021: + name: "Snow mixing ratio" + alternative_names: + - "snmr" + 260022: + name: "Horizontal moisture convergence" + alternative_names: + - "mconv" + 260023: + name: "Maximum relative humidity" + alternative_names: + - "maxrh" + 260024: + name: "Maximum absolute humidity" + alternative_names: + - "maxah" + 260025: + name: "Total snowfall" + alternative_names: + - "asnow" + 260026: + name: "Precipitable water category" + alternative_names: + - "pwcat" + 260027: + name: "Hail" + alternative_names: + - "hail" + 260028: + name: "Graupel (snow pellets)" + alternative_names: + - "grle" + 260029: + name: "Categorical rain" + alternative_names: + - "crain" + 260030: + name: "Categorical freezing rain" + alternative_names: + - "cfrzr" + 260031: + name: "Categorical ice pellets" + alternative_names: + - "cicep" + 260032: + name: "Categorical snow" + alternative_names: + - "csnow" + 260033: + name: "Convective precipitation rate" + alternative_names: + - "cprat" + 260034: + name: "Horizontal moisture divergence" + alternative_names: + - "mdiv" + 260035: + name: "Percent frozen precipitation" + alternative_names: + - "cpofp" + 260036: + name: "Potential evaporation" + alternative_names: + - "pevap" + 260037: + name: "Potential evaporation rate" + alternative_names: + - "pevpr" + 260038: + name: "Snow cover" + alternative_names: + - "snowc" + 260039: + name: "Rain fraction of total cloud water" + alternative_names: + - "frain" + 260040: + name: "Rime factor" + alternative_names: + - "rime" + 260041: + name: "Total column integrated rain" + alternative_names: + - "tcolr" + 260042: + name: "Total column integrated snow" + alternative_names: + - "tcols" + 260043: + name: "Large scale water precipitation (non-convective)" + alternative_names: + - "lswp" + 260044: + name: "Convective water precipitation" + alternative_names: + - "cwp" + 260045: + name: "Total water precipitation" + alternative_names: + - "twatp" + 260046: + name: "Total snow precipitation" + alternative_names: + - "tsnowp" + 260047: + name: "Total column water (vertically integrated total water (vapour + cloud water/ice))" + alternative_names: + - "tcwat" + 260048: + name: "Total precipitation rate" + alternative_names: + - "tprate" + 260049: + name: "Total snowfall rate water equivalent" + alternative_names: + - "tsrwe" + 260050: + name: "Large scale precipitation rate" + alternative_names: + - "lsprate" + 260051: + name: "Convective snowfall rate water equivalent" + alternative_names: + - "csrwe" + 260052: + name: "Large scale snowfall rate water equivalent" + alternative_names: + - "lssrwe" + 260053: + name: "Total snowfall rate" + alternative_names: + - "tsrate" + 260054: + name: "Convective snowfall rate" + alternative_names: + - "csrate" + 260055: + name: "Large scale snowfall rate" + alternative_names: + - "lssrate" + 260056: + name: "Water equivalent of accumulated snow depth (deprecated)" + alternative_names: + - "sdwe" + 260057: + name: "Total column integrated water vapour" + alternative_names: + - "tciwv" + 260058: + name: "Rain precipitation rate" + alternative_names: + - "rprate" + 260059: + name: "Snow precipitation rate" + alternative_names: + - "sprate" + 260060: + name: "Freezing rain precipitation rate" + alternative_names: + - "fprate" + 260061: + name: "Ice pellets precipitation rate" + alternative_names: + - "iprate" + 260062: + name: "Momentum flux, u component" + alternative_names: + - "uflx" + 260063: + name: "Momentum flux, v component" + alternative_names: + - "vflx" + 260064: + name: "Maximum wind speed" + alternative_names: + - "maxgust" + 260065: + name: "Wind speed (gust)" + alternative_names: + - "gust" + 260066: + name: "U-component of wind (gust)" + alternative_names: + - "ugust" + 260067: + name: "V-component of wind (gust)" + alternative_names: + - "vgust" + 260068: + name: "Vertical speed shear" + alternative_names: + - "vwsh" + 260069: + name: "Horizontal momentum flux" + alternative_names: + - "mflx" + 260070: + name: "U-component storm motion" + alternative_names: + - "ustm" + 260071: + name: "V-component storm motion" + alternative_names: + - "vstm" + 260072: + name: "Drag coefficient" + alternative_names: + - "cd" + 260073: + name: "Frictional velocity" + alternative_names: + - "fricv" + 260074: + name: "Pressure reduced to msl" + alternative_names: + - "prmsl" + 260075: + name: "Geometric height" + alternative_names: + - "dist" + 260076: + name: "Altimeter setting" + alternative_names: + - "alts" + 260077: + name: "Thickness" + alternative_names: + - "thick" + 260078: + name: "Pressure altitude" + alternative_names: + - "presalt" + 260079: + name: "Density altitude" + alternative_names: + - "denalt" + 260080: + name: "5-wave geopotential height" + alternative_names: + - "5wavh" + 260081: + name: "Zonal flux of gravity wave stress" + alternative_names: + - "u_gwd" + 260082: + name: "Meridional flux of gravity wave stress" + alternative_names: + - "v_gwd" + 260083: + name: "Planetary boundary layer height" + alternative_names: + - "hpbl" + 260084: + name: "5-wave geopotential height anomaly" + alternative_names: + - "5wava" + 260085: + name: "Standard deviation of sub-grid scale orography" + alternative_names: + - "sdsgso" + 260086: + name: "Net short-wave radiation flux (top of atmosphere)" + alternative_names: + - "nswrt" + 260087: + name: "Downward short-wave radiation flux" + alternative_names: + - "dswrf" + 260088: + name: "Upward short-wave radiation flux" + alternative_names: + - "uswrf" + 260089: + name: "Net short wave radiation flux" + alternative_names: + - "nswrf" + 260090: + name: "Photosynthetically active radiation" + alternative_names: + - "photar" + 260091: + name: "Net short-wave radiation flux, clear sky" + alternative_names: + - "nswrfcs" + 260092: + name: "Downward uv radiation" + alternative_names: + - "dwuvr" + 260093: + name: "Uv index (under clear sky)" + alternative_names: + - "uviucs" + 260094: + name: "Uv index" + alternative_names: + - "uvi" + 260095: + name: "Net long wave radiation flux (surface)" + alternative_names: + - "nlwrs" + 260096: + name: "Net long wave radiation flux (top of atmosphere)" + alternative_names: + - "nlwrt" + 260097: + name: "Downward long-wave radiation flux" + alternative_names: + - "dlwrf" + 260098: + name: "Upward long-wave radiation flux" + alternative_names: + - "ulwrf" + 260099: + name: "Net long wave radiation flux" + alternative_names: + - "nlwrf" + 260100: + name: "Net long-wave radiation flux, clear sky" + alternative_names: + - "nlwrcs" + 260101: + name: "Cloud ice" + alternative_names: + - "cice" + 260102: + name: "Cloud water" + alternative_names: + - "cwat" + 260103: + name: "Cloud amount" + alternative_names: + - "cdca" + 260104: + name: "Cloud type" + alternative_names: + - "cdct" + 260105: + name: "Thunderstorm maximum tops" + alternative_names: + - "tmaxt" + 260106: + name: "Thunderstorm coverage" + alternative_names: + - "thunc" + 260107: + name: "Cloud base" + alternative_names: + - "cdcb" + 260108: + name: "Cloud top" + alternative_names: + - "cdct" + 260109: + name: "Ceiling" + alternative_names: + - "ceil" + 260110: + name: "Non-convective cloud cover" + alternative_names: + - "cdlyr" + 260111: + name: "Cloud work function" + alternative_names: + - "cwork" + 260112: + name: "Convective cloud efficiency" + alternative_names: + - "cuefi" + 260113: + name: "Total condensate" + alternative_names: + - "tcond" + 260114: + name: "Total column-integrated cloud water" + alternative_names: + - "tcolw" + 260115: + name: "Total column-integrated cloud ice" + alternative_names: + - "tcoli" + 260116: + name: "Total column-integrated condensate" + alternative_names: + - "tcolc" + 260117: + name: "Ice fraction of total condensate" + alternative_names: + - "fice" + 260118: + name: "Cloud ice mixing ratio" + alternative_names: + - "cdcimr" + 260119: + name: "Sunshine" + alternative_names: + - "suns" + 260120: + name: "Horizontal extent of cumulonimbus (cb)" + alternative_names: + - "_param_260120" + 260121: + name: "K index" + alternative_names: + - "kx" + 260122: + name: "Ko index" + alternative_names: + - "kox" + 260123: + name: "Total totals index" + alternative_names: + - "totalx" + 260124: + name: "Sweat index" + alternative_names: + - "sx" + 260125: + name: "Storm relative helicity" + alternative_names: + - "hlcy" + 260126: + name: "Energy helicity index" + alternative_names: + - "ehlx" + 260127: + name: "Surface lifted index" + alternative_names: + - "lftx" + 260128: + name: "Best (4-layer) lifted index" + alternative_names: + - "4lftx" + 260129: + name: "Aerosol type" + alternative_names: + - "aerot" + 260130: + name: "Total ozone" + alternative_names: + - "tozne" + 260131: + name: "Ozone mixing ratio" + alternative_names: + - "o3mr" + 260132: + name: "Total column integrated ozone" + alternative_names: + - "tcioz" + 260133: + name: "Base spectrum width" + alternative_names: + - "bswid" + 260134: + name: "Base reflectivity" + alternative_names: + - "bref" + 260135: + name: "Base radial velocity" + alternative_names: + - "brvel" + 260136: + name: "Vertically-integrated liquid" + alternative_names: + - "veril" + 260137: + name: "Layer-maximum base reflectivity" + alternative_names: + - "lmaxbr" + 260138: + name: "Precipitation" + alternative_names: + - "prec" + 260139: + name: "Air concentration of caesium 137" + alternative_names: + - "acces" + 260140: + name: "Air concentration of iodine 131" + alternative_names: + - "aciod" + 260141: + name: "Air concentration of radioactive pollutant" + alternative_names: + - "acradp" + 260142: + name: "Ground deposition of caesium 137" + alternative_names: + - "gdces" + 260143: + name: "Ground deposition of iodine 131" + alternative_names: + - "gdiod" + 260144: + name: "Ground deposition of radioactive pollutant" + alternative_names: + - "gdradp" + 260145: + name: "Time-integrated air concentration of caesium pollutant" + alternative_names: + - "tiaccp" + 260146: + name: "Time-integrated air concentration of iodine pollutant" + alternative_names: + - "tiacip" + 260147: + name: "Time-integrated air concentration of radioactive pollutant" + alternative_names: + - "tiacrp" + 260148: + name: "Volcanic ash" + alternative_names: + - "volash" + 260149: + name: "Icing top" + alternative_names: + - "icit" + 260150: + name: "Icing base" + alternative_names: + - "icib" + 260151: + name: "Icing" + alternative_names: + - "ici" + 260152: + name: "Turbulence top" + alternative_names: + - "turbt" + 260153: + name: "Turbulence base" + alternative_names: + - "turbb" + 260154: + name: "Turbulence" + alternative_names: + - "turb" + 260155: + name: "Turbulent kinetic energy" + alternative_names: + - "tke" + 260156: + name: "Planetary boundary layer regime" + alternative_names: + - "pblreg" + 260157: + name: "Contrail intensity" + alternative_names: + - "conti" + 260158: + name: "Contrail engine type" + alternative_names: + - "contet" + 260159: + name: "Contrail top" + alternative_names: + - "contt" + 260160: + name: "Contrail base" + alternative_names: + - "contb" + 260161: + name: "Maximum snow albedo" + alternative_names: + - "mxsalb" + 260162: + name: "Snow free albedo" + alternative_names: + - "snfalb" + 260163: + name: "Icing" + alternative_names: + - "_param_260163" + 260164: + name: "In-cloud turbulence" + alternative_names: + - "_param_260164" + 260165: + name: "Relative clear air turbulence (rcat)" + alternative_names: + - "rcat" + 260166: + name: "Supercooled large droplet probability (see note 4)" + alternative_names: + - "_param_260166" + 260167: + name: "Arbitrary text string" + alternative_names: + - "var190m0" + 260168: + name: "Seconds prior to initial reference time (defined in section 1)" + alternative_names: + - "tsec" + 260169: + name: + "Flash flood guidance (encoded as an accumulation over a floating subinterval + of time between the ref" + alternative_names: + - "ffldg" + 260170: + name: + "Flash flood runoff (encoded as an accumulation over a floating subinterval + of time)" + alternative_names: + - "ffldro" + 260171: + name: "Remotely sensed snow cover" + alternative_names: + - "rssc" + 260172: + name: "Elevation of snow covered terrain" + alternative_names: + - "esct" + 260173: + name: "Snow water equivalent percent of normal" + alternative_names: + - "swepon" + 260174: + name: "Baseflow-groundwater runoff" + alternative_names: + - "bgrun" + 260175: + name: "Storm surface runoff" + alternative_names: + - "ssrun" + 260176: + name: + "Conditional percent precipitation amount fractile for an overall period + (encoded as an accumulation)" + alternative_names: + - "cppop" + 260177: + name: + "Percent precipitation in a sub-period of an overall period (encoded as + per cent accumulation over th" + alternative_names: + - "pposp" + 260178: + name: "Probability of 0.01 inch of precipitation (pop)" + alternative_names: + - "pop" + 260179: + name: "Land cover (1=land, 0=sea)" + alternative_names: + - "land" + 260180: + name: "Vegetation" + alternative_names: + - "veg" + 260181: + name: "Water runoff" + alternative_names: + - "watr" + 260182: + name: "Evapotranspiration" + alternative_names: + - "evapt" + 260183: + name: "Model terrain height" + alternative_names: + - "mterh" + 260184: + name: "Land use" + alternative_names: + - "landu" + 260185: + name: "Volumetric soil moisture content" + alternative_names: + - "soilw" + 260186: + name: "Ground heat flux" + alternative_names: + - "gflux" + 260187: + name: "Moisture availability" + alternative_names: + - "mstav" + 260188: + name: "Exchange coefficient" + alternative_names: + - "sfexc" + 260189: + name: "Plant canopy surface water" + alternative_names: + - "cnwat" + 260190: + name: "Blackadar mixing length scale" + alternative_names: + - "bmixl" + 260191: + name: "Canopy conductance" + alternative_names: + - "ccond" + 260192: + name: "Minimal stomatal resistance" + alternative_names: + - "rsmin" + 260193: + name: "Solar parameter in canopy conductance" + alternative_names: + - "rcs" + 260194: + name: "Temperature parameter in canopy conductance" + alternative_names: + - "rct" + 260195: + name: "Soil moisture parameter in canopy conductance" + alternative_names: + - "rcsol" + 260196: + name: "Humidity parameter in canopy conductance" + alternative_names: + - "rcq" + 260197: + name: "Column-integrated soil water" + alternative_names: + - "cisoilw" + 260198: + name: "Heat flux" + alternative_names: + - "hflux" + 260199: + name: "Volumetric soil moisture" + alternative_names: + - "vsw" + 260200: + name: "Volumetric wilting point" + alternative_names: + - "vwiltm" + 260201: + name: "Upper layer soil temperature" + alternative_names: + - "uplst" + 260202: + name: "Upper layer soil moisture" + alternative_names: + - "uplsm" + 260203: + name: "Lower layer soil moisture" + alternative_names: + - "lowlsm" + 260204: + name: "Bottom layer soil temperature" + alternative_names: + - "botlst" + 260205: + name: "Liquid volumetric soil moisture (non-frozen)" + alternative_names: + - "soill" + 260206: + name: "Number of soil layers in root zone" + alternative_names: + - "rlyrs" + 260207: + name: "Transpiration stress-onset (soil moisture)" + alternative_names: + - "smref" + 260208: + name: "Direct evaporation cease (soil moisture)" + alternative_names: + - "smdry" + 260209: + name: "Soil porosity" + alternative_names: + - "poros" + 260210: + name: "Liquid volumetric soil moisture (non-frozen)" + alternative_names: + - "liqvsm" + 260211: + name: "Volumetric transpiration stress-onset (soil moisture)" + alternative_names: + - "voltso" + 260212: + name: "Transpiration stress-onset (soil moisture)" + alternative_names: + - "transo" + 260213: + name: "Volumetric direct evaporation cease (soil moisture)" + alternative_names: + - "voldec" + 260214: + name: "Direct evaporation cease (soil moisture)" + alternative_names: + - "direc" + 260215: + name: "Soil porosity" + alternative_names: + - "soilp" + 260216: + name: "Volumetric saturation of soil moisture" + alternative_names: + - "vsosm" + 260217: + name: "Saturation of soil moisture" + alternative_names: + - "satosm" + 260218: + name: "Estimated precipitation" + alternative_names: + - "estp" + 260219: + name: "Instantaneous rain rate" + alternative_names: + - "irrate" + 260220: + name: "Cloud top height" + alternative_names: + - "ctoph" + 260221: + name: "Cloud top height quality indicator" + alternative_names: + - "ctophqi" + 260222: + name: "Estimated u component of wind" + alternative_names: + - "estu" + 260223: + name: "Estimated v component of wind" + alternative_names: + - "estv" + 260224: + name: "Number of pixels used" + alternative_names: + - "npixu" + 260225: + name: "Solar zenith angle" + alternative_names: + - "solza" + 260226: + name: "Relative azimuth angle" + alternative_names: + - "raza" + 260227: + name: "Reflectance in 0.6 micron channel" + alternative_names: + - "rfl06" + 260228: + name: "Reflectance in 0.8 micron channel" + alternative_names: + - "rfl08" + 260229: + name: "Reflectance in 1.6 micron channel" + alternative_names: + - "rfl16" + 260230: + name: "Reflectance in 3.9 micron channel" + alternative_names: + - "rfl39" + 260231: + name: "Atmospheric divergence" + alternative_names: + - "atmdiv" + 260232: + name: "Direction of wind waves" + alternative_names: + - "wvdir" + 260233: + name: "Primary wave direction" + alternative_names: + - "dirpw" + 260234: + name: "Primary wave mean period" + alternative_names: + - "perpw" + 260235: + name: "Secondary wave mean period" + alternative_names: + - "persw" + 260236: + name: "Current direction" + alternative_names: + - "dirc" + 260237: + name: "Current speed" + alternative_names: + - "spc" + 260238: + name: "Geometric vertical velocity" + alternative_names: + - "wz" + 260239: + name: "Ice temperature" + alternative_names: + - "ist" + 260240: + name: "Deviation of sea level from mean" + alternative_names: + - "dslm" + 260241: + name: "Seconds prior to initial reference time (defined in section 1)" + alternative_names: + - "tsec" + 260242: + name: "2 metre relative humidity" + alternative_names: + - "2r" + 260243: + name: "Temperature tendency by all radiation" + alternative_names: + - "ttrad" + 260244: + name: "Relative error variance" + alternative_names: + - "rev" + 260245: + name: "Large scale condensate heating rate" + alternative_names: + - "lrghr" + 260246: + name: "Deep convective heating rate" + alternative_names: + - "cnvhr" + 260247: + name: "Total downward heat flux at surface" + alternative_names: + - "thflx" + 260248: + name: "Temperature tendency by all physics" + alternative_names: + - "ttdia" + 260249: + name: "Temperature tendency by non-radiation physics" + alternative_names: + - "ttphy" + 260250: + name: "Standard dev. of ir temp. over 1x1 deg. area" + alternative_names: + - "tsd1d" + 260251: + name: "Shallow convective heating rate" + alternative_names: + - "shahr" + 260252: + name: "Vertical diffusion heating rate" + alternative_names: + - "vdfhr" + 260253: + name: "Potential temperature at top of viscous sublayer" + alternative_names: + - "thz0" + 260254: + name: "Tropical cyclone heat potential" + alternative_names: + - "tchp" + 260255: + name: "Apparent temperature" + alternative_names: + - "aptmp" + 260256: + name: "Haines index" + alternative_names: + - "hindex" + 260257: + name: "Cloud cover" + alternative_names: + - "ccl" + 260258: + name: "Evaporation rate" + alternative_names: + - "evarate" + 260259: + name: "Evaporation" + alternative_names: + - "eva" + 260260: + name: "10 metre wind direction" + alternative_names: + - "10wdir" + 260261: + name: "Minimum relative humidity" + alternative_names: + - "minrh" + 260262: + name: "Direct short wave radiation flux" + alternative_names: + - "dirswrf" + 260263: + name: "Diffuse short wave radiation flux" + alternative_names: + - "difswrf" + 260264: + name: "Time-integrated surface direct short wave radiation flux" + alternative_names: + - "tidirswrf" + 260265: + name: "Evaporation in the last 6 hours" + alternative_names: + - "eva06" + 260266: + name: "Evaporation in the last 24 hours" + alternative_names: + - "eva24" + 260267: + name: "Total precipitation in the last 6 hours" + alternative_names: + - "tp06" + 260268: + name: "Total precipitation in the last 24 hours" + alternative_names: + - "tp24" + 260269: + name: "Total icing potential diagnostic" + alternative_names: + - "tipd" + 260270: + name: "Number concentration for ice particles" + alternative_names: + - "ncip" + 260271: + name: "Snow temperature" + alternative_names: + - "snot" + 260272: + name: "Total column-integrated supercooled liquid water" + alternative_names: + - "tclsw" + 260273: + name: "Total column-integrated melting ice" + alternative_names: + - "tcolm" + 260274: + name: "Evaporation - precipitation" + alternative_names: + - "emnp" + 260275: + name: "Sublimation (evaporation from snow)" + alternative_names: + - "sbsno" + 260276: + name: "Deep convective moistening rate" + alternative_names: + - "cnvmr" + 260277: + name: "Shallow convective moistening rate" + alternative_names: + - "shamr" + 260278: + name: "Vertical diffusion moistening rate" + alternative_names: + - "vdfmr" + 260279: + name: "Condensation pressure of parcali lifted from indicate surface" + alternative_names: + - "condp" + 260280: + name: "Large scale moistening rate" + alternative_names: + - "lrgmr" + 260281: + name: "Specific humidity at top of viscous sublayer" + alternative_names: + - "qz0" + 260282: + name: "Maximum specific humidity at 2m" + alternative_names: + - "qmax" + 260283: + name: "Minimum specific humidity at 2m" + alternative_names: + - "qmin" + 260284: + name: "Liquid precipitation (rainfall)" + alternative_names: + - "arain" + 260285: + name: "Snow temperature, depth-avg" + alternative_names: + - "snowt" + 260286: + name: "Total precipitation (nearest grid point)" + alternative_names: + - "apcpn" + 260287: + name: "Convective precipitation (nearest grid point)" + alternative_names: + - "acpcpn" + 260288: + name: "Freezing rain" + alternative_names: + - "frzr" + 260289: + name: "Fraction of snow cover" + alternative_names: + - "fscov" + 260290: + name: "Clear air turbulence (cat)" + alternative_names: + - "cat" + 260291: + name: "Mountain wave turbulence (eddy dissipation rate)" + alternative_names: + - "mwt" + 260292: + name: "Specific rain water content (convective)" + alternative_names: + - "crwc_conv" + 260293: + name: "Specific snow water content (convective)" + alternative_names: + - "cswc_conv" + 260294: + name: "Glacier mask" + alternative_names: + - "glm" + 260295: + name: "Latitude of u wind component of velocity" + alternative_names: + - "lauv" + 260296: + name: "Longitude of u wind component of velocity" + alternative_names: + - "louv" + 260297: + name: "Latitude of v wind component of velocity" + alternative_names: + - "lavv" + 260298: + name: "Longitude of v wind component of velocity" + alternative_names: + - "lovv" + 260299: + name: "Latitude of pressure point" + alternative_names: + - "lapp" + 260300: + name: "Longitude of pressure point" + alternative_names: + - "lopp" + 260301: + name: "Vertical eddy diffusivity heat exchange" + alternative_names: + - "vedh" + 260302: + name: "Covariance between meridional and zonal components of the wind." + alternative_names: + - "covmz" + 260303: + name: "Covariance between temperature and zonal components of the wind." + alternative_names: + - "covtz" + 260304: + name: "Covariance between temperature and meridional components of the wind." + alternative_names: + - "covtm" + 260305: + name: "Vertical diffusion zonal acceleration" + alternative_names: + - "vdfua" + 260306: + name: "Vertical diffusion meridional acceleration" + alternative_names: + - "vdfva" + 260307: + name: "Gravity wave drag zonal acceleration" + alternative_names: + - "gwdu" + 260308: + name: "Gravity wave drag meridional acceleration" + alternative_names: + - "gwdv" + 260309: + name: "Convective zonal momentum mixing acceleration" + alternative_names: + - "cnvu" + 260310: + name: "Convective meridional momentum mixing acceleration" + alternative_names: + - "cnvv" + 260311: + name: "Tendency of vertical velocity" + alternative_names: + - "wtend" + 260312: + name: "Omega (dp/dt) divide by density" + alternative_names: + - "omgalf" + 260313: + name: "Convective gravity wave drag zonal acceleration" + alternative_names: + - "cngwdu" + 260314: + name: "Convective gravity wave drag meridional acceleration" + alternative_names: + - "cngwdv" + 260315: + name: "Velocity point model surface" + alternative_names: + - "lmv" + 260316: + name: "Potential vorticity (mass-weighted)" + alternative_names: + - "pvmww" + 260317: + name: "Mslp (eta model reduction)" + alternative_names: + - "mslet" + 260318: + name: "Precipitation type (most severe) in the last 1 hour" + alternative_names: + - "ptype_sev1h" + 260319: + name: "Precipitation type (most severe) in the last 3 hours" + alternative_names: + - "ptype_sev3h" + 260320: + name: "Precipitation type (most frequent) in the last 1 hour" + alternative_names: + - "ptype_freq1h" + 260321: + name: "Precipitation type (most frequent) in the last 3 hours" + alternative_names: + - "ptype_freq3h" + 260323: + name: "Mslp (maps system reduction)" + alternative_names: + - "mslma" + 260324: + name: "3-hr pressure tendency (std. atmos. reduction)" + alternative_names: + - "tslsa" + 260325: + name: "Pressure of level from which parcel was lifted" + alternative_names: + - "plpl" + 260326: + name: "X-gradient of log pressure" + alternative_names: + - "lpsx" + 260327: + name: "Y-gradient of log pressure" + alternative_names: + - "lpsy" + 260328: + name: "X-gradient of height" + alternative_names: + - "hgtx" + 260329: + name: "Y-gradient of height" + alternative_names: + - "hgty" + 260330: + name: "Layer thickness" + alternative_names: + - "layth" + 260331: + name: "Natural log of surface pressure" + alternative_names: + - "nlgsp" + 260332: + name: "Convective updraft mass flux" + alternative_names: + - "cnvumf" + 260333: + name: "Convective downdraft mass flux" + alternative_names: + - "cnvdmf" + 260334: + name: "Convective detrainment mass flux" + alternative_names: + - "cnvdemf" + 260335: + name: "Mass point model surface" + alternative_names: + - "lmh" + 260336: + name: "Geopotential height (nearest grid point)" + alternative_names: + - "hgtn" + 260337: + name: "Pressure (nearest grid point)" + alternative_names: + - "presn" + 260338: + name: "Precipitation type (most severe) in the last 6 hours" + alternative_names: + - "ptype_sev6h" + 260339: + name: "Precipitation type (most frequent) in the last 6 hours" + alternative_names: + - "ptype_freq6h" + 260340: + name: "Uv-b downward solar flux" + alternative_names: + - "duvb" + 260341: + name: "Clear sky uv-b downward solar flux" + alternative_names: + - "cduvb" + 260342: + name: "Clear sky downward solar flux" + alternative_names: + - "csdsf" + 260343: + name: "Solar radiative heating rate" + alternative_names: + - "swhr" + 260344: + name: "Clear sky upward solar flux" + alternative_names: + - "csusf" + 260345: + name: "Cloud forcing net solar flux" + alternative_names: + - "cfnsf" + 260346: + name: "Visible beam downward solar flux" + alternative_names: + - "vbdsf" + 260347: + name: "Visible diffuse downward solar flux" + alternative_names: + - "vddsf" + 260348: + name: "Near ir beam downward solar flux" + alternative_names: + - "nbdsf" + 260349: + name: "Near ir diffuse downward solar flux" + alternative_names: + - "nddsf" + 260350: + name: "Downward total radiation flux" + alternative_names: + - "dtrf" + 260351: + name: "Upward total radiation flux" + alternative_names: + - "utrf" + 260354: + name: "Long-wave radiative heating rate" + alternative_names: + - "lwhr" + 260355: + name: "Clear sky upward long wave flux" + alternative_names: + - "csulf" + 260356: + name: "Clear sky downward long wave flux" + alternative_names: + - "csdlf" + 260357: + name: "Cloud forcing net long wave flux" + alternative_names: + - "cfnlf" + 260360: + name: "Soil temperature" + alternative_names: + - "sot" + 260361: + name: "Downward short-wave radiation flux, clear sky" + alternative_names: + - "dswrf_cs" + 260362: + name: "Upward short-wave radiation flux, clear sky" + alternative_names: + - "uswrf_cs" + 260363: + name: "Downward long-wave radiation flux, clear sky" + alternative_names: + - "dlwrf_cs" + 260364: + name: "Soil heat flux" + alternative_names: + - "sohf" + 260365: + name: "Percolation rate" + alternative_names: + - "percr" + 260366: + name: "Convective cloud mass flux" + alternative_names: + - "mflux" + 260367: + name: "Soil depth" + alternative_names: + - "sod" + 260368: + name: "Soil moisture" + alternative_names: + - "som" + 260369: + name: "Richardson number" + alternative_names: + - "ri" + 260370: + name: "Convective weather detection index" + alternative_names: + - "cwdi" + 260372: + name: "Updraft helicity" + alternative_names: + - "uphl" + 260373: + name: "Leaf area index" + alternative_names: + - "lai" + 260374: + name: "Particulate matter (coarse)" + alternative_names: + - "pmtc" + 260375: + name: "Particulate matter (fine)" + alternative_names: + - "pmtf" + 260376: + name: "Particulate matter (fine)" + alternative_names: + - "lpmtf" + 260377: + name: "Integrated column particulate matter (fine)" + alternative_names: + - "lipmf" + 260379: + name: "Ozone concentration (ppb)" + alternative_names: + - "ozcon" + 260380: + name: "Categorical ozone concentration" + alternative_names: + - "ozcat" + 260381: + name: "Ozone vertical diffusion" + alternative_names: + - "vdfoz" + 260382: + name: "Ozone production" + alternative_names: + - "poz" + 260383: + name: "Ozone tendency" + alternative_names: + - "toz" + 260384: + name: "Ozone production from temperature term" + alternative_names: + - "pozt" + 260385: + name: "Ozone production from col ozone term" + alternative_names: + - "pozo" + 260386: + name: "Derived radar reflectivity backscatter from rain" + alternative_names: + - "refzr" + 260387: + name: "Derived radar reflectivity backscatter from ice" + alternative_names: + - "refzi" + 260388: + name: "Derived radar reflectivity backscatter from parameterized convection" + alternative_names: + - "refzc" + 260389: + name: "Derived radar reflectivity" + alternative_names: + - "refd" + 260390: + name: "Maximum/composite radar reflectivity" + alternative_names: + - "refc" + 260391: + name: "Lightning" + alternative_names: + - "ltng" + 260394: + name: "Slight risk convective outlook" + alternative_names: + - "srcono" + 260395: + name: "Moderate risk convective outlook" + alternative_names: + - "mrcono" + 260396: + name: "High risk convective outlook" + alternative_names: + - "hrcono" + 260397: + name: "Tornado probability" + alternative_names: + - "torprob" + 260398: + name: "Hail probability" + alternative_names: + - "hailprob" + 260399: + name: "Wind probability" + alternative_names: + - "windprob" + 260400: + name: "Significant tornado probability" + alternative_names: + - "storprob" + 260401: + name: "Significant hail probability" + alternative_names: + - "shailpro" + 260402: + name: "Significant wind probability" + alternative_names: + - "swindpro" + 260403: + name: "Categorical thunderstorm (1-yes, 0-no)" + alternative_names: + - "tstmc" + 260404: + name: "Number of mixed layers next to surface" + alternative_names: + - "mixly" + 260405: + name: "Flight category" + alternative_names: + - "flght" + 260406: + name: "Confidence - ceiling" + alternative_names: + - "cicel" + 260407: + name: "Confidence - visibility" + alternative_names: + - "civis" + 260408: + name: "Confidence - flight category" + alternative_names: + - "ciflt" + 260409: + name: "Low-level aviation interest" + alternative_names: + - "lavni" + 260410: + name: "High-level aviation interest" + alternative_names: + - "havni" + 260411: + name: "Visible, black sky albedo" + alternative_names: + - "sbsalb" + 260412: + name: "Visible, white sky albedo" + alternative_names: + - "swsalb" + 260413: + name: "Near ir, black sky albedo" + alternative_names: + - "nbsalb" + 260414: + name: "Near ir, white sky albedo" + alternative_names: + - "nwsalb" + 260415: + name: "Total probability of severe thunderstorms (days 2,3)" + alternative_names: + - "prsvr" + 260416: + name: "Total probability of extreme severe thunderstorms (days 2,3)" + alternative_names: + - "prsigsvr" + 260417: + name: "Supercooled large droplet (sld) potential" + alternative_names: + - "sipd" + 260418: + name: "Radiative emissivity" + alternative_names: + - "epsr" + 260419: + name: "Turbulence potential forecast index" + alternative_names: + - "tpfi" + 260420: + name: "Volcanic ash forecast transport and dispersion" + alternative_names: + - "vaftd" + 260421: + name: "Latitude (-90 to +90)" + alternative_names: + - "nlat" + 260422: + name: "East longitude (0 - 360)" + alternative_names: + - "elon" + 260423: + name: "Accumulated surface downward short-wave radiation flux, clear sky" + alternative_names: + - "adswrf_cs" + 260424: + name: "Model layer number (from bottom up)" + alternative_names: + - "mlyno" + 260425: + name: "Latitude (nearest neighbor) (-90 to +90)" + alternative_names: + - "nlatn" + 260426: + name: "East longitude (nearest neighbor) (0 - 360)" + alternative_names: + - "elonn" + 260427: + name: "Accumulated surface upward short-wave radiation flux, clear sky" + alternative_names: + - "auswrf_cs" + 260428: + name: "Accumulated surface downward long-wave radiation flux, clear sky" + alternative_names: + - "adlwrf_cs" + 260429: + name: "Probability of freezing precipitation" + alternative_names: + - "cpozp" + 260430: + name: "Percolation" + alternative_names: + - "perc" + 260431: + name: "Probability of precipitation exceeding flash flood guidance values" + alternative_names: + - "ppffg" + 260432: + name: "Probability of wetting rain, exceeding in 0.10 in a given time period" + alternative_names: + - "cwr" + 260433: + name: "Evapotranspiration rate" + alternative_names: + - "et" + 260434: + name: "Time-integrated evapotranspiration rate in the last 24h" + alternative_names: + - "acc_et24" + 260435: + name: "Time-mean evapotranspiration rate in the last 24h" + alternative_names: + - "avg_et24" + 260436: + name: "Potential evapotranspiration rate" + alternative_names: + - "pet" + 260437: + name: "Time-integrated potential evapotranspiration rate in the last 24h" + alternative_names: + - "acc_pet24" + 260438: + name: "Time-mean potential evapotranspiration rate in the last 24h" + alternative_names: + - "avg_pet24" + 260439: + name: "Vegetation type" + alternative_names: + - "vgtyp" + 260440: + name: "Time-mean volumetric soil moisture" + alternative_names: + - "avg_swv24" + 260441: + name: "Time-mean total precipitation rate" + alternative_names: + - "avg_tp24" + 260442: + name: "Wilting point" + alternative_names: + - "wilt" + 260443: + name: "Water runoff and drainage rate" + alternative_names: + - "rod" + 260444: + name: "Time-integrated water runoff and drainage rate in the last 24h" + alternative_names: + - "acc_rod24" + 260445: + name: "Time-mean water runoff and drainage rate in the last 24h" + alternative_names: + - "avg_rod24" + 260447: + name: "Rate of water dropping from canopy to ground" + alternative_names: + - "rdrip" + 260448: + name: "Ice-free water surface" + alternative_names: + - "icwat" + 260449: + name: "Surface exchange coefficients for t and q divided by delta z" + alternative_names: + - "akhs" + 260450: + name: "Surface exchange coefficients for u and v divided by delta z" + alternative_names: + - "akms" + 260451: + name: "Vegetation canopy temperature" + alternative_names: + - "vegt" + 260452: + name: "Surface water storage" + alternative_names: + - "sstor" + 260453: + name: "Liquid soil moisture content (non-frozen)" + alternative_names: + - "lsoil" + 260454: + name: "Open water evaporation (standing water)" + alternative_names: + - "ewatr" + 260455: + name: "Groundwater recharge" + alternative_names: + - "gwrec" + 260456: + name: "Flood plain recharge" + alternative_names: + - "qrec" + 260457: + name: "Roughness length for heat" + alternative_names: + - "sfcrh" + 260458: + name: "Normalized difference vegetation index" + alternative_names: + - "ndvi" + 260459: + name: "Land-sea coverage (nearest neighbor) [land=1,sea=0]" + alternative_names: + - "landn" + 260460: + name: "Asymptotic mixing length scale" + alternative_names: + - "amixl" + 260461: + name: "Water vapor added by precip assimilation" + alternative_names: + - "wvinc" + 260462: + name: "Water condensate added by precip assimilation" + alternative_names: + - "wcinc" + 260463: + name: "Water vapor flux convergence (vertical int)" + alternative_names: + - "wvconv" + 260464: + name: "Water condensate flux convergence (vertical int)" + alternative_names: + - "wcconv" + 260465: + name: "Water vapor zonal flux (vertical int)" + alternative_names: + - "wvuflx" + 260466: + name: "Water vapor meridional flux (vertical int)" + alternative_names: + - "wvvflx" + 260467: + name: "Water condensate zonal flux (vertical int)" + alternative_names: + - "wcuflx" + 260468: + name: "Water condensate meridional flux (vertical int)" + alternative_names: + - "wcvflx" + 260469: + name: "Aerodynamic conductance" + alternative_names: + - "acond" + 260470: + name: "Canopy water evaporation" + alternative_names: + - "evcw" + 260471: + name: "Transpiration" + alternative_names: + - "trans" + 260472: + name: "Time-mean snow depth water equivalent" + alternative_names: + - "avg_sd24" + 260473: + name: "Time-mean skin temperature" + alternative_names: + - "avg_skt24" + 260474: + name: "Surface slope type" + alternative_names: + - "sltyp" + 260475: + name: "Snow melt rate" + alternative_names: + - "smr" + 260476: + name: "Time-integrated snow melt rate in the last 24h" + alternative_names: + - "acc_smr24" + 260477: + name: "Time-mean snow melt rate in the last 24h" + alternative_names: + - "avg_smr24" + 260478: + name: "Direct evaporation from bare soil" + alternative_names: + - "evbs" + 260479: + name: "Land surface precipitation accumulation" + alternative_names: + - "lspa" + 260480: + name: "Bare soil surface skin temperature" + alternative_names: + - "baret" + 260481: + name: "Average surface skin temperature" + alternative_names: + - "avsft" + 260482: + name: "Effective radiative skin temperature" + alternative_names: + - "radt" + 260483: + name: "Field capacity" + alternative_names: + - "fldcp" + 260484: + name: "Scatterometer estimated u wind component" + alternative_names: + - "usct" + 260485: + name: "Scatterometer estimated v wind component" + alternative_names: + - "vsct" + 260486: + name: "Wave steepness" + alternative_names: + - "wstp" + 260487: + name: "Ocean mixed layer u velocity" + alternative_names: + - "omlu" + 260488: + name: "Ocean mixed layer v velocity" + alternative_names: + - "omlv" + 260489: + name: "Barotropic u velocity" + alternative_names: + - "ubaro" + 260490: + name: "Barotropic v velocity" + alternative_names: + - "vbaro" + 260491: + name: "Storm surge" + alternative_names: + - "surge" + 260492: + name: "Extra tropical storm surge" + alternative_names: + - "etsrg" + 260493: + name: "Ocean surface elevation relative to geoid" + alternative_names: + - "elevhtml" + 260494: + name: "Sea surface height relative to geoid" + alternative_names: + - "sshg" + 260495: + name: "Ocean mixed layer potential density (reference 2000m), + mode: Option, + _consume: Option, + ) -> PyResult { + // Collect selection data with owned Strings and Coordinates + let mut selection_data: Vec<(String, Coordinates)> = Vec::new(); + + println!("WHAT IS THE REQ IN PYTHON?"); + println!("{:?}", request); + + for (k, v) in request.iter() { + let key: String = + k.extract().map_err(|_| PyTypeError::new_err("select keys must be strings"))?; + + let coords = if v.is_instance_of::() { + println!("WE ACTUALLY DEALT WITH A LIST HERE??"); + let lst = v.cast_into::()?; + let mut parts: Vec = Vec::with_capacity(lst.len()); + for item in lst.iter() { + // Convert any value to string representation (handles int, float, str) + let py_str = item.str()?; + let s: String = py_str.extract()?; + parts.push(s); + } + println!("WHAT ARE THE PARTS HERE??"); + println!("{:?}", parts); + Coordinates::from_string(&parts.join("/")) + } else { + println!("WE DID NOT DEAL WITH A LIST HERE??"); + // Convert any value to string representation (handles int, float, str) + let py_str = v.str()?; + let s: String = py_str.extract()?; + println!("WHAT IS THE STRING VALUE HERE??"); + println!("{:?}", s); + Coordinates::from_string(&s) + }; + + selection_data.push((key, coords)); + } + + let select_mode = match mode.as_deref() { + Some(m) if m.eq_ignore_ascii_case("prune") => SelectMode::Prune, + Some(m) if m.eq_ignore_ascii_case("follow_selection") => SelectMode::FollowSelection, + _ => SelectMode::Default, + }; + + // Convert to references for the select call + let pairs: Vec<(&str, Coordinates)> = + selection_data.iter().map(|(k, c)| (k.as_str(), c.clone())).collect(); + + match self.inner.select(&pairs, select_mode) { + Ok(q) => Ok(PyQube { inner: q }), + Err(e) => Err(PyTypeError::new_err(e)), + } + } + + pub fn all_unique_dim_coords(&mut self, py: Python<'_>) -> PyResult> { + let dim_coords = self.inner.all_unique_dim_coords(); + let py_dict = PyDict::new(py); + + for (dimension, coordinates) in dim_coords { + let coord_str = coordinates.to_string(); + // Split on slash if present, otherwise treat as single value + let values: Vec<&str> = if coord_str.is_empty() { + vec![] + } else if coord_str.contains('/') { + coord_str.split('/').collect() + } else { + vec![&coord_str] + }; + + let py_list = PyList::empty(py); + for value in values { + py_list.append(value)?; + } + + py_dict.set_item(dimension, py_list)?; + } + + Ok(py_dict.into_any().unbind()) + } + + pub fn compress(&mut self) -> PyResult<()> { + self.inner.compress(); + Ok(()) + } + pub fn __repr__(&self) -> PyResult { Ok(format!("PyQube(root_id={:?})", self.inner.root())) } diff --git a/py_qubed/tests/__init__.py b/py_qubed/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/py_qubed/tests/test_qubed_api.py b/py_qubed/tests/test_qubed_api.py index ac765b5..c096225 100644 --- a/py_qubed/tests/test_qubed_api.py +++ b/py_qubed/tests/test_qubed_api.py @@ -81,13 +81,17 @@ def test_to_from_arena_json_roundtrip() -> None: """) arena_json = qube.to_arena_json() - # should be valid JSON representing an array + # should be valid JSON representing arena structure with 'qube' key import json parsed = json.loads(arena_json) - assert isinstance(parsed, list) - # expect at least one node entry with dim and coords - assert any(isinstance(item, dict) and "dim" in item and "coords" in item for item in parsed) + assert isinstance(parsed, dict) + assert "qube" in parsed + assert "version" in parsed + # expect qube to be a list with node entries containing dim and coords + qube_list = parsed["qube"] + assert isinstance(qube_list, list) + assert any(isinstance(item, dict) and "dim" in item and "coords" in item for item in qube_list) # Reconstruct and verify ascii equality reconstructed = PyQube.from_arena_json(arena_json) diff --git a/py_qubed/tests/test_select.py b/py_qubed/tests/test_select.py new file mode 100644 index 0000000..721b597 --- /dev/null +++ b/py_qubed/tests/test_select.py @@ -0,0 +1,356 @@ +import qubed + + +def test_select_1(): + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + selected = q.select({"class": [1]}, None, None) + + expected = r"""root +└── class=1 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + + +def test_select_2(): + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + selected = q.select({"class": [1], "param": [1]}, None, None) + + expected = r"""root +└── class=1 + ├── expver=0001 + │ └── param=1 + └── expver=0002 + └── param=1""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + +def test_select_3(): + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + selected = q.select({"expver": ["0001"]}, None, None) + + print(selected.to_ascii()) + + expected = r"""root +├── class=1 +│ └── expver=0001 +│ ├── param=1 +│ └── param=2 +└── class=2 + └── expver=0001 + ├── param=1 + ├── param=2 + └── param=3""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + + +def test_all_unique_dim_coords(): + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + dim_coords = q.all_unique_dim_coords() + + # Should have 3 dimensions (class, expver, param) + assert len(dim_coords) == 3 + + # Check that expected dimensions are present + assert "class" in dim_coords + assert "expver" in dim_coords + assert "param" in dim_coords + + # Check coordinate values are lists + assert isinstance(dim_coords["class"], list) + assert isinstance(dim_coords["expver"], list) + assert isinstance(dim_coords["param"], list) + + # Check that coordinates contain expected values + assert "1" in dim_coords["class"] + assert "2" in dim_coords["class"] + assert "0001" in dim_coords["expver"] + assert "0002" in dim_coords["expver"] + assert "1" in dim_coords["param"] + assert "2" in dim_coords["param"] + assert "3" in dim_coords["param"] + + +def test_compress(): + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Get the ASCII representation before compression + ascii_before = q.to_ascii() + + # Compress the qube + q.compress() + + # The qube should still be valid and have the same structure + ascii_after = q.to_ascii() + + print(ascii_after) + + # Verify the structure is preserved or optimized (may change due to deduplication) + assert len(ascii_before) > 0 + assert len(ascii_after) > 0 + + # Verify datacube count is preserved + assert len(q) > 0 + +def test_compress_2(): + input_qube = r"""root +└── class=2 + └── expver=0002 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Get the ASCII representation before compression + ascii_before = q.to_ascii() + + # Compress the qube + q.compress() + + # The qube should still be valid and have the same structure + ascii_after = q.to_ascii() + + print(ascii_after) + + # Verify the structure is preserved or optimized (may change due to deduplication) + assert len(ascii_before) > 0 + assert len(ascii_after) > 0 + + # Verify datacube count is preserved + assert len(q) > 0 + + +def test_follow_selection_single(): + """Test FollowSelection mode with a single selected dimension""" + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Select class=1 with follow_selection mode + # Should get class=1 and all its expver children, but no param children + selected = q.select({"class": [1]}, "follow_selection", None) + + expected = r"""root +└── class=1""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + + +def test_follow_selection_multiple(): + """Test FollowSelection mode with multiple selected dimensions""" + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Select class=1 and expver=0001 with follow_selection mode + # Should get class=1 and expver=0001, but no param children + selected = q.select({"class": [1], "expver": ["0001"]}, "follow_selection", None) + + expected = r"""root +└── class=1 + └── expver=0001""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + +def test_follow_selection_multiple_wrong_order(): + """Test FollowSelection mode with multiple selected dimensions""" + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Select class=1 and expver=0001 with follow_selection mode + # Should get class=1 and expver=0001, but no param children + selected = q.select({"class": [1], "param": [1]}, "follow_selection", None) + + expected = r"""root +└── class=1 + ├── expver=0001 + │ └── param=1 + └── expver=0002 + └── param=1""" + + assert selected.to_ascii() == qubed.PyQube.from_ascii(expected).to_ascii() + + +def test_follow_selection_vs_default(): + """Compare FollowSelection vs Default mode""" + input_qube = r"""root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2""" + + q = qubed.PyQube.from_ascii(input_qube) + + # Default mode: shows full subtree + default_result = q.select({"class": [1]}, None, None) + + default_expected = r"""root +└── class=1 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2""" + + assert default_result.to_ascii() == qubed.PyQube.from_ascii(default_expected).to_ascii() + + # FollowSelection mode: stops at selected dimension + follow_result = q.select({"class": [1]}, "follow_selection", None) + + follow_expected = r"""root +└── class=1""" + + assert follow_result.to_ascii() == qubed.PyQube.from_ascii(follow_expected).to_ascii() + diff --git a/qubed/Cargo.toml b/qubed/Cargo.toml index 5186e2a..41f2d80 100644 --- a/qubed/Cargo.toml +++ b/qubed/Cargo.toml @@ -13,6 +13,7 @@ slotmap = "1.0.7" smallbitvec = "2.6.0" tiny-str = "0.10.0" tiny-vec = "0.10.0" +chrono = "0.4" rayon = "1.7" [lib] diff --git a/qubed/src/coordinates/datetime.rs b/qubed/src/coordinates/datetime.rs new file mode 100644 index 0000000..c3d11ad --- /dev/null +++ b/qubed/src/coordinates/datetime.rs @@ -0,0 +1,266 @@ +use std::hash::Hash; + +use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime, Utc}; +use tiny_vec::TinyVec; + +use crate::coordinates::{Coordinates, IntersectionResult}; + +#[derive(Debug, Clone, PartialEq)] +pub enum DateTimeCoordinates { + List(TinyVec), +} + +impl DateTimeCoordinates { + pub(crate) fn extend(&mut self, new_coords: &DateTimeCoordinates) { + match (self, new_coords) { + (DateTimeCoordinates::List(list), DateTimeCoordinates::List(new_list)) => { + for v in new_list.iter() { + list.push(*v); + } + } + } + } + + pub(crate) fn append(&mut self, new_coord: NaiveDateTime) { + match self { + DateTimeCoordinates::List(list) => list.push(new_coord), + } + } + + pub(crate) fn len(&self) -> usize { + match self { + DateTimeCoordinates::List(list) => list.len(), + } + } + + pub(crate) fn to_string(&self) -> String { + match self { + DateTimeCoordinates::List(list) => list + .iter() + .map(|dt| dt.format("%Y-%m-%dT%H:%M:%S").to_string()) + .collect::>() + .join("/"), + } + } + + pub(crate) fn hash(&self, hasher: &mut std::collections::hash_map::DefaultHasher) { + "datetime".hash(hasher); + match self { + DateTimeCoordinates::List(list) => { + for dt in list.iter() { + // use seconds and nanoseconds for stable hashing + dt.timestamp().hash(hasher); + dt.timestamp_subsec_nanos().hash(hasher); + } + } + } + } + + pub(crate) fn intersect( + &self, + other: &DateTimeCoordinates, + ) -> IntersectionResult { + match (self, other) { + (DateTimeCoordinates::List(list_a), DateTimeCoordinates::List(list_b)) => { + use std::collections::HashSet; + + let mut set_b: HashSet = HashSet::new(); + for v in list_b.iter() { + set_b.insert(*v); + } + + let mut intersection = TinyVec::new(); + let mut only_a = TinyVec::new(); + + let mut added: HashSet = HashSet::new(); + for v in list_a.iter() { + if set_b.contains(v) { + if !added.contains(v) { + intersection.push(*v); + added.insert(*v); + } + } else { + only_a.push(*v); + } + } + + let mut only_b = TinyVec::new(); + for v in list_b.iter() { + if !list_a.contains(v) { + only_b.push(*v); + } + } + + IntersectionResult { + intersection: DateTimeCoordinates::List(intersection), + only_a: DateTimeCoordinates::List(only_a), + only_b: DateTimeCoordinates::List(only_b), + } + } + } + } + + /// Try to parse a string into `NaiveDateTime` using common formats. + pub(crate) fn parse_from_str(s: &str) -> Option { + // Try RFC3339 / ISO 8601 + if let Ok(dt) = DateTime::parse_from_rfc3339(s) { + return Some(dt.with_timezone(&Utc).naive_utc()); + } + + // Try YYYY-MM-DD HH:MM:SS + if let Ok(ndt) = NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S") { + return Some(ndt); + } + + // Try YYYY-MM-DD + if let Ok(d) = NaiveDate::parse_from_str(s, "%Y-%m-%d") { + return Some(NaiveDateTime::new(d, NaiveTime::from_hms(0, 0, 0))); + } + + // Try YYYYMMDD + if s.len() == 8 { + if let Ok(d) = NaiveDate::parse_from_str(s, "%Y%m%d") { + return Some(NaiveDateTime::new(d, NaiveTime::from_hms(0, 0, 0))); + } + } + + None + } +} + +impl Default for DateTimeCoordinates { + fn default() -> Self { + DateTimeCoordinates::List(TinyVec::new()) + } +} + +impl From for Coordinates { + fn from(value: NaiveDateTime) -> Self { + let mut vec = TinyVec::new(); + vec.push(value); + Coordinates::DateTimes(DateTimeCoordinates::List(vec)) + } +} + +impl From for Coordinates { + fn from(value: DateTimeCoordinates) -> Self { + Coordinates::DateTimes(value) + } +} + +impl From<&str> for DateTimeCoordinates { + fn from(value: &str) -> Self { + if let Some(ndt) = DateTimeCoordinates::parse_from_str(value) { + let mut vec = TinyVec::new(); + vec.push(ndt); + DateTimeCoordinates::List(vec) + } else { + let mut vec = TinyVec::new(); + vec.push(NaiveDateTime::from_timestamp(0, 0)); + DateTimeCoordinates::List(vec) + } + } +} + +impl From<&[NaiveDateTime]> for Coordinates { + fn from(value: &[NaiveDateTime]) -> Self { + let mut vec = TinyVec::new(); + for &v in value { + vec.push(v); + } + Coordinates::DateTimes(DateTimeCoordinates::List(vec)) + } +} + +impl From<&[NaiveDateTime; N]> for Coordinates { + fn from(value: &[NaiveDateTime; N]) -> Self { + let mut vec = TinyVec::new(); + for &v in value.iter() { + vec.push(v); + } + Coordinates::DateTimes(DateTimeCoordinates::List(vec)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_datetime_append_and_len() { + let mut coords = DateTimeCoordinates::default(); + let d1 = NaiveDate::from_ymd(2020, 1, 1).and_hms(0, 0, 0); + let d2 = NaiveDate::from_ymd(2020, 1, 2).and_hms(12, 30, 0); + coords.append(d1); + coords.append(d2); + + match coords { + DateTimeCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], d1); + assert_eq!(list[1], d2); + } + } + } + + #[test] + fn test_datetime_extend() { + let mut a = DateTimeCoordinates::default(); + let d1 = NaiveDate::from_ymd(2020, 1, 1).and_hms(0, 0, 0); + let d2 = NaiveDate::from_ymd(2020, 1, 2).and_hms(0, 0, 0); + a.append(d1); + + let mut b = DateTimeCoordinates::default(); + b.append(d2); + + a.extend(&b); + + match a { + DateTimeCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], d1); + assert_eq!(list[1], d2); + } + } + } + + #[test] + fn test_datetime_to_string_and_parse() { + let d = NaiveDate::from_ymd(2021, 5, 4).and_hms(6, 7, 8); + let mut c = DateTimeCoordinates::default(); + c.append(d); + let s = c.to_string(); + assert!(s.contains("2021-05-04T06:07:08")); + + // parse from iso string + let parsed = DateTimeCoordinates::parse_from_str("2021-05-04T06:07:08Z"); + assert!(parsed.is_some()); + assert_eq!(parsed.unwrap(), d); + } + + #[test] + fn test_datetime_intersect() { + let mut a = DateTimeCoordinates::default(); + let d1 = NaiveDate::from_ymd(2020, 1, 1).and_hms(0, 0, 0); + let d2 = NaiveDate::from_ymd(2020, 1, 2).and_hms(0, 0, 0); + let d3 = NaiveDate::from_ymd(2020, 1, 3).and_hms(0, 0, 0); + a.append(d1); + a.append(d2); + a.append(d3); + + let mut b = DateTimeCoordinates::default(); + b.append(d2); + b.append(d3); + b.append(NaiveDate::from_ymd(2020, 1, 4).and_hms(0, 0, 0)); + + let res = a.intersect(&b); + + match res.intersection { + DateTimeCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], d2); + assert_eq!(list[1], d3); + } + } + } +} diff --git a/qubed/src/coordinates/floats.rs b/qubed/src/coordinates/floats.rs index 32785cf..3864922 100644 --- a/qubed/src/coordinates/floats.rs +++ b/qubed/src/coordinates/floats.rs @@ -1,6 +1,6 @@ use std::hash::Hash; -use crate::coordinates::Coordinates; +use crate::coordinates::{Coordinates, IntersectionResult}; use tiny_vec::TinyVec; #[derive(Debug, Clone, PartialEq)] @@ -10,10 +10,19 @@ pub enum FloatCoordinates { impl FloatCoordinates { pub(crate) fn extend(&mut self, _new_coords: &FloatCoordinates) { - todo!() + match (self, _new_coords) { + (FloatCoordinates::List(list), FloatCoordinates::List(new_list)) => { + for &v in new_list.iter() { + list.push(v); + } + } + } } + pub(crate) fn append(&mut self, _new_coord: f64) { - todo!() + match self { + FloatCoordinates::List(list) => list.push(_new_coord), + } } pub(crate) fn len(&self) -> usize { @@ -40,6 +49,59 @@ impl FloatCoordinates { } } } + + pub(crate) fn intersect( + &self, + other: &FloatCoordinates, + ) -> IntersectionResult { + match (self, other) { + (FloatCoordinates::List(list_a), FloatCoordinates::List(list_b)) => { + use std::collections::HashSet; + + let mut set_a: HashSet = HashSet::new(); + for v in list_a.iter() { + set_a.insert(v.to_bits()); + } + + let mut set_b: HashSet = HashSet::new(); + for v in list_b.iter() { + set_b.insert(v.to_bits()); + } + + let mut intersection = TinyVec::new(); + let mut only_a = TinyVec::new(); + let mut only_b = TinyVec::new(); + + // preserve order from list_a for intersection and only_a + let mut added: HashSet = HashSet::new(); + for v in list_a.iter() { + let bits = v.to_bits(); + if set_b.contains(&bits) { + if !added.contains(&bits) { + intersection.push(*v); + added.insert(bits); + } + } else { + only_a.push(*v); + } + } + + // for only_b, preserve order from list_b skipping those present in set_a + for v in list_b.iter() { + let bits = v.to_bits(); + if !set_a.contains(&bits) { + only_b.push(*v); + } + } + + IntersectionResult { + intersection: FloatCoordinates::List(intersection), + only_a: FloatCoordinates::List(only_a), + only_b: FloatCoordinates::List(only_b), + } + } + } + } } impl Default for FloatCoordinates { @@ -55,3 +117,202 @@ impl From for Coordinates { Coordinates::Floats(FloatCoordinates::List(vec)) } } + +impl From for Coordinates { + fn from(value: FloatCoordinates) -> Self { + Coordinates::Floats(value) + } +} + +impl From<&[f64]> for Coordinates { + fn from(value: &[f64]) -> Self { + let mut vec = TinyVec::new(); + for &v in value { + vec.push(v); + } + Coordinates::Floats(FloatCoordinates::List(vec)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use tiny_vec::TinyVec; + + #[test] + fn test_float_coordinates_append_and_len() { + let mut coords = FloatCoordinates::default(); + coords.append(1.0); + coords.append(2.5); + + match coords { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], 1.0); + assert_eq!(list[1], 2.5); + } + } + } + + #[test] + fn test_float_coordinates_extend() { + let mut a = FloatCoordinates::default(); + a.append(1.0); + a.append(2.0); + + let mut b = FloatCoordinates::default(); + b.append(3.0); + b.append(4.0); + + a.extend(&b); + + match a { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 4); + assert_eq!(list[0], 1.0); + assert_eq!(list[1], 2.0); + assert_eq!(list[2], 3.0); + assert_eq!(list[3], 4.0); + } + } + } + + #[test] + fn test_float_coordinates_to_string() { + let mut c = FloatCoordinates::default(); + c.append(1.25); + c.append(2.5); + let s = c.to_string(); + assert!(s.contains("1.25")); + assert!(s.contains("2.5")); + } + + #[test] + fn test_float_coordinates_intersect() { + let mut a = FloatCoordinates::default(); + a.append(1.0); + a.append(2.0); + a.append(3.0); + + let mut b = FloatCoordinates::default(); + b.append(2.0); + b.append(3.0); + b.append(4.0); + + let result = a.intersect(&b); + + match result.intersection { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], 2.0); + assert_eq!(list[1], 3.0); + } + } + + match result.only_a { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 1); + assert_eq!(list[0], 1.0); + } + } + + match result.only_b { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 1); + assert_eq!(list[0], 4.0); + } + } + } + + #[test] + fn test_from_conversions() { + // From + let c = Coordinates::from(3.14f64); + match c { + Coordinates::Floats(fc) => match fc { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 1); + assert!((list[0] - 3.14).abs() < 1e-12); + } + }, + _ => panic!("Expected Coordinates::Floats variant"), + } + + // From<&[f64]> + let slice = &[1.0f64, 2.0f64, 3.0f64][..]; + let c2 = Coordinates::from(slice); + match c2 { + Coordinates::Floats(fc) => match fc { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 3); + assert_eq!(list[0], 1.0); + assert_eq!(list[2], 3.0); + } + }, + _ => panic!("Expected Coordinates::Floats variant"), + } + + // From<&[f64; N]> + let arr: [f64; 2] = [9.0, 10.0]; + let c3 = Coordinates::from(&arr); + match c3 { + Coordinates::Floats(fc) => match fc { + FloatCoordinates::List(list) => { + assert_eq!(list.len(), 2); + assert_eq!(list[0], 9.0); + assert_eq!(list[1], 10.0); + } + }, + _ => panic!("Expected Coordinates::Floats variant"), + } + + // From + let mut fc = FloatCoordinates::default(); + fc.append(7.5); + let c4 = Coordinates::from(fc.clone()); + match c4 { + Coordinates::Floats(inner) => { + assert_eq!(inner, fc); + } + _ => panic!("Expected Coordinates::Floats variant"), + } + } +} + +impl From<&[f64; N]> for Coordinates { + fn from(value: &[f64; N]) -> Self { + let mut vec = TinyVec::new(); + for &v in value.iter() { + vec.push(v); + } + Coordinates::Floats(FloatCoordinates::List(vec)) + } +} + +impl From for Coordinates { + fn from(value: f32) -> Self { + let mut vec = TinyVec::new(); + vec.push(value as f64); + Coordinates::Floats(FloatCoordinates::List(vec)) + } +} + +impl From<&[f32]> for Coordinates { + fn from(value: &[f32]) -> Self { + let mut vec = TinyVec::new(); + for &v in value { + vec.push(v as f64); + } + Coordinates::Floats(FloatCoordinates::List(vec)) + } +} + +impl From<&[f32; N]> for Coordinates { + fn from(value: &[f32; N]) -> Self { + let mut vec = TinyVec::new(); + for &v in value.iter() { + vec.push(v as f64); + } + Coordinates::Floats(FloatCoordinates::List(vec)) + } +} diff --git a/qubed/src/coordinates/mod.rs b/qubed/src/coordinates/mod.rs index 6c9bfbe..b046976 100644 --- a/qubed/src/coordinates/mod.rs +++ b/qubed/src/coordinates/mod.rs @@ -1,9 +1,12 @@ +pub mod datetime; pub mod floats; pub mod integers; pub mod ops; pub mod strings; use std::hash::Hash; +use chrono::NaiveDateTime; +use datetime::DateTimeCoordinates; use floats::FloatCoordinates; use integers::IntegerCoordinates; use strings::StringCoordinates; @@ -20,6 +23,7 @@ pub enum Coordinates { Integers(IntegerCoordinates), Floats(FloatCoordinates), Strings(StringCoordinates), + DateTimes(DateTimeCoordinates), Mixed(Box), } @@ -27,6 +31,7 @@ pub enum CoordinateTypes { Integer(i32), Float(f64), String(String), + DateTime(NaiveDateTime), } #[derive(Debug, Clone, PartialEq, Default)] @@ -34,6 +39,7 @@ pub struct MixedCoordinates { integers: integers::IntegerCoordinates, floats: FloatCoordinates, strings: StringCoordinates, + datetimes: DateTimeCoordinates, } impl Coordinates { @@ -46,7 +52,7 @@ impl Coordinates { return Coordinates::Empty; } let mut coords = Coordinates::Empty; - let split: Vec<&str> = s.split('|').collect(); + let split: Vec<&str> = s.split('/').collect(); for part in split { // Check for leading zeros to preserve formatting (e.g., "0001") @@ -73,6 +79,7 @@ impl Coordinates { Coordinates::Empty => "".to_string(), Coordinates::Integers(ints) => ints.to_string(), Coordinates::Floats(floats) => floats.to_string(), + Coordinates::DateTimes(datetimes) => datetimes.to_string(), Coordinates::Strings(strings) => strings.to_string(), Coordinates::Mixed(_) => { todo!() @@ -86,6 +93,7 @@ impl Coordinates { Coordinates::Integers(ints) => ints.len(), Coordinates::Floats(floats) => floats.len(), Coordinates::Strings(strings) => strings.len(), + Coordinates::DateTimes(datetimes) => datetimes.len(), Coordinates::Mixed(mixed) => { mixed.integers.len() + mixed.floats.len() + mixed.strings.len() } @@ -104,6 +112,7 @@ impl Coordinates { match (self, coord_type) { (Coordinates::Empty, _) => false, (Coordinates::Integers(ints), CoordinateTypes::Integer(val)) => ints.contains(val), + (Coordinates::DateTimes(_), _) => unimplemented!(), (Coordinates::Floats(_), _) => unimplemented!(), (Coordinates::Strings(_), _) => unimplemented!(), (Coordinates::Mixed(_), _) => unimplemented!(), @@ -122,6 +131,9 @@ impl Coordinates { Coordinates::Strings(strings) => { Box::new(MixedCoordinates { strings: strings.to_owned(), ..Default::default() }) } + Coordinates::DateTimes(datetimes) => { + Box::new(MixedCoordinates { datetimes: datetimes.to_owned(), ..Default::default() }) + } Coordinates::Empty => Box::new(MixedCoordinates::default()), Coordinates::Mixed(_) => { return self; @@ -150,6 +162,29 @@ impl Coordinates { } } _ => { + eprintln!("Intersection not implemented for:"); + eprintln!( + " self type: {}", + match self { + Coordinates::Empty => "Empty", + Coordinates::Integers(_) => "Integers", + Coordinates::Floats(_) => "Floats", + Coordinates::Strings(_) => "Strings", + Coordinates::DateTimes(_) => "DateTimes", + Coordinates::Mixed(_) => "Mixed", + } + ); + eprintln!( + " other type: {}", + match _other { + Coordinates::Empty => "Empty", + Coordinates::Integers(_) => "Integers", + Coordinates::Floats(_) => "Floats", + Coordinates::Strings(_) => "Strings", + Coordinates::DateTimes(_) => "DateTimes", + Coordinates::Mixed(_) => "Mixed", + } + ); unimplemented!("Intersection not implemented for these coordinate types"); } } @@ -176,6 +211,9 @@ impl Coordinates { mixed.floats.hash(hasher); mixed.strings.hash(hasher); } + Coordinates::DateTimes(datetimes) => { + datetimes.hash(hasher); + } } } } @@ -333,6 +371,7 @@ impl Coordinates { Value::Object(map) } + Coordinates::DateTimes(_) => todo!(), } } diff --git a/qubed/src/coordinates/ops.rs b/qubed/src/coordinates/ops.rs index a426e53..ff61bc2 100644 --- a/qubed/src/coordinates/ops.rs +++ b/qubed/src/coordinates/ops.rs @@ -1,5 +1,6 @@ use crate::Coordinates; use crate::coordinates::CoordinateTypes; +use chrono::NaiveDateTime; impl Coordinates { pub fn extend(&mut self, new_coords: &Coordinates) { @@ -47,6 +48,20 @@ impl Coordinates { } }, Coordinates::Empty => {} + Coordinates::DateTimes(new_datetimes) => match self { + Coordinates::DateTimes(datetimes) => { + datetimes.extend(new_datetimes); + } + Coordinates::Mixed(mixed) => { + mixed.datetimes.extend(new_datetimes); + } + Coordinates::Empty => { + let _ = std::mem::replace(self, new_coords.clone()); + } + _ => { + self.convert_to_mixed().extend(new_coords); + } + }, Coordinates::Mixed(mixed) => match self { Coordinates::Mixed(self_mixed) => { self_mixed.integers.extend(&mixed.integers); @@ -84,6 +99,9 @@ impl Coordinates { CoordinateTypes::String(val) => { self.append_string(val); } + CoordinateTypes::DateTime(val) => { + self.append_datetime(val); + } } } @@ -140,6 +158,24 @@ impl Coordinates { } } } + + fn append_datetime(&mut self, value: NaiveDateTime) { + match self { + Coordinates::DateTimes(datetimes) => { + datetimes.append(value); + } + Coordinates::Mixed(mixed) => { + mixed.datetimes.append(value); + } + Coordinates::Empty => { + *self = Coordinates::from(value); + } + _ => { + self.convert_to_mixed(); + self.append_datetime(value); + } + } + } } impl FromIterator for Coordinates { diff --git a/qubed/src/select.rs b/qubed/src/select.rs index 1040ae4..f0077ad 100644 --- a/qubed/src/select.rs +++ b/qubed/src/select.rs @@ -7,6 +7,7 @@ use std::collections::{HashMap, HashSet}; pub enum SelectMode { Default, Prune, + FollowSelection, // Only shows tree up to where selection values are, doesn't expand deeper } pub(crate) struct WalkPair { @@ -15,25 +16,39 @@ pub(crate) struct WalkPair { } impl Qube { - // Select takes a dictionary of key-vecvalues pairs and returns a QubeView + // Select takes a dictionary of key-values pairs and returns a QubeView // It does not matter which order the keys are specified - - pub fn select(&self, selection: &[(&str, C)], mode: SelectMode) -> Result - where - C: Into + Clone, - { + // + // SelectMode: + // - Default: Returns full subtree from selected values downward + // - Prune: Removes branches that don't have all selected dimensions + // - FollowSelection: Only shows nodes up to the selected values, doesn't expand deeper + // Works regardless of key order - continues through all selected dimensions and stops after + + pub fn select( + &self, + selection: &[(&str, Coordinates)], + mode: SelectMode, + ) -> Result { let root = self.root(); let mut result = Qube::new(); let selection: HashMap<&str, Coordinates> = - selection.iter().map(|(k, v)| (*k, v.clone().into())).collect(); + selection.iter().map(|(k, v)| (*k, v.clone())).collect(); let parents = WalkPair { left: root, right: result.root() }; - self.select_recurse(&selection, &mut result, parents)?; + // For FollowSelection mode, track which selected keys we still need to encounter + let remaining_selected_keys = if mode == SelectMode::FollowSelection { + selection.keys().cloned().collect::>() + } else { + HashSet::new() + }; + + self.select_recurse(&selection, &mut result, parents, &mode, remaining_selected_keys)?; // Prune any nodes which do not have all selected dimensions - if mode == SelectMode::Prune { + if mode == SelectMode::Prune || mode == SelectMode::FollowSelection { let mut has_none_of: HashSet<&str> = HashSet::new(); for key in selection.keys() { has_none_of.insert(*key); @@ -51,6 +66,8 @@ impl Qube { selection: &HashMap<&str, Coordinates>, result: &mut Qube, parents: WalkPair, + mode: &SelectMode, + mut remaining_selected_keys: HashSet<&str>, ) -> Result<(), String> { let source_node = self.node(parents.left).ok_or_else(|| format!("Node {:?} not found", parents.left))?; @@ -58,16 +75,29 @@ impl Qube { // For each child in the source Qube, find the values which overlap and create a child in the result Qube // We ignore values only_in_a and only_in_b, we only want the intersection - // Get the dimension of each chil + // Get the dimension of each child let span = source_node.child_dimensions(); + let mut has_children = false; + let mut children_found = false; // Track if we successfully processed children with matching values for dimension in span { + has_children = true; let dimension_str = self.dimension_str(dimension).ok_or_else(|| { format!("Dimension {:?} not found in key store. Should not happen.", dimension) })?; + // For FollowSelection mode: continue as long as there are selected keys to encounter + // Only skip dimensions if we've already encountered all selected keys + if *mode == SelectMode::FollowSelection + && remaining_selected_keys.is_empty() + && !selection.contains_key(dimension_str) + { + continue; + } + if selection.contains_key(dimension_str) { let selection_coordinates = selection.get(dimension_str).unwrap(); + let mut found = remaining_selected_keys.remove(dimension_str); // Get children for this dimension let source_children: Vec<_> = match source_node.children(*dimension) { @@ -97,7 +127,15 @@ impl Qube { let new_parents = WalkPair { left: child_id, right: new_child }; - self.select_recurse(selection, result, new_parents)?; + // Recurse with the (possibly modified) remaining keys + self.select_recurse( + selection, + result, + new_parents, + mode, + remaining_selected_keys.clone(), + )?; + children_found = true; } } else { // Dimension not in selection, so we take all children @@ -121,11 +159,31 @@ impl Qube { let new_parents = WalkPair { left: child_id, right: new_child }; - self.select_recurse(selection, result, new_parents)?; + // Pass along the remaining selected keys for FollowSelection + self.select_recurse( + selection, + result, + new_parents, + mode, + remaining_selected_keys.clone(), + )?; + children_found = true; } } } + // In FollowSelection mode: if we've reached a terminal point and haven't found all requested keys, + // remove this branch. A terminal point is: + // - A leaf node (no child dimensions), OR + // - A node where we've found all keys and skipped remaining unselected dimensions + if *mode == SelectMode::FollowSelection + && !remaining_selected_keys.is_empty() + && !children_found + { + // This branch reached a dead end without finding all requested keys + result.remove_node(parents.right).ok(); + } + Ok(()) } @@ -210,7 +268,7 @@ mod tests { let qube = Qube::from_ascii(input).unwrap(); - let selection = [("class", &[1])]; + let selection = [("class", Coordinates::from(1))]; let selected_qube = qube.select(&selection, SelectMode::Default)?; println!("Selected Qube:\n{}", selected_qube.to_ascii()); @@ -254,7 +312,7 @@ mod tests { selection.insert("class".to_string(), Coordinates::from(1)); selection.insert("param".to_string(), Coordinates::from(1)); - let selection = [("class", &[1]), ("param", &[1])]; + let selection = [("class", Coordinates::from(1)), ("param", Coordinates::from(1))]; let selected_qube = qube.select(&selection, SelectMode::Default)?; @@ -273,6 +331,98 @@ mod tests { Ok(()) } + #[test] + fn test_select_3() -> Result<(), String> { + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // let mut selection = std::collections::HashMap::new(); + // // selection.insert("class".to_string(), Coordinates::from(1)); + // selection.insert("param".to_string(), Coordinates::from(1)); + + let selection = [("expver", Coordinates::from(&["0001"]))]; + + let selected_qube = qube.select(&selection, SelectMode::Default)?; + + println!("Selected Qube:\n{}", selected_qube.to_ascii()); + + let result = r#"root +├── class=1 +│ └── expver=0001 +│ ├── param=1 +│ └── param=2 +└── class=2 + └── expver=0001 + ├── param=1 + ├── param=2 + └── param=3"#; + + let result = Qube::from_ascii(result).unwrap(); + assert_eq!(selected_qube.to_ascii(), result.to_ascii()); + + Ok(()) + } + + #[test] + fn test_select_4() -> Result<(), String> { + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0003 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // let mut selection = std::collections::HashMap::new(); + // // selection.insert("class".to_string(), Coordinates::from(1)); + // selection.insert("param".to_string(), Coordinates::from(1)); + + let selection = [("expver", Coordinates::from(&["0003"]))]; + + let selected_qube = qube.select(&selection, SelectMode::Prune)?; + + println!("Selected Qube:\n{}", selected_qube.to_ascii()); + + let result = r#"root +└── class=2 + └── expver=0003 + ├── param=1 + ├── param=2 + └── param=3"#; + + let result = Qube::from_ascii(result).unwrap(); + assert_eq!(selected_qube.to_ascii(), result.to_ascii()); + + Ok(()) + } + #[test] fn test_prune() -> Result<(), String> { let input = r#"root @@ -313,4 +463,446 @@ mod tests { Ok(()) } + + #[test] + fn test_follow_selection() -> Result<(), String> { + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select class=1 and expver=0001 with FollowSelection mode + // Should only show the path to these selections, not the param children + // Note: Can now mix integer and string coordinates in one selection! + let selection = [("class", Coordinates::from(1)), ("expver", Coordinates::from(&["0001"]))]; + let selected_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection Result:\n{}", selected_qube.to_ascii()); + + // With FollowSelection, we stop at the deepest selected dimension + // So we get class=1 and expver=0001, but no further children + let result = r#"root +└── class=1 + └── expver=0001"#; + + let result = Qube::from_ascii(result).unwrap(); + assert_eq!(selected_qube.to_ascii(), result.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_vs_default() -> Result<(), String> { + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + let selection = [("class", Coordinates::from(1))]; + + // Default mode: shows full subtree + let default_result = qube.select(&selection, SelectMode::Default)?; + println!("Default Mode:\n{}", default_result.to_ascii()); + + let expected_default = r#"root +└── class=1 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + assert_eq!(default_result.to_ascii(), Qube::from_ascii(expected_default)?.to_ascii()); + + // FollowSelection mode: stops at selected dimension + let follow_result = qube.select(&selection, SelectMode::FollowSelection)?; + println!("FollowSelection Mode:\n{}", follow_result.to_ascii()); + + let expected_follow = r#"root +└── class=1"#; + assert_eq!(follow_result.to_ascii(), Qube::from_ascii(expected_follow)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_with_unselected_dimensions() -> Result<(), String> { + // Test FollowSelection with mixed selected and unselected dimensions + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Only select class=1 (expver is NOT selected) + // With FollowSelection, we should get class=1 and ALL its expver children, + // but stop before param + let selection = [("class", Coordinates::from(1))]; + let result_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection with partial selection:\n{}", result_qube.to_ascii()); + + // Should have class=1 with all expver variants (not selected, so included) + // But no param children (dimensions after the selected one) + let expected = r#"root +└── class=1"#; + + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_key_order_independence() -> Result<(), String> { + // Test that FollowSelection works regardless of key order in the selection + // Tree is: class -> expver -> param + // But we specify selection as: param="1", class=1 (reverse order) + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Specify selection in different order than tree (param first, then class) + // Should still get same result as if we specified in tree order + let selection = [("param", Coordinates::from(1)), ("class", Coordinates::from(1))]; + let result_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection with reordered keys:\n{}", result_qube.to_ascii()); + + // Should show all combinations: class=1 with all expver that have param=1 + let expected = r#"root +└── class=1 + ├── expver=0001 + │ └── param=1 + └── expver=0002 + └── param=1"#; + + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_drops_incomplete_branches() -> Result<(), String> { + // Test that FollowSelection drops branches that don't have all requested KEY DIMENSIONS + // Even if they have some of the requested keys with values + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select for a key that only some branches have + // Request: step (doesn't exist) and class (exists) + // Since no branch has "step" dimension, all should be dropped + // This tests that missing requested keys cause branch removal + let selection = [("step", Coordinates::from(1))]; + let result_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection with nonexistent key:\n{}", result_qube.to_ascii()); + + // Since "step" key is never found in any branch, result should be empty (just root) + let expected = r#"root"#; + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_drops_incomplete_branches_2() -> Result<(), String> { + // Test that FollowSelection drops branches that don't have all requested KEY DIMENSIONS + // Even if they have some of the requested keys with values + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── step=1 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select for a key that only some branches have + // Request: step (doesn't exist) and class (exists) + // Since no branch has "step" dimension, all should be dropped + // This tests that missing requested keys cause branch removal + let selection = [("step", Coordinates::from(1))]; + let result_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection with nonexistent key:\n{}", result_qube.to_ascii()); + + // Since "step" key is never found in any branch, result should be empty (just root) + let expected = r#"root +└── class=2 + └── step=1"#; + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_follow_selection_keeps_complete_branches() -> Result<(), String> { + // Test that FollowSelection keeps branches that have all requested keys + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select multiple values of expver and param - all combinations should show + let selection = + [("expver", Coordinates::from(&["0001", "0002"])), ("param", Coordinates::from(1))]; + let result_qube = qube.select(&selection, SelectMode::FollowSelection)?; + + println!("FollowSelection with multiple selected values:\n{}", result_qube.to_ascii()); + + // Should show all class/expver combinations that have param=1 + let expected = r#"root +├── class=1 +│ ├── expver=0001 +│ │ └── param=1 +│ └── expver=0002 +│ └── param=1 +└── class=2 + ├── expver=0001 + │ └── param=1 + └── expver=0002 + └── param=1"#; + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_select_multiple_values_same_key_default_mode() -> Result<(), String> { + // Test selecting multiple values on the same key in Default mode + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select multiple expver values: 0001 AND 0002 + // Default mode should show full subtree for all selected values + let selection = [("expver", Coordinates::from(&["0001", "0002"]))]; + let result_qube = qube.select(&selection, SelectMode::Default)?; + + println!("Default mode with multiple expver values:\n{}", result_qube.to_ascii()); + + // Should include all class/expver combinations where expver is 0001 or 0002 + let expected = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_select_multiple_values_same_key_default_mode_int() -> Result<(), String> { + // Test selecting multiple integer values on the same key in Default mode + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ ├── param=2 + │ └── param=3 + └── expver=0002 + ├── param=1 + └── param=2"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select multiple param values: 1 AND 2 (both integers) + // Default mode should show full subtree for all selected values + let selection = [("param", Coordinates::from(&[1, 2]))]; + let result_qube = qube.select(&selection, SelectMode::Default)?; + + println!("Default mode with multiple param values:\n{}", result_qube.to_ascii()); + + // Should include all class/expver combinations where param is 1 or 2 + let expected = r#"root +├── class=1 +│ ├── expver=0001 +│ │ ├── param=1 +│ │ └── param=2 +│ └── expver=0002 +│ ├── param=1 +│ └── param=2 +└── class=2 + ├── expver=0001 + │ ├── param=1 + │ └── param=2 + └── expver=0002 + ├── param=1 + └── param=2"#; + + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } + + #[test] + fn test_select_multiple_values_same_key_excludes_unselected() -> Result<(), String> { + // Test that selecting multiple values on same key excludes values not in the selection + let input = r#"root +├── class=1 +│ ├── expver=0001 +│ │ └── param=1 +│ ├── expver=0002 +│ │ └── param=1 +│ └── expver=0003 +│ └── param=1 +└── class=2 + ├── expver=0001 + │ └── param=1 + ├── expver=0002 + │ └── param=1 + └── expver=0003 + └── param=1"#; + + let qube = Qube::from_ascii(input).unwrap(); + + // Select only expver 0001 and 0002 (excludes 0003) + let selection = [("expver", Coordinates::from(&["0001", "0002"]))]; + let result_qube = qube.select(&selection, SelectMode::Default)?; + + println!("Multiple values excluding unselected:\n{}", result_qube.to_ascii()); + + // Should NOT include expver=0003 + let expected = r#"root +├── class=1 +│ ├── expver=0001 +│ │ └── param=1 +│ └── expver=0002 +│ └── param=1 +└── class=2 + ├── expver=0001 + │ └── param=1 + └── expver=0002 + └── param=1"#; + + assert_eq!(result_qube.to_ascii(), Qube::from_ascii(expected)?.to_ascii()); + + Ok(()) + } } diff --git a/qubed/src/serde/json.rs b/qubed/src/serde/json.rs index d0210fe..2cb1832 100644 --- a/qubed/src/serde/json.rs +++ b/qubed/src/serde/json.rs @@ -78,8 +78,71 @@ impl Qube { for id in order.iter() { let nref = self.node(*id).expect("valid node"); let dim = nref.dimension().unwrap_or("root").to_string(); - // Preserve native types for coordinates using Coordinates -> JSON helpers - let coords_value = nref.coordinates().to_json_value(); + // Build coords object with explicit type tags so consumers know the + // coordinate type without guessing. Examples: + // { "ints": [1,2,3] }, { "strings": ["od"] }, { "floats": [...] }, or mixed object. + let coords_value = { + use serde_json::{Map, Value}; + let mut map = Map::new(); + + // Use the public Coordinates -> JSON helper which returns a + // native serde_json::Value (array/string/object/null). + let native = nref.coordinates().to_json_value(); + + match nref.coordinates() { + crate::Coordinates::Empty => Value::Object(map), + crate::Coordinates::Integers(_) => match native { + Value::Array(arr) => { + map.insert("ints".to_string(), Value::Array(arr)); + Value::Object(map) + } + Value::String(s) => { + // RangeSet or other textual form – preserve as string under "ints_text" + map.insert("ints_text".to_string(), Value::String(s)); + Value::Object(map) + } + other => { + map.insert("ints".to_string(), other); + Value::Object(map) + } + }, + crate::Coordinates::Floats(_) => match native { + Value::Array(arr) => { + map.insert("floats".to_string(), Value::Array(arr)); + Value::Object(map) + } + other => { + map.insert("floats".to_string(), other); + Value::Object(map) + } + }, + crate::Coordinates::Strings(_) => match native { + Value::Array(arr) => { + map.insert("strings".to_string(), Value::Array(arr)); + Value::Object(map) + } + other => { + map.insert("strings".to_string(), other); + Value::Object(map) + } + }, + crate::Coordinates::DateTimes(_) => { + // Fallback to whatever the generic serializer produces (not implemented elsewhere yet) + let v = nref.coordinates().to_json_value(); + match v { + Value::Array(arr) => { + map.insert("datetimes".to_string(), Value::Array(arr)); + Value::Object(map) + } + other => Value::Object(map), + } + } + crate::Coordinates::Mixed(_) => { + // Mixed already produces an object with keys like ints/floats/strings + nref.coordinates().to_json_value() + } + } + }; let parent_idx = nref.parent().map(|p| idx_map.get(&p).copied().unwrap()); @@ -103,16 +166,41 @@ impl Qube { nodes_json.push(Value::Object(map)); } - Value::Array(nodes_json) + // Wrap the arena array with a versioned envelope so format changes + // can be detected by consumers. + let mut root_map = Map::new(); + root_map.insert("version".to_string(), Value::String("1".to_string())); + root_map.insert("qube".to_string(), Value::Array(nodes_json)); + Value::Object(root_map) } /// Reconstruct a Qube from an arena JSON layout created by `to_arena_json`. pub fn from_arena_json(value: Value) -> Result { use std::collections::HashMap; + // Expect a versioned envelope with structure { "version": "1", "qube": [ ... ] } let arr = match value { - Value::Array(a) => a, - _ => return Err("Expected JSON array for arena layout".to_string()), + Value::Object(map) => { + // check version + let version_val = map + .get("version") + .ok_or_else(|| "Arena JSON missing 'version' field".to_string())?; + let ok = match version_val { + Value::String(s) => s == "1", + Value::Number(n) => n.as_u64().map(|v| v == 1).unwrap_or(false), + _ => false, + }; + if !ok { + return Err(format!("Unsupported arena JSON version: {:?}", version_val)); + } + + // extract qube array + match map.get("qube") { + Some(Value::Array(a)) => a.clone(), + _ => return Err("Arena JSON missing 'qube' array".to_string()), + } + } + _ => return Err("Expected JSON object envelope for arena layout".to_string()), }; // We will create nodes in the same order. Start with a fresh Qube which @@ -144,9 +232,56 @@ impl Qube { }; // create child under parent - // Parse coords using Coordinates::from_json_value so native JSON types - // (numbers/strings/mixed) are preserved. - let coords_parsed = Coordinates::from_json_value(coords_value)?; + // Interpret typed coords object if present so we deserialize into + // the most specific `Coordinates` variant (Integers, Strings, + // Floats) rather than always producing a Mixed variant. If the + // coords object contains a single typed key (e.g. `ints`, + // `strings`, `floats`) we'll pass the underlying array/string to + // `from_json_value`. If it contains multiple keys we pass the + // whole object to obtain a `Mixed` coordinates value. + let coords_parsed = { + use serde_json::Value; + + // Build a Value suitable for Coordinates::from_json_value + let coords_for_parse: Value = match coords_value { + Value::Object(map) => { + // Detect typed keys + let has_ints = map.get("ints").is_some(); + let has_ints_text = map.get("ints_text").is_some(); + let has_strings = map.get("strings").is_some(); + let has_floats = map.get("floats").is_some(); + let has_datetimes = map.get("datetimes").is_some(); + + let typed_key_count = + [has_ints, has_ints_text, has_strings, has_floats, has_datetimes] + .iter() + .filter(|&&b| b) + .count(); + + if has_ints_text && typed_key_count == 1 { + // textual integer representation -> parse as string + map.get("ints_text").cloned().unwrap_or(Value::Null) + } else if has_ints && typed_key_count == 1 { + // ints as native array -> pass array so `from_json_value` + // returns `Coordinates::Integers` where possible + map.get("ints").cloned().unwrap_or(Value::Null) + } else if has_strings && typed_key_count == 1 { + map.get("strings").cloned().unwrap_or(Value::Null) + } else if has_floats && typed_key_count == 1 { + map.get("floats").cloned().unwrap_or(Value::Null) + } else if has_datetimes && typed_key_count == 1 { + map.get("datetimes").cloned().unwrap_or(Value::Null) + } else { + // Mixed or unknown: pass the whole object so + // `from_json_value` can create a MixedCoordinates + Value::Object(map.clone()) + } + } + other => other.clone(), + }; + + Coordinates::from_json_value(&coords_for_parse)? + }; let created = if i == 0 { // first entry corresponds to root; update root coords if provided // skip creating a new node; optionally set coords on root diff --git a/qubed/tests/tdd.rs b/qubed/tests/tdd.rs index ff3ece1..7033ae8 100644 --- a/qubed/tests/tdd.rs +++ b/qubed/tests/tdd.rs @@ -1,3 +1,4 @@ +use qubed::Coordinates; use qubed::Qube; use qubed::select::SelectMode; @@ -51,7 +52,7 @@ fn tdd_select_demo() -> Result<(), String> { let qube = Qube::from_ascii(input)?; // Select: class=1 and param=2 - let selection = [("class", &[1]), ("param", &[2])]; + let selection = [("class", Coordinates::from(1)), ("param", Coordinates::from(2))]; let selected_qube = qube.select(&selection, SelectMode::Default)?; // Query and Assert: The selected Qube should only have class=1, diff --git a/qubed_meteo/Cargo.toml b/qubed_meteo/Cargo.toml index f328ffc..58b3502 100644 --- a/qubed_meteo/Cargo.toml +++ b/qubed_meteo/Cargo.toml @@ -7,7 +7,6 @@ edition = "2024" qubed = { path = "../qubed" } serde = "1.0.228" serde_json = "1.0.145" -rsfdb = { path = "../../rsfdb" } [lib] path = "src/lib.rs" diff --git a/qubed_meteo/bin/fdb_db_reader.rs b/qubed_meteo/bin/fdb_db_reader.rs new file mode 100644 index 0000000..014c676 --- /dev/null +++ b/qubed_meteo/bin/fdb_db_reader.rs @@ -0,0 +1,50 @@ +use qubed::Qube; +use qubed_meteo::adapters::fdb::FromFDBList; +use rsfdb::{FDB, request::Request}; +use serde_json::json; +use std::env; +use std::time::Instant; +use std::fs::File; + +fn main() -> Result<(), Box> { + // Ensure FDB config is set so the internal listing can open the DB + use std::path::PathBuf; + + let config_path = PathBuf::from("xxx"); // Adjust this path to point to your local FDB config.yaml + unsafe { + std::env::set_var("FDB5_CONFIG_FILE", config_path.to_str().expect("Invalid config path")); + } + + let lib_path = PathBuf::from("xxx"); // Adjust this path to point to the directory containing FDB shared libraries + + unsafe { + std::env::set_var("DYLD_LIBRARY_PATH", lib_path.to_str().expect("Invalid path to shared libraries")); + } + + let request_map = json!({ + "class" : "d1", + "dataset": "extremes-dt", + "expver" : "0001", + "stream" : "oper", + "date": "20260303", + "time" : "0000", + "domain" : "g", + "levtype" : "sfc", + }); + let start_time = Instant::now(); + + // Build the Qube directly from the request; the adapter will open FDB and list. + let qube = Qube::from_fdb_list(&request_map).expect("Failed to build Qube from FDB list"); + + // Stop the timer + let duration = start_time.elapsed(); + + // Print the time taken + println!("Time taken to construct Qube: {:?}", duration); + + let file = File::create("extremes_eg.json")?; + serde_json::to_writer(file, &qube.to_arena_json())?; + + Ok(()) + +} \ No newline at end of file diff --git a/qubed_meteo/examples/read_from_fdb_list.rs b/qubed_meteo/examples/read_from_fdb_list.rs index c780cce..a370516 100644 --- a/qubed_meteo/examples/read_from_fdb_list.rs +++ b/qubed_meteo/examples/read_from_fdb_list.rs @@ -26,7 +26,9 @@ fn main() { // Build the Qube directly from the request; the adapter will open FDB and list. let qube = Qube::from_fdb_list(&request_map).expect("Failed to build Qube from FDB list"); - println!("Qube structure:\n{}", qube.to_ascii()); + // println!("Qube structure:\n{}", qube.to_ascii()); + + println!("Qube in arena json format:\n{}", qube.to_arena_json()); // Stop the timer let duration = start_time.elapsed(); diff --git a/qubed_meteo/qube_examples/large_extremes_eg.json b/qubed_meteo/qube_examples/large_extremes_eg.json new file mode 100644 index 0000000..60ca535 --- /dev/null +++ b/qubed_meteo/qube_examples/large_extremes_eg.json @@ -0,0 +1,4 @@ +{ + "version": "1", + "qube": [{"children":[1],"coords":{},"dim":"root","parent":null},{"children":[2],"coords":{"strings":["d1"]},"dim":"class","parent":0},{"children":[3],"coords":{"strings":["extremes-dt"]},"dim":"dataset","parent":1},{"children":[4],"coords":{"ints":[20260303]},"dim":"date","parent":2},{"children":[5],"coords":{"strings":["0001"]},"dim":"expver","parent":3},{"children":[6],"coords":{"strings":["oper"]},"dim":"stream","parent":4},{"children":[7],"coords":{"strings":["0000"]},"dim":"time","parent":5},{"children":[8],"coords":{"strings":["sfc"]},"dim":"levtype","parent":6},{"children":[9,10,11],"coords":{"strings":["fc"]},"dim":"type","parent":7},{"children":[12],"coords":{"ints":[142,144,169,175,176,177,178,179,180,181,205,228,228216]},"dim":"param","parent":8},{"children":[13],"coords":{"ints":[228058]},"dim":"param","parent":8},{"children":[14],"coords":{"ints":[31,34,78,134,136,137,151,165,166,167,168,235,3020,228029,228050,228218,228219,228221,228235,260015]},"dim":"param","parent":8},{"children":[],"coords":{"strings":["0-1","1-2","10-11","11-12","12-13","13-14","14-15","15-16","16-17","17-18","18-19","19-20","2-3","20-21","21-22","22-23","23-24","24-25","25-26","26-27","27-28","28-29","29-30","3-4","30-31","31-32","32-33","33-34","34-35","35-36","36-37","37-38","38-39","39-40","4-5","40-41","41-42","42-43","43-44","44-45","45-46","46-47","47-48","48-49","49-50","5-6","50-51","51-52","52-53","53-54","54-55","55-56","56-57","57-58","58-59","59-60","6-7","60-61","61-62","62-63","63-64","64-65","65-66","66-67","67-68","68-69","69-70","7-8","70-71","71-72","72-73","73-74","74-75","75-76","76-77","77-78","78-79","79-80","8-9","80-81","81-82","82-83","83-84","84-85","85-86","86-87","87-88","88-89","89-90","9-10","90-91","91-92","92-93","93-94","94-95","95-96"]},"dim":"step","parent":9},{"children":[],"coords":{"strings":["0-6","12-18","18-24","24-30","30-36","36-42","42-48","48-54","54-60","6-12","60-66","66-72","72-78","78-84","84-90","90-96"]},"dim":"step","parent":10},{"children":[],"coords":{"ints":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96]},"dim":"step","parent":11}] +} diff --git a/qubed_meteo/qube_examples/medium_extremes_eg.json b/qubed_meteo/qube_examples/medium_extremes_eg.json new file mode 100644 index 0000000..4bb8657 --- /dev/null +++ b/qubed_meteo/qube_examples/medium_extremes_eg.json @@ -0,0 +1,4 @@ +{ + "version": "1", + "qube": [{"children":[1],"coords":{},"dim":"root","parent":null},{"children":[2],"coords":{"strings":["d1"]},"dim":"class","parent":0},{"children":[3],"coords":{"strings":["extremes-dt"]},"dim":"dataset","parent":1},{"children":[4],"coords":{"ints":[20260303]},"dim":"date","parent":2},{"children":[5],"coords":{"strings":["0001"]},"dim":"expver","parent":3},{"children":[6],"coords":{"strings":["oper"]},"dim":"stream","parent":4},{"children":[7],"coords":{"strings":["0000"]},"dim":"time","parent":5},{"children":[8],"coords":{"strings":["sfc"]},"dim":"levtype","parent":6},{"children":[9],"coords":{"strings":["fc"]},"dim":"type","parent":7},{"children":[10],"coords":{"ints":[31,34,78,134,136,137,151,165,166,167,168,235,3020,228029,228050,228218,228219,228221,228235,260015]},"dim":"param","parent":8},{"children":[],"coords":{"ints":[0]},"dim":"step","parent":9}] +} diff --git a/qubed_meteo/qube_examples/oper_fdb.json b/qubed_meteo/qube_examples/oper_fdb.json new file mode 100644 index 0000000..807a6fd --- /dev/null +++ b/qubed_meteo/qube_examples/oper_fdb.json @@ -0,0 +1,4 @@ +{ + "version": "1", + "qube": [{"children":[1],"coords":{},"dim":"root","parent":null},{"children":[2,3,4,5],"coords":{"strings":["od"]},"dim":"class","parent":0},{"children":[6],"coords":{"ints":[20231102]},"dim":"date","parent":1},{"children":[7],"coords":{"ints":[20240103]},"dim":"date","parent":1},{"children":[8],"coords":{"ints":[20240118]},"dim":"date","parent":1},{"children":[9],"coords":{"ints":[20240129]},"dim":"date","parent":1},{"children":[10],"coords":{"strings":["g"]},"dim":"domain","parent":2},{"children":[11],"coords":{"strings":["g"]},"dim":"domain","parent":3},{"children":[12],"coords":{"strings":["g"]},"dim":"domain","parent":4},{"children":[13],"coords":{"strings":["g"]},"dim":"domain","parent":5},{"children":[14],"coords":{"strings":["0001"]},"dim":"expver","parent":6},{"children":[15],"coords":{"strings":["0001"]},"dim":"expver","parent":7},{"children":[16],"coords":{"strings":["0001"]},"dim":"expver","parent":8},{"children":[17],"coords":{"strings":["0001"]},"dim":"expver","parent":9},{"children":[18],"coords":{"strings":["oper"]},"dim":"stream","parent":10},{"children":[19],"coords":{"strings":["oper"]},"dim":"stream","parent":11},{"children":[20],"coords":{"strings":["oper"]},"dim":"stream","parent":12},{"children":[21],"coords":{"strings":["oper"]},"dim":"stream","parent":13},{"children":[22],"coords":{"strings":["0000"]},"dim":"time","parent":14},{"children":[23],"coords":{"strings":["0000"]},"dim":"time","parent":15},{"children":[24],"coords":{"strings":["0000"]},"dim":"time","parent":16},{"children":[25],"coords":{"strings":["0000"]},"dim":"time","parent":17},{"children":[26],"coords":{"strings":["sfc"]},"dim":"levtype","parent":18},{"children":[27],"coords":{"strings":["sfc"]},"dim":"levtype","parent":19},{"children":[28],"coords":{"strings":["sfc"]},"dim":"levtype","parent":20},{"children":[29],"coords":{"strings":["sfc"]},"dim":"levtype","parent":21},{"children":[30],"coords":{"strings":["fc"]},"dim":"type","parent":22},{"children":[31],"coords":{"strings":["fc"]},"dim":"type","parent":23},{"children":[32],"coords":{"strings":["fc"]},"dim":"type","parent":24},{"children":[33],"coords":{"strings":["fc"]},"dim":"type","parent":25},{"children":[34],"coords":{"ints":[167]},"dim":"param","parent":26},{"children":[35],"coords":{"ints":[167]},"dim":"param","parent":27},{"children":[36],"coords":{"ints":[49,167]},"dim":"param","parent":28},{"children":[37],"coords":{"ints":[167]},"dim":"param","parent":29},{"children":[],"coords":{"ints":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,93,96,99]},"dim":"step","parent":30},{"children":[],"coords":{"ints":[0,1,2]},"dim":"step","parent":31},{"children":[],"coords":{"ints":[0]},"dim":"step","parent":32},{"children":[],"coords":{"ints":[0]},"dim":"step","parent":33}] +} diff --git a/qubed_meteo/qube_examples/small_climate_eg.json b/qubed_meteo/qube_examples/small_climate_eg.json new file mode 100644 index 0000000..1a17dd0 --- /dev/null +++ b/qubed_meteo/qube_examples/small_climate_eg.json @@ -0,0 +1,4 @@ +{ + "version": "1", + "qube": [{"children":[1],"coords":{},"dim":"root","parent":null},{"children":[2],"coords":{"strings":["highresmip"]},"dim":"activity","parent":0},{"children":[3],"coords":{"strings":["d1"]},"dim":"class","parent":1},{"children":[4],"coords":{"strings":["climate-dt"]},"dim":"dataset","parent":2},{"children":[5],"coords":{"strings":["cont"]},"dim":"experiment","parent":3},{"children":[6],"coords":{"strings":["0001"]},"dim":"expver","parent":4},{"children":[7],"coords":{"ints":[1]},"dim":"generation","parent":5},{"children":[8],"coords":{"strings":["ifs-nemo"]},"dim":"model","parent":6},{"children":[9],"coords":{"ints":[1]},"dim":"realization","parent":7},{"children":[10],"coords":{"strings":["clte"]},"dim":"stream","parent":8},{"children":[11],"coords":{"ints":[1990]},"dim":"year","parent":9},{"children":[12],"coords":{"strings":["sfc"]},"dim":"levtype","parent":10},{"children":[13],"coords":{"ints":[1]},"dim":"month","parent":11},{"children":[14],"coords":{"strings":["high"]},"dim":"resolution","parent":12},{"children":[15],"coords":{"strings":["fc"]},"dim":"type","parent":13},{"children":[16],"coords":{"ints":[19900101]},"dim":"date","parent":14},{"children":[17],"coords":{"ints":[167]},"dim":"param","parent":15},{"children":[],"coords":{"strings":["0000"]},"dim":"time","parent":16}] +} diff --git a/qubed_meteo/qube_examples/small_extremes_eg.json b/qubed_meteo/qube_examples/small_extremes_eg.json new file mode 100644 index 0000000..e54b1a5 --- /dev/null +++ b/qubed_meteo/qube_examples/small_extremes_eg.json @@ -0,0 +1,4 @@ +{ + "version": "1", + "qube": [{"children":[1],"coords":{},"dim":"root","parent":null},{"children":[2],"coords":{"strings":["d1"]},"dim":"class","parent":0},{"children":[3],"coords":{"strings":["extremes-dt"]},"dim":"dataset","parent":1},{"children":[4],"coords":{"ints":[20260303]},"dim":"date","parent":2},{"children":[5],"coords":{"strings":["0001"]},"dim":"expver","parent":3},{"children":[6],"coords":{"strings":["oper"]},"dim":"stream","parent":4},{"children":[7],"coords":{"strings":["0000"]},"dim":"time","parent":5},{"children":[8],"coords":{"strings":["sfc"]},"dim":"levtype","parent":6},{"children":[9],"coords":{"strings":["fc"]},"dim":"type","parent":7},{"children":[10],"coords":{"ints":[34]},"dim":"param","parent":8},{"children":[],"coords":{"ints":[0]},"dim":"step","parent":9}] +} diff --git a/qubed_meteo/src/adapters/fdb.rs b/qubed_meteo/src/adapters/fdb.rs index 4ad7b1a..63fdb18 100644 --- a/qubed_meteo/src/adapters/fdb.rs +++ b/qubed_meteo/src/adapters/fdb.rs @@ -20,7 +20,7 @@ impl FromFDBList for Qube { let fdb = FDB::new(None).map_err(|e| format!("Failed to open FDB: {:?}", e))?; let list_iter = - fdb.list(&request, true, true).map_err(|e| format!("FDB list failed: {:?}", e))?; + fdb.list(&request, true, false).map_err(|e| format!("FDB list failed: {:?}", e))?; let mut qube = Qube::new(); let root = qube.root(); @@ -72,6 +72,11 @@ impl FromFDBList for Qube { if let Some((key, val)) = part.split_once('=') { let vals: Vec<&str> = val.split('/').map(|s| s.trim()).filter(|s| !s.is_empty()).collect(); + + // If there are no value parts (e.g. "key=") skip creating an empty child + if vals.is_empty() { + continue; + } let coords = make_coords(&vals); let child = qube .get_or_create_child(key.trim(), parent, coords) diff --git a/stac_server/POLYTOPE_AUTH_TESTING.md b/stac_server/POLYTOPE_AUTH_TESTING.md new file mode 100644 index 0000000..7ccc8bf --- /dev/null +++ b/stac_server/POLYTOPE_AUTH_TESTING.md @@ -0,0 +1,47 @@ +# Polytope Authentication + +The STAC server's Polytope integration collects authentication credentials directly from users through the web interface and queries the **Destination Earth** Polytope service. + +## User Flow + +1. Navigate through the STAC catalogue and select your data +2. At the end of the catalogue, you'll see the "Query Data with Polytope" section +3. Enter your Destination Earth Polytope credentials: + - **Email Address**: Your email address registered with Destination Earth + - **API Key**: Your Polytope API key +4. Click "Query Polytope Service" to submit your data extraction requests + +## Getting Your Polytope API Key + +1. Visit [https://polytope.lumi.apps.dte.destination-earth.eu](https://polytope.lumi.apps.dte.destination-earth.eu) +2. Log in with your Destination Earth credentials +3. Navigate to your profile or settings +4. Generate or copy your API key + +## Technical Details + +The service connects to the Destination Earth Polytope instance: +- **Address**: `polytope.lumi.apps.dte.destination-earth.eu` +- **Collection**: `destination-earth` + +## Security Notes + +- Credentials are sent securely with each request +- Credentials are not stored on the server +- Each user provides their own authentication +- Credentials are only logged in a masked format for debugging + +## For Developers + +The credentials are sent in the request body as: +```json +{ + "requests": [...], + "credentials": { + "user_email": "user@ecmwf.int", + "user_key": "your_api_key" + } +} +``` + +The backend passes these credentials directly to `earthkit.data.from_source()` when querying Polytope. \ No newline at end of file diff --git a/stac_server/__init__.py b/stac_server/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/stac_server/favicon.ico b/stac_server/favicon.ico new file mode 100644 index 0000000..3663761 Binary files /dev/null and b/stac_server/favicon.ico differ diff --git a/stac_server/key_ordering.py b/stac_server/key_ordering.py new file mode 100644 index 0000000..a5ccb24 --- /dev/null +++ b/stac_server/key_ordering.py @@ -0,0 +1,84 @@ +climate_dt_keys = [ + "class", + "dataset", + "activity", + "experiment", + "generation", + "model", + "realization", + "expver", + "stream", + "date", + "resolution", + "type", + "levtype", + "time", + "levelist", + "param", +] + +extremes_dt_keys = [ + "class", + "dataset", + "expver", + "stream", + "date", + "time", + "type", + "levtype", + "step", + "levelist", + "param", + "frequency", + "direction", +] + +on_demands_dt_keys = [ + "class", + "dataset", + "expver", + "stream", + "date", + "time", + "type", + "georef", + "levtype", + "step", + "number", + "levelist", + "param", + "frequency", + "direction", + "ident", + "instrument", + "channel", +] + +default_keys = [ + "class", + "dataset", + "stream", + "activity", + "resolution", + "expver", + "experiment", + "generation", + "model", + "realization", + "type", + "date", + "time", + "datetime", + "levtype", + "levelist", + "step", + "param", +] + + +dataset_key_orders = { + "climate-dt": climate_dt_keys, + "extremes-dt": extremes_dt_keys, + "on-demand-extremes-dt": on_demands_dt_keys, + "default": default_keys, +} \ No newline at end of file diff --git a/stac_server/main.py b/stac_server/main.py new file mode 100644 index 0000000..21f2299 --- /dev/null +++ b/stac_server/main.py @@ -0,0 +1,761 @@ +from .key_ordering import dataset_key_orders +import base64 +import json +import logging +import os +import subprocess +import sys +from io import BytesIO, StringIO +from pathlib import Path +from typing import Mapping + +import yaml +from fastapi import Depends, FastAPI, HTTPException, Request +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse, HTMLResponse, JSONResponse +from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer +from fastapi.staticfiles import StaticFiles +from fastapi.templating import Jinja2Templates +from pydantic import BaseModel +from qubed import PyQube +# from qubed.formatters import node_tree_to_html + +logger = logging.getLogger("uvicorn.error") +log_level = os.environ.get("LOG_LEVEL", "INFO").upper() +if log_level in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]: + logger.setLevel(log_level) + logger.info(f"Set log level to {log_level}") +else: + logger.warning(f"Invalid LOG_LEVEL {log_level}, defaulting to INFO") + logger.setLevel(logging.INFO) +# load yaml config from configmap or default path +config_path = os.environ.get( + "CONFIG_PATH", f"{Path(__file__).parents[1]}/config/config.yaml" +) +if not Path(config_path).exists(): + raise FileNotFoundError(f"Config file not found at {config_path}") +with open(config_path, "r") as f: + config = yaml.safe_load(f) + logger.info(f"Loaded config from {config_path}") + +prefix = Path( + os.environ.get( + "QUBED_DATA_PREFIX", Path(__file__).parents[1] / "qubed_meteo/qube_examples/" + ) +) + +if "API_KEY" in os.environ: + api_key = os.environ["API_KEY"].strip() + logger.info("Got api key from env key API_KEY") +else: + with open("api_key.secret", "r") as f: + api_key = f.read().strip() + logger.info("Got api_key from local file 'api_key.secret'") + +app = FastAPI() +security = HTTPBearer() +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +@app.on_event("startup") +async def startup_event(): + """Install required packages on startup.""" + required_packages = [ + "covjsonkit", + "earthkit-plots", + "xarray", + "matplotlib", + "numpy", + ] + logger.info("Checking and installing required packages on startup...") + + for package in required_packages: + try: + # Try to import to check if already installed + __import__(package.replace("-", "_")) + logger.info(f"{package} is already installed") + except ImportError: + logger.info(f"Installing {package}...") + try: + result = subprocess.run( + [sys.executable, "-m", "pip", "install", package], + capture_output=True, + text=True, + timeout=120, + ) + if result.returncode == 0: + logger.info(f"Successfully installed {package}") + else: + logger.warning(f"Failed to install {package}: {result.stderr}") + except Exception as e: + logger.warning(f"Error installing {package}: {e}") + + logger.info("Package installation check complete") + + +app.mount( + "/static", StaticFiles(directory=Path(__file__).parent / "static"), name="static" +) +templates = Jinja2Templates(directory=Path(__file__).parent / "templates") + +# qube = Qube.empty() +qube = PyQube() +mars_language = {} + +print("HERE WHAT") +print(config.get("data_files", [])) + +for i, data_file in enumerate(config.get("data_files", [])): + data_path = prefix / data_file + if not data_path.exists(): + logger.warning(f"Data file {data_path} does not exist, skipping") + continue + logger.info(f"Loading data from {data_path}") + with open(data_path, "r") as f: + # PyQube.from_arena_json expects a JSON string, not a Python dict + new_qube = PyQube.from_arena_json(json.dumps(json.load(f))) + print(new_qube.to_ascii()) + + print("WHAT IS i") + print(i) + + if i==0: + print("WENT HERE??") + qube = new_qube + print(qube.to_ascii()) + logger.info(f"Initialized qube from {data_path}") + else: + print("WHAT DID WE DO HERE??") + qube.append(new_qube) + print(qube.to_ascii()) + logger.info(f"Appended data from {data_path}") + logger.info(f"Loaded {data_path}. Now have {len(qube)} nodes.") + +print("WHAT'S THE FINAL QUBE???") +print(qube.to_ascii()) + +with open(Path(__file__).parents[1] / "config/language/language.yaml", "r") as f: + mars_language = yaml.safe_load(f) + + +logger.info("Ready to serve requests!") + + +async def get_body_json(request: Request): + return await request.json() + + +def parse_request(request: Request) -> dict[str, str | list[str]]: + # Convert query parameters to dictionary format + request_dict = dict(request.query_params) + for key, value in request_dict.items(): + # Convert comma-separated values into lists + if "," in value: + request_dict[key] = value.split(",") + + return request_dict + + +def validate_api_key(credentials: HTTPAuthorizationCredentials = Depends(security)): + logger.info( + f"Validating API key: {credentials.scheme} {credentials.credentials}, correct key is {api_key.strip()}" + ) + if credentials.credentials != api_key.strip(): + raise HTTPException(status_code=403, detail="Incorrect API Key") + return credentials + + +@app.get("/favicon.ico", include_in_schema=False) +async def favicon(): + return FileResponse("favicon.ico") + + +@app.get("/api/v1/{path:path}") +async def deprecated(): + raise HTTPException(status_code=410, detail="/api/v1 is now deprecated, use v2") + + +@app.get("/", response_class=HTMLResponse) +async def read_root(request: Request): + index_config = { + "title": os.environ.get("TITLE", "Qubed Catalogue Browser"), + } + + return templates.TemplateResponse(request, "landing.html", index_config) + + +@app.get("/browse", response_class=HTMLResponse) +async def browse_catalogue(request: Request): + index_config = { + "api_url": os.environ.get("API_URL", "/api/v2/"), + "title": os.environ.get("TITLE", "Qubed Catalogue Browser"), + "message": "", + "last_database_update": "", + } + + return templates.TemplateResponse(request, "index.html", index_config) + + +@app.get("/api/v2/get/") +async def get( + request: dict[str, str | list[str]] = Depends(parse_request), +): + return qube.to_json() + + +@app.post("/api/v2/union/") +async def union( + credentials: HTTPAuthorizationCredentials = Depends(validate_api_key), + body_json=Depends(get_body_json), +): + global qube + # body_json is a parsed dict; pass a JSON string to the Rust binding + qube = qube | PyQube.from_arena_json(json.dumps(body_json)) + return qube.to_json() + + +@app.post("/api/v2/polytope/query") +async def query_polytope( + body_json=Depends(get_body_json), +): + """ + Query the Destination Earth Polytope data extraction service with MARS requests. + Expects a JSON body with: + - 'requests': array of MARS request objects + - 'credentials': object with 'user_email' and 'user_key' fields + + Connects to: polytope.lumi.apps.dte.destination-earth.eu + Collection: destination-earth + """ + try: + import earthkit.data + except ImportError: + raise HTTPException( + status_code=500, + detail="earthkit.data is not installed. Please install it with 'pip install earthkit-data'", + ) + + requests = body_json.get("requests", []) + if not requests: + raise HTTPException(status_code=400, detail="No requests provided") + + # Get credentials from request body + credentials = body_json.get("credentials", {}) + user_email = credentials.get("user_email") + user_key = credentials.get("user_key") + + if not user_email or not user_key: + raise HTTPException( + status_code=400, + detail="Credentials required: provide user_email and user_key", + ) + + # Prepare kwargs for polytope connection + polytope_kwargs = { + "stream": False, + "address": "polytope.lumi.apps.dte.destination-earth.eu", + "user_email": user_email, + "user_key": user_key, + } + + logger.info(f"Querying Polytope with user email: {user_email}") + + results = [] + successful = 0 + failed = 0 + + for idx, mars_request in enumerate(requests): + try: + logger.info(f"Querying Polytope for request {idx + 1}/{len(requests)}") + logger.debug(f"Request: {mars_request}") + + # Query Polytope service + ds = earthkit.data.from_source( + "polytope", "destination-earth", mars_request, **polytope_kwargs + ) + + # Get JSON representation of the data + try: + ds_json = ds._json() + logger.info(f"Successfully extracted JSON from request {idx + 1}") + except Exception as json_error: + logger.warning( + f"Could not extract JSON from request {idx + 1}: {json_error}" + ) + ds_json = None + + # Get some basic info about the result + data_info = ( + f"Retrieved {len(ds)} fields" + if hasattr(ds, "__len__") + else "Data retrieved" + ) + + result_entry = { + "success": True, + "request_index": idx, + "message": data_info, + "data_size": str(len(ds)) if hasattr(ds, "__len__") else None, + "mars_request": mars_request, + } + + # Add JSON data if available + if ds_json is not None: + result_entry["json_data"] = ds_json + + results.append(result_entry) + successful += 1 + logger.info(f"Request {idx + 1} successful: {data_info}") + + except Exception as e: + error_msg = str(e) + logger.error(f"Request {idx + 1} failed: {error_msg}") + results.append( + { + "success": False, + "request_index": idx, + "error": error_msg, + "mars_request": mars_request, + } + ) + failed += 1 + + return { + "total": len(requests), + "successful": successful, + "failed": failed, + "results": results, + } + + +def follow_query(request: dict[str, str | list[str]], qube: PyQube): + # TODO: implement a selection mode that only shows the pruned tree with the selected request keys + rel_qube = qube.select(request, None, None) + print("WHAT IS THE REQUEST HERE??") + print(request) + print("WHAT IS THE REL_QUBE HERE??") + print(rel_qube.to_ascii()) + print("WHAT WAS THE ORIGINAL QUBE HERE??") + print(qube.to_ascii()) + + # full_axes = rel_qube.axes_info() + full_axes = rel_qube.all_unique_dim_coords() + + seen_keys = list(request.keys()) + + dataset_key_ordering = None + + # Also compute the selected tree just to the point where our selection ends + s = qube.select(request, "follow_selection", None) + s.compress() + # print("WHAT IS THE QUBE HERE") + # print("LOOK NOW HERE") + + # print(s.to_ascii()) + + if seen_keys and "dataset" in seen_keys: + if ( + not isinstance(request["dataset"], list) + and request["dataset"] in dataset_key_orders.keys() + ): + dataset_key_ordering = dataset_key_orders[request["dataset"]] + elif isinstance(request["dataset"], list) and len(request["dataset"]) == 1: + dataset_key_ordering = dataset_key_orders[request["dataset"][0]] + else: + dataset_key_ordering = dataset_key_orders["default"] + + if dataset_key_ordering is None: + available_keys = {node.key for _, node in s.leaf_nodes()} + else: + available_keys = [ + key for key in dataset_key_ordering if key in list(full_axes.keys()) + ] + + frontier_keys = next((x for x in available_keys if x not in seen_keys), []) + + return_axes = [] + for key, info in full_axes.items(): + return_axes_key = { + "key": key, + # "dtype": list(info.dtypes)[0], + "on_frontier": (key in frontier_keys) and (key not in seen_keys), + } + # print("WHAT IS INFO HERE") + # print(info) + # print(full_axes) + if isinstance(list(info)[0], str): + try: + int(list(info)[0]) + sorted_vals = sorted(info, key=int) + except ValueError: + sorted_vals = sorted(info) + else: + sorted_vals = sorted(info) + return_axes_key["values"] = sorted_vals + return_axes.append(return_axes_key) + + return s, return_axes + + +@app.get("/api/v2/select/") +async def select( + request: Mapping[str, str | list[str]] = Depends(parse_request), +): + return qube.select(request).to_json() + + +@app.get("/api/v2/query") +async def query( + request: dict[str, str | list[str]] = Depends(parse_request), +): + _, paths = follow_query(request, qube) + return paths + + +@app.get("/api/v2/basicstac/{filters:path}") +async def basic_stac(filters: str): + pairs = filters.strip("/").split("/") + request = dict(p.split("=") for p in pairs if "=" in p) + + q, _ = follow_query(request, qube) + + def make_link(child_request): + """Take a MARS Key and information about which paths matched up to this point and use it to make a STAC Link""" + kvs = [f"{key}={value}" for key, value in child_request.items()] + href = f"/api/v2/basicstac/{'/'.join(kvs)}" + last_key, last_value = list(child_request.items())[-1] + + return { + "title": f"{last_key}={last_value}", + "href": href, + "rel": "child", + "type": "application/json", + } + + # Format the response as a STAC collection + (this_key, this_value), *_ = ( + list(request.items())[-1] if request else ("root", "root"), + None, + ) + key_info = mars_language.get(this_key, {}) + try: + values_info = dict(key_info.get("values", {})) + value_info = values_info.get( + this_value, f"No info found for value `{this_value}` found." + ) + except ValueError: + value_info = f"No info found for value `{this_value}` found." + + if this_key == "root": + value_info = "The root node" + # key_desc = key_info.get( + # "description", f"No description for `key` {this_key} found." + # ) + logger.info(f"{this_key}, {this_value}") + stac_collection = { + "type": "Catalog", + "stac_version": "1.0.0", + "id": "root" + if not request + else "/".join(f"{k}={v}" for k, v in request.items()), + "title": f"{this_key}={this_value}", + "description": value_info, + "links": [make_link(leaf) for leaf in q.leaves()], + } + + return stac_collection + + +def make_link(axis, request_params): + """Take a MARS Key and information about which paths matched up to this point and use it to make a STAC Link""" + key_name = axis["key"] + + href_template = f"/stac?{request_params}{'&' if request_params else ''}{key_name}={{{key_name}}}" + + values_from_language_yaml = mars_language.get(key_name, {}).get("values", {}) + value_descriptions = { + v: values_from_language_yaml[v] + for v in axis["values"] + if v in values_from_language_yaml + } + + return { + "title": key_name, + "uriTemplate": href_template, + "rel": "child", + "type": "application/json", + "variables": { + key_name: { + # "type": axis["dtype"], + "description": mars_language.get(key_name, {}).get("description", ""), + "enum": axis["values"], + "value_descriptions": value_descriptions, + "on_frontier": axis["on_frontier"], + } + }, + } + + +@app.get("/api/v2/stac/") +async def get_STAC( + request: dict[str, str | list[str]] = Depends(parse_request), +): + q, axes = follow_query(request, qube) + print("WHAT IS THE QUBE HERE") + print(qube) + print(request) + print(q) + + end_of_traversal = not any(a["on_frontier"] for a in axes) + + final_object = [] + + print("ARE WE AT THE END OF THE TRAVERSAL??") + print(end_of_traversal) + if end_of_traversal: + final_object = list(q.to_datacubes()) + print("WHAT IS THE FINAL OBJECT??") + print(final_object) + + kvs = [ + f"{k}={','.join(v)}" if isinstance(v, list) else f"{k}={v}" + for k, v in request.items() + ] + request_params = "&".join(kvs) + + # Get all possible keys from axes to ensure complete descriptions + all_axes_keys = {axis["key"] for axis in axes} + request_keys = set(request.keys()) + all_description_keys = all_axes_keys | request_keys + + descriptions = { + key: { + "key": key, + "values": values if isinstance(values, list) else [values] if isinstance(values, str) else [], + "description": mars_language.get(key, {}).get("description", ""), + "value_descriptions": mars_language.get(key, {}).get("values", {}), + } + for key, values in request.items() + } + + # Add descriptions for axes keys that might not be in request + for key in all_description_keys: + if key not in descriptions: + descriptions[key] = { + "key": key, + "values": [], + "description": mars_language.get(key, {}).get("description", ""), + "value_descriptions": mars_language.get(key, {}).get("values", {}), + } + + # Format the response as a STAC collection + stac_collection = { + "type": "Catalog", + "stac_version": "1.0.0", + "id": "root" if not request else "/stac?" + request_params, + "description": "STAC collection representing potential children of this request", + "links": [make_link(a, request_params) for a in axes], + "final_object": final_object, + "debug": { + "descriptions": descriptions, + # "qube": node_tree_to_html( + # q, + # collapse=True, + # depth=10, + # include_css=False, + # include_js=False, + # max_summary_length=200, + # css_id="qube", + # ), + "qube": q.to_ascii(), + }, + } + + return stac_collection + + +# Pydantic models for notebook execution +class ExecuteRequest(BaseModel): + code: str + data: dict | None = None + + +class InstallPackageRequest(BaseModel): + packages: str # Space or comma-separated package names + + +@app.post("/api/v2/execute") +async def execute_code(request: ExecuteRequest): + """ + Execute Python code on the server with optional data context. + Allows installation of any Python package, including C extensions. + Captures matplotlib figures and returns them as base64 images. + """ + try: + # Create a namespace with the data available + namespace = {} + if request.data: + namespace["polytope_data"] = request.data + + # Capture stdout and stderr + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + + images = [] + + try: + # Set matplotlib to non-interactive backend before execution + try: + import matplotlib + + matplotlib.use("Agg") # Non-interactive backend + except ImportError: + pass + + # Execute the code + exec(request.code, namespace) + + # Capture matplotlib figures if any were created + try: + import matplotlib.pyplot as plt + + figures = [plt.figure(num) for num in plt.get_fignums()] + + for fig in figures: + # Save figure to bytes + buf = BytesIO() + fig.savefig(buf, format="png", dpi=150, bbox_inches="tight") + buf.seek(0) + + # Convert to base64 + img_base64 = base64.b64encode(buf.read()).decode("utf-8") + images.append(img_base64) + + # Close the figure + plt.close(fig) + except ImportError: + # matplotlib not available, skip figure capture + pass + except Exception as fig_error: + # Log but don't fail if figure capture fails + sys.stderr.write(f"\nWarning: Could not capture figures: {fig_error}\n") + + # Get the output + stdout_output = sys.stdout.getvalue() + stderr_output = sys.stderr.getvalue() + + return JSONResponse( + { + "success": True, + "stdout": stdout_output, + "stderr": stderr_output, + "images": images, + } + ) + finally: + # Restore stdout and stderr + sys.stdout = old_stdout + sys.stderr = old_stderr + + except Exception as e: + return JSONResponse( + { + "success": False, + "error": str(e), + "error_type": type(e).__name__, + }, + status_code=400, + ) + + +@app.post("/api/v2/install_packages") +async def install_packages(request: InstallPackageRequest): + """ + Install Python packages using pip in the server environment. + """ + try: + # Split packages by space or comma + packages = [ + pkg.strip() + for pkg in request.packages.replace(",", " ").split() + if pkg.strip() + ] + + if not packages: + return JSONResponse( + { + "success": False, + "error": "No packages specified", + }, + status_code=400, + ) + + results = [] + for package in packages: + try: + # Run pip install + result = subprocess.run( + [sys.executable, "-m", "pip", "install", package], + capture_output=True, + text=True, + timeout=120, # 2 minute timeout per package + ) + + if result.returncode == 0: + results.append( + { + "package": package, + "success": True, + "message": f"Successfully installed {package}", + } + ) + else: + results.append( + { + "package": package, + "success": False, + "error": result.stderr, + } + ) + except subprocess.TimeoutExpired: + results.append( + { + "package": package, + "success": False, + "error": "Installation timed out after 120 seconds", + } + ) + except Exception as e: + results.append( + { + "package": package, + "success": False, + "error": str(e), + } + ) + + all_success = all(r["success"] for r in results) + + return JSONResponse( + { + "success": all_success, + "results": results, + } + ) + + except Exception as e: + return JSONResponse( + { + "success": False, + "error": str(e), + }, + status_code=500, + ) \ No newline at end of file diff --git a/stac_server/run.sh b/stac_server/run.sh new file mode 100644 index 0000000..b3293b6 --- /dev/null +++ b/stac_server/run.sh @@ -0,0 +1,3 @@ +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) +cd "$parent_path" +API_KEY=asdf LOCAL_CACHE=True uv run fastapi dev ./main.py --port 8124 --reload \ No newline at end of file diff --git a/stac_server/run_prod.sh b/stac_server/run_prod.sh new file mode 100644 index 0000000..0ca9a14 --- /dev/null +++ b/stac_server/run_prod.sh @@ -0,0 +1,3 @@ +parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) +cd "$parent_path" +sudo LOCAL_CACHE=True ../../.venv/bin/fastapi dev ./main.py --port 80 --host=0.0.0.0 --reload \ No newline at end of file diff --git a/stac_server/static/app.js b/stac_server/static/app.js new file mode 100644 index 0000000..c151f8a --- /dev/null +++ b/stac_server/static/app.js @@ -0,0 +1,1370 @@ +function toHTML(string) { + return document.createRange().createContextualFragment(string) + .firstElementChild; +} + +// Take the query string and stick it on the API URL +function getSTACUrlFromQuery() { + const params = new URLSearchParams(window.location.search); + + let api_url; + // get current window url and remove path part + if (window.API_URL.startsWith("http")) { + // Absolute URL: Use it directly + api_url = new URL(window.API_URL); + } else { + // Relative URL: Combine with the current window's location + api_url = new URL(window.location.href); + api_url.pathname = window.API_URL; + } + + for (const [key, value] of params.entries()) { + api_url.searchParams.set(key, value); + } + + console.log(api_url.toString()); + return api_url.toString(); +} + +function get_request_from_url() { + // Extract the query params in order and split any with a , delimiter + // request is an ordered array of [key, [value1, value2, value3, ...]] + const url = new URL(window.location.href); + const params = new URLSearchParams(url.search); + const request = []; + for (const [key, value] of params.entries()) { + request.push([key, value.split(",")]); + } + return request; +} + +function make_url_from_request(request) { + const url = new URL(window.location.href); + url.search = ""; // Clear existing params + const params = new URLSearchParams(); + + for (const [key, values] of request) { + params.set(key, values.join(",")); + } + url.search = params.toString(); + + return url.toString().replace(/%2C/g, ","); +} + +function goToPreviousUrl() { + let request = get_request_from_url(); + request.pop(); + console.log("Request:", request); + const url = make_url_from_request(request); + console.log("URL:", url); + window.location.href = make_url_from_request(request); +} + +// Function to generate a new STAC URL based on current selection +function goToNextUrl() { + const request = get_request_from_url(); + + // Get the currently selected key = value,value2,value3 pairs + const items = Array.from(document.querySelectorAll("div#items > div")); + + let any_new_keys = false; + const new_keys = items.map((item) => { + const key = item.dataset.key; + const key_type = item.dataset.keyType; + let values = []; + + const enum_checkboxes = item.querySelectorAll( + "input[type='checkbox']:checked" + ); + if (enum_checkboxes.length > 0) { + values.push( + ...Array.from(enum_checkboxes).map((checkbox) => checkbox.value) + ); + } + + // Get text inputs but exclude the filter input + const any = item.querySelector("input[type='text']:not(.filter-input)"); + if (any && any.value !== "") { + values.push(any.value); + } + + // Keep track of whether any new keys are selected + if (values.length > 0) { + any_new_keys = true; + } + + console.log(`Checking ${key} ${key_type} and found ${values}`); + return { key, values }; + }); + + // if not new keys are selected, do nothing + if (!any_new_keys) { + return; + } + + // Update the request with the new keys + for (const { key, values } of new_keys) { + if (values.length == 0) continue; + + // Find the index of the existing key in the request array + const existingIndex = request.findIndex( + ([existingKey, existingValues]) => existingKey === key + ); + + if (existingIndex !== -1) { + // If the key already exists, + // and the values aren't already in there, + // append the values + request[existingIndex][1] = [...request[existingIndex][1], ...values]; + } else { + // If the key doesn't exist, add a new entry + request.push([key, values]); + } + } + + const url = make_url_from_request(request); + window.location.href = url; +} + +async function createCatalogItem(link, itemsContainer) { + if (Object.entries(link.variables)[0][1].on_frontier === false) { + return; + } + + const itemDiv = document.createElement("div"); + itemDiv.className = "item loading"; + itemDiv.textContent = "Loading..."; + itemsContainer.appendChild(itemDiv); + + try { + // Update the item div with real content + itemDiv.classList.remove("loading"); + + const variables = link["variables"]; + const key = Object.keys(variables)[0]; + const variable = variables[key]; + + // add data-key attribute to the itemDiv + itemDiv.dataset.key = link.title; + itemDiv.dataset.keyType = variable.type; + + function capitalize(val) { + return String(val).charAt(0).toUpperCase() + String(val).slice(1); + } + + itemDiv.innerHTML = ` +

${capitalize(link.title) || "No title available" + }

+ +

Key Type: ${itemDiv.dataset.keyType || "Unknown"}

+

${variable.description ? variable.description.slice(0, 100) : "" + }

+ `; + + if (key === "date" && variable.enum && variable.enum.length > 30) { + console.log("Date picker enabled"); + console.log("First few dates:", variable.enum.slice(0, 10)); + + // Create a unique ID for this date picker + const pickerId = `date-picker-${link.title}`; + const hiddenInputId = `date-input-${link.title}`; + + itemDiv.appendChild(toHTML(``)); + itemDiv.appendChild(toHTML(``)); + itemDiv.appendChild(toHTML(`
💡 Click a date twice to select it individually, or click two different dates to select a range.
`)); + + let dates = variable.enum.map(d => String(d)); + itemDiv.querySelector("button.all").style.display = "none"; + + // Create a set for fast lookup (normalize to YYYY-MM-DD format) + const availableDatesSet = new Set(dates); + console.log("Available dates set size:", availableDatesSet.size); + + // Parse dates from enum to get min and max dates + let parsedDates = dates.map(d => { + // Handle both formats: "YYYY-MM-DD" or "YYYYMMDD" + const dateStr = String(d); + if (dateStr.includes('-')) { + return new Date(dateStr); + } else { + const year = parseInt(dateStr.substring(0, 4)); + const month = parseInt(dateStr.substring(4, 6)) - 1; + const day = parseInt(dateStr.substring(6, 8)); + return new Date(year, month, day); + } + }); + + let minDate = new Date(Math.min(...parsedDates)); + let maxDate = new Date(Math.max(...parsedDates)); + + console.log("Date range:", minDate.toISOString(), "to", maxDate.toISOString()); + + // Track selected dates manually for better control + let manuallySelectedDates = new Set(); + let lastClickedDate = null; + + let picker = new AirDatepicker(`#${pickerId}`, { + position: "bottom center", + inline: true, + locale: exports.default, + multipleDates: true, + multipleDatesSeparator: ",", + minDate: minDate, + maxDate: maxDate, + onSelect({ date, formattedDate, datepicker }) { + // Prevent default behavior - we'll handle selection manually + }, + onRenderCell({ date, cellType }) { + if (cellType === "day") { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + // Check in the format that matches the input + let dateStr; + if (dates[0].includes('-')) { + dateStr = `${year}-${month}-${day}`; + } else { + dateStr = `${year}${month}${day}`; + } + const hasData = availableDatesSet.has(dateStr); + + return { + classes: hasData ? "has-data" : "", + disabled: !hasData, + }; + } + return {}; + }, + }); + + // Custom click handler for date cells + const hintElement = document.getElementById(`${pickerId}-hint`); + + // Wait for datepicker to render, then attach event handler + setTimeout(() => { + const datepickerContainer = document.querySelector(`#${pickerId}`).parentElement.querySelector('.air-datepicker'); + + if (datepickerContainer) { + datepickerContainer.addEventListener('click', (e) => { + const cell = e.target.closest('.air-datepicker-cell.-day-'); + if (!cell || cell.classList.contains('-disabled-')) return; + + // Get the date from the cell's data attributes + const dayNumber = cell.getAttribute('data-date'); + const monthNumber = cell.getAttribute('data-month'); + const yearNumber = cell.getAttribute('data-year'); + + if (!dayNumber || !monthNumber || !yearNumber) return; + + const cellDate = new Date(parseInt(yearNumber), parseInt(monthNumber), parseInt(dayNumber)); + + const formatDate = (d) => { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + if (dates[0].includes('-')) { + return `${year}-${month}-${day}`; + } else { + return `${year}${month}${day}`; + } + }; + + const clickedDateStr = formatDate(cellDate); + + // Check if this date has data + if (!availableDatesSet.has(clickedDateStr)) return; + + const isSameAsPrevious = lastClickedDate && + cellDate.getTime() === lastClickedDate.getTime(); + + if (isSameAsPrevious) { + // Clicking same date twice - toggle individual date + if (manuallySelectedDates.has(clickedDateStr)) { + manuallySelectedDates.delete(clickedDateStr); + console.log("Removed date:", clickedDateStr); + if (hintElement) hintElement.textContent = `🗑️ Removed ${clickedDateStr}. Total: ${manuallySelectedDates.size} dates selected.`; + } else { + manuallySelectedDates.add(clickedDateStr); + console.log("Added single date:", clickedDateStr); + if (hintElement) hintElement.textContent = `✅ Added ${clickedDateStr}. Total: ${manuallySelectedDates.size} dates selected.`; + } + lastClickedDate = null; // Reset for next selection + } else if (lastClickedDate) { + // Two different dates clicked - create a range + const [startDate, endDate] = [lastClickedDate, cellDate].sort((a, b) => a - b); + + console.log("Creating range from", formatDate(startDate), "to", formatDate(endDate)); + + let currentDate = new Date(startDate); + const rangeEnd = new Date(endDate); + let rangeCount = 0; + + while (currentDate <= rangeEnd) { + const dateStr = formatDate(currentDate); + if (availableDatesSet.has(dateStr)) { + manuallySelectedDates.add(dateStr); + rangeCount++; + } + currentDate.setDate(currentDate.getDate() + 1); + } + + console.log("Range added, total dates selected:", manuallySelectedDates.size); + if (hintElement) hintElement.textContent = `📅 Added range: ${rangeCount} dates. Total: ${manuallySelectedDates.size} dates selected.`; + lastClickedDate = null; // Reset for next selection + } else { + // First click of a potential range + lastClickedDate = cellDate; + console.log("First date clicked for range:", clickedDateStr); + if (hintElement) hintElement.textContent = `🎯 First date selected: ${clickedDateStr}. Click another date to create a range, or click this date again to select it individually.`; + return; // Don't update selection yet, wait for second click + } + + // Update the visual selection in datepicker + const selectedDateObjects = Array.from(manuallySelectedDates).map(dateStr => { + if (dateStr.includes('-')) { + return new Date(dateStr); + } else { + const year = parseInt(dateStr.substring(0, 4)); + const month = parseInt(dateStr.substring(4, 6)) - 1; + const day = parseInt(dateStr.substring(6, 8)); + return new Date(year, month, day); + } + }); + + picker.selectDate(selectedDateObjects); + + // Update hidden input + const hiddenInput = document.getElementById(hiddenInputId); + hiddenInput.value = Array.from(manuallySelectedDates).join(','); + console.log("Total selected dates:", manuallySelectedDates.size); + console.log("Selected dates:", hiddenInput.value.split(',').slice(0, 10).join(', '), '...'); + }); + } + }, 100); + + console.log("Datepicker initialized"); + } else if (variable.enum && variable.enum.length > 0) { + // Add filter input at the top if there are many options + if (variable.enum.length > 5) { + const filterWrapper = toHTML(` +
+ +
+ `); + itemDiv.appendChild(filterWrapper); + } + + // Add checkbox list + const checkbox_list = renderCheckboxList(link); + itemDiv.appendChild(checkbox_list); + + // Add filter functionality if filter exists + if (variable.enum.length > 5) { + const filterInput = itemDiv.querySelector(`#filter-${link.title}`); + if (filterInput) { + filterInput.addEventListener('input', (e) => { + const filterText = e.target.value.toLowerCase(); + const checkboxRows = checkbox_list.querySelectorAll('.checkbox-row'); + + checkboxRows.forEach(row => { + const label = row.querySelector('label'); + const code = row.querySelector('label.code code'); + const labelText = label ? label.textContent.toLowerCase() : ''; + const codeText = code ? code.textContent.toLowerCase() : ''; + + if (labelText.includes(filterText) || codeText.includes(filterText)) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + }); + }); + } + } + + itemDiv.querySelector("button.all").addEventListener("click", () => { + let new_state; + if (checkbox_list.hasAttribute("disabled")) { + checkbox_list.removeAttribute("disabled"); + itemDiv.querySelectorAll("input[type='checkbox']").forEach((c) => { + c.removeAttribute("checked"); + c.removeAttribute("disabled"); + }); + } else { + checkbox_list.setAttribute("disabled", ""); + itemDiv.querySelectorAll("input[type='checkbox']").forEach((c) => { + c.setAttribute("checked", "true"); + c.setAttribute("disabled", ""); + }); + } + }); + } else { + const any = toHTML(``); + itemDiv.appendChild(any); + } + } catch (error) { + console.error("Error loading item data:", error); + itemDiv.innerHTML = `

Error loading item details: ${error}

`; + } +} + +function renderCheckboxList(link) { + const variables = link["variables"]; + const key = Object.keys(variables)[0]; + const variable = variables[key]; + const value_descriptions = variable.value_descriptions || {}; + + function renderCheckbox(key, value, desc) { + const id = `${key}=${value}`; + let more_info = desc.url + ? ` ?` + : ""; + + let human_label, code_label; + if (desc.name) { + human_label = ``; + code_label = ``; + } else { + human_label = ``; + code_label = ``; + } + + // Pre-check the box if there's only one option + const checked = variable.enum.length === 1 ? "checked" : ""; + + const checkbox = ``; + + return ` +
+ ${checkbox} + ${human_label} + ${code_label} +
+ `; + } + + const checkboxes = variable.enum + .map((value) => renderCheckbox(key, value, value_descriptions[value] || {})) + .join(""); + + return toHTML(`
${checkboxes}
`); +} + +// Render catalog items in the sidebar +function renderCatalogItems(links) { + const itemsContainer = document.getElementById("items"); + itemsContainer.innerHTML = ""; // Clear previous items + + console.log("Number of Links:", links); + const children = links.filter( + (link) => link.rel === "child" || link.rel === "items" + ); + console.log("Number of Children:", children.length); + + children.forEach((link) => { + createCatalogItem(link, itemsContainer); + }); +} + +function renderRequestBreakdown(request, descriptions) { + const container = document.getElementById("request-breakdown"); + const format_value = (key, value) => { + return `"${value}"`; + }; + + const format_values = (key, values) => { + if (values.length === 1) { + return format_value(key, values[0]); + } + return `[${values.map((v) => format_value(key, v)).join(`, `)}]`; + }; + + let html = + `{\n` + + request + .map( + ([key, values]) => + ` "${key}": ${format_values(key, values)},` + ) + .join("\n") + + `\n}`; + container.innerHTML = html; +} + +function renderMARSRequest(request, descriptions) { + const container = document.getElementById("final_req"); + + console.log("=== renderMARSRequest START ==="); + console.log("request:", request); + console.log("request type:", typeof request); + console.log("is array?", Array.isArray(request)); + console.log("descriptions:", descriptions); + + if (!Array.isArray(request)) { + console.error("ERROR: request is not an array!", request); + container.innerHTML = `

ERROR: request is not an array. Got: ${typeof request}

${JSON.stringify(request, null, 2)}
`; + return; + } + + if (request.length === 0) { + console.warn("WARNING: request array is empty"); + container.innerHTML = `

No MARS requests generated

`; + return; + } + + console.log("First request item:", request[0]); + console.log("First item entries:", Object.entries(request[0])); + + const format_value = (key, value) => { + // Convert value to string if it's not already + const stringValue = String(value); + const desc = descriptions?.[key]?.["value_descriptions"]?.[stringValue]; + return `"${stringValue}"`; + }; + + const format_values = (key, values) => { + console.log(`format_values called: key=${key}, values=${values}, type=${typeof values}`); + + // Handle different types of values + if (values === null || values === undefined) { + return `null`; + } + + // Check if it's an array-like structure + let valueArray; + if (Array.isArray(values)) { + console.log(` -> is array, length ${values.length}`); + valueArray = values; + } else if (typeof values === 'object') { + console.log(` -> is object, stringify`); + // If it's an object, just JSON stringify it + return `${JSON.stringify(values)}`; + } else { + console.log(` -> is scalar (${typeof values}), wrapping in array`); + // Scalar value - wrap in array + valueArray = [values]; + } + + // If array is empty, return empty array repr + if (valueArray.length === 0) { + return `[]`; + } + + // If array has single element, just return that + if (valueArray.length === 1) { + const result = format_value(key, valueArray[0]); + console.log(` -> returning single value: ${result}`); + return result; + } + + // Multiple values - return as array + return `[${valueArray.map((v) => format_value(key, v)).join(`, `)}]`; + }; + + // Add feature object to each request if polygon is selected + const requestsWithFeature = selectedPolygon ? request.map(obj => ({ + ...obj, + feature: { + type: "polygon", + shape: selectedPolygon + } + })) : request; + + // Store for copying + currentMARSRequests = requestsWithFeature; + + try { + let html = + `[\n` + + requestsWithFeature + .map((obj, objIdx) => { + console.log(`Rendering object ${objIdx}:`, obj); + const entries = Object.entries(obj); + return ` {\n` + + entries + .map( + ([key, values], idx) => { + const isLast = idx === entries.length - 1; + if (key === "feature" && values && typeof values === "object" && values.type === "polygon") { + // Format the feature object specially + const shapeStr = JSON.stringify(values.shape, null, 0); + return ` "feature": {\n` + + ` "type": "${values.type}",\n` + + ` "shape": ${shapeStr}\n` + + ` }${isLast ? '' : ','}`; + } + const formattedValue = format_values(key, values); + return ` "${key}": ${formattedValue}${isLast ? '' : ','}`; + } + ) + .join("\n") + + `\n }`; + }) + .join(`,\n`) + + `\n]`; + container.innerHTML = html; + console.log("=== renderMARSRequest COMPLETED SUCCESSFULLY ==="); + } catch (error) { + console.error("=== ERROR in renderMARSRequest ===", error); + console.error("Stack trace:", error.stack); + const container = document.getElementById("final_req"); + container.innerHTML = `

Error rendering MARS requests: ${error.message}

${JSON.stringify(request, null, 2)}
${error.stack}
`; + } +} + +function renderRawSTACResponse(catalog) { + const itemDetails = document.getElementById("raw-stac"); + // create new object without debug key + let just_stac = Object.assign({}, catalog); + delete just_stac.debug; + itemDetails.textContent = JSON.stringify(just_stac, null, 2); + + const debug_container = document.getElementById("debug"); + debug_container.textContent = JSON.stringify(catalog.debug, null, 2); + + const qube_container = document.getElementById("qube"); + qube_container.innerHTML = catalog.debug.qube; +} + +// Fetch STAC catalog and display items +async function fetchCatalog(request, stacUrl) { + try { + const response = await fetch(stacUrl); + const catalog = await response.json(); + + console.log("Fetched catalog:", catalog); + + // Check if we've reached the end of the catalogue (final_object has data) + const hasReachedEnd = catalog.final_object && catalog.final_object.length > 0; + + console.log("Has reached end:", hasReachedEnd, "final_object:", catalog.final_object); + + // Get section elements + const currentSelectionSection = document.getElementById("current-selection-section"); + const marsRequestsSection = document.getElementById("mars-requests-section"); + const nextButton = document.getElementById("next-btn"); + + if (hasReachedEnd) { + // At the end: show MARS requests, hide current selection and next button + console.log("At end of traversal, rendering MARS requests"); + currentSelectionSection.style.display = "none"; + marsRequestsSection.style.display = "block"; + nextButton.style.display = "none"; + catalogCache = catalog; // Store catalog for re-rendering with features + console.log("Descriptions available:", catalog.debug.descriptions); + renderMARSRequest(catalog.final_object, catalog.debug.descriptions); + } else { + // Not at the end: show current selection, hide MARS requests, show next button + currentSelectionSection.style.display = "block"; + marsRequestsSection.style.display = "none"; + nextButton.style.display = "flex"; + renderRequestBreakdown(request, catalog.debug.descriptions); + } + + // Show the raw STAC in the sidebar + renderRawSTACResponse(catalog); + + // Render the items from the catalog + if (catalog.links) { + console.log("Fetched STAC catalog:", stacUrl, catalog.links); + renderCatalogItems(catalog.links); + } + + // Show region selection at the end of catalogue + const regionSelection = document.getElementById("region-selection"); + const catalogList = document.getElementById("catalog-list"); + const polytopeSection = document.getElementById("polytope-section"); + if (hasReachedEnd) { + regionSelection.style.display = "block"; + catalogList.classList.add("region-active"); + if (polytopeSection) polytopeSection.style.display = "block"; + } else { + regionSelection.style.display = "none"; + catalogList.classList.remove("region-active"); + if (polytopeSection) polytopeSection.style.display = "none"; + } + + // Highlight the request and raw STAC + hljs.highlightElement(document.getElementById("raw-stac")); + hljs.highlightElement(document.getElementById("debug")); + hljs.highlightElement(document.getElementById("example-python")); + } catch (error) { + console.error("Error fetching STAC catalog:", error); + } +} + +// Initialize the viewer by fetching the STAC catalog +function initializeViewer() { + const stacUrl = getSTACUrlFromQuery(); + const request = get_request_from_url(); + + if (stacUrl) { + console.log("Fetching STAC catalog from query string URL:", stacUrl); + fetchCatalog(request, stacUrl); + } else { + console.error("No STAC URL provided in the query string."); + } + + // Add event listener for the "Generate STAC URL" button + const generateUrlBtn = document.getElementById("next-btn"); + generateUrlBtn.addEventListener("click", goToNextUrl); + + const previousUrlBtn = document.getElementById("previous-btn"); + previousUrlBtn.addEventListener("click", goToPreviousUrl); + + // Add event listener for the "Raw STAC" button + const stacAnchor = document.getElementById("stac-anchor"); + stacAnchor.href = getSTACUrlFromQuery(); +} + +// Copy MARS requests to clipboard +function copyMARSRequests() { + const copyBtn = document.getElementById("copy-mars-btn"); + const btnText = copyBtn.querySelector(".copy-btn-text"); + + // Use the stored MARS requests with feature if available + const jsonContent = JSON.stringify(currentMARSRequests, null, 2); + + navigator.clipboard.writeText(jsonContent).then(() => { + // Change button text temporarily + btnText.textContent = "Copied!"; + copyBtn.classList.add("copied"); + + // Reset after 2 seconds + setTimeout(() => { + btnText.textContent = "Copy"; + copyBtn.classList.remove("copied"); + }, 2000); + }).catch(err => { + console.error("Failed to copy:", err); + btnText.textContent = "Failed"; + setTimeout(() => { + btnText.textContent = "Copy"; + }, 2000); + }); +} + +// Download JSON data as a file +function downloadJSON(data, filename) { + const jsonString = JSON.stringify(data, null, 2); + const blob = new Blob([jsonString], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = filename; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + URL.revokeObjectURL(url); +} + +// ============================================ +// Geographic Region Selection with Map +// ============================================ + +let regionMap = null; +let drawnItems = null; +let selectedPolygon = null; +let currentMARSRequests = []; // Store current MARS requests for copying +let catalogCache = null; // Store catalog for re-rendering when polygon changes + +function initializeRegionMap() { + const mapElement = document.getElementById('map'); + if (!mapElement || regionMap) return; + + // Initialize map centered on the world + regionMap = L.map('map').setView([20, 0], 2); + + // Add OpenStreetMap tile layer + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors', + maxZoom: 18, + }).addTo(regionMap); + + // Initialize the FeatureGroup to store editable layers + drawnItems = new L.FeatureGroup(); + regionMap.addLayer(drawnItems); + + // Initialize the draw control + const drawControl = new L.Control.Draw({ + position: 'topright', + draw: { + polyline: false, + circle: false, + circlemarker: false, + marker: false, + rectangle: true, + polygon: { + allowIntersection: false, + showArea: true, + shapeOptions: { + color: '#0066cc', + weight: 2, + fillOpacity: 0.2 + } + } + }, + edit: { + featureGroup: drawnItems, + remove: true + } + }); + regionMap.addControl(drawControl); + + // Handle polygon creation + regionMap.on('draw:created', function (e) { + // Clear previous polygons + drawnItems.clearLayers(); + + const layer = e.layer; + drawnItems.addLayer(layer); + + // Get the coordinates + const coordinates = layer.getLatLngs()[0].map(latlng => [ + parseFloat(latlng.lat.toFixed(6)), + parseFloat(latlng.lng.toFixed(6)) + ]); + + // Close the polygon by adding the first point at the end + coordinates.push(coordinates[0]); + + selectedPolygon = coordinates; + displaySelectedRegion(coordinates); + }); + + // Handle polygon edit + regionMap.on('draw:edited', function (e) { + const layers = e.layers; + layers.eachLayer(function (layer) { + const coordinates = layer.getLatLngs()[0].map(latlng => [ + parseFloat(latlng.lat.toFixed(6)), + parseFloat(latlng.lng.toFixed(6)) + ]); + coordinates.push(coordinates[0]); + selectedPolygon = coordinates; + displaySelectedRegion(coordinates); + }); + }); + + // Handle polygon deletion + regionMap.on('draw:deleted', function (e) { + selectedPolygon = null; + document.getElementById('selected-region').style.display = 'none'; + }); + + // Force map to resize properly + setTimeout(() => { + regionMap.invalidateSize(); + }, 100); +} + +function displaySelectedRegion(coordinates) { + const selectedRegionDiv = document.getElementById('selected-region'); + const coordinatesDisplay = document.getElementById('region-coordinates'); + + const regionFeature = { + type: "polygon", + shape: coordinates + }; + + coordinatesDisplay.textContent = JSON.stringify({ feature: regionFeature }, null, 2); + selectedRegionDiv.style.display = 'block'; + + // Re-render MARS requests with the feature appended + if (catalogCache && catalogCache.final_object) { + renderMARSRequest(catalogCache.final_object, catalogCache.debug.descriptions); + } +} + +// Event listeners for region selection +document.addEventListener("DOMContentLoaded", () => { + const enableRegionBtn = document.getElementById('enable-region-btn'); + const skipRegionBtn = document.getElementById('skip-region-btn'); + const clearRegionBtn = document.getElementById('clear-region-btn'); + const mapContainer = document.getElementById('map-container'); + + if (enableRegionBtn) { + enableRegionBtn.addEventListener('click', () => { + mapContainer.style.display = 'block'; + enableRegionBtn.style.display = 'none'; + skipRegionBtn.textContent = 'Continue Without Region'; + initializeRegionMap(); + }); + } + + if (skipRegionBtn) { + skipRegionBtn.addEventListener('click', () => { + // User chose to skip region selection - could proceed to next step + console.log('User skipped region selection'); + // Here you could trigger the next action or inform the user + }); + } + + if (clearRegionBtn) { + clearRegionBtn.addEventListener('click', () => { + if (drawnItems) { + drawnItems.clearLayers(); + } + selectedPolygon = null; + document.getElementById('selected-region').style.display = 'none'; + + // Re-render MARS requests without the feature + if (catalogCache && catalogCache.final_object) { + renderMARSRequest(catalogCache.final_object, catalogCache.debug.descriptions); + } + }); + } +}); + +// ============================================ +// Polytope Query Handler +// ============================================ + +async function queryPolytope() { + const polytopeBtn = document.getElementById('polytope-btn'); + const polytopeBtnText = document.getElementById('polytope-btn-text'); + const polytopeStatus = document.getElementById('polytope-status'); + const polytopeResults = document.getElementById('polytope-results'); + const emailInput = document.getElementById('polytope-email'); + const keyInput = document.getElementById('polytope-key'); + + if (!currentMARSRequests || currentMARSRequests.length === 0) { + polytopeStatus.textContent = 'No MARS requests available to query.'; + polytopeStatus.className = 'polytope-status error'; + polytopeStatus.style.display = 'block'; + return; + } + + // Validate credentials + const email = emailInput.value.trim(); + const apiKey = keyInput.value.trim(); + + if (!email || !apiKey) { + polytopeStatus.textContent = 'Please provide both email and API key to query Polytope.'; + polytopeStatus.className = 'polytope-status error'; + polytopeStatus.style.display = 'block'; + return; + } + + // Disable button and show loading state + polytopeBtn.disabled = true; + polytopeBtnText.textContent = 'Querying...'; + polytopeStatus.textContent = `Submitting ${currentMARSRequests.length} request(s) to Polytope service...`; + polytopeStatus.className = 'polytope-status loading'; + polytopeStatus.style.display = 'block'; + polytopeResults.innerHTML = ''; + polytopeResults.style.display = 'none'; + + try { + const response = await fetch('/api/v2/polytope/query', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + requests: currentMARSRequests, + credentials: { + user_email: email, + user_key: apiKey + } + }), + }); + + const result = await response.json(); + + if (!response.ok) { + throw new Error(result.detail || 'Failed to query Polytope service'); + } + + // Show success message + polytopeStatus.textContent = `Successfully submitted ${result.total} request(s). ${result.successful} succeeded, ${result.failed} failed.`; + polytopeStatus.className = 'polytope-status success'; + + // Store results globally for notebook access + window.polytopeResults = result.results; + + // Display detailed results + if (result.results && result.results.length > 0) { + polytopeResults.innerHTML = result.results.map((res, idx) => ` +
+
+ Request ${idx + 1}: ${res.success ? '✓ Success' : '✗ Failed'} +
+
+ ${res.success + ? `Data retrieved successfully${res.data_size ? ` (${res.data_size})` : ''}` + : `Error: ${res.error || 'Unknown error'}` + } +
+ ${res.message ? `
${res.message}
` : ''} + ${res.success && res.json_data ? ` +
+ + +
+ ` : ''} +
+ `).join(''); + polytopeResults.style.display = 'block'; + + // Add event listeners to download buttons + document.querySelectorAll('.download-json-btn').forEach(btn => { + btn.addEventListener('click', (e) => { + const idx = parseInt(e.target.getAttribute('data-request-idx')); + const resultData = result.results[idx]; + if (resultData && resultData.json_data) { + downloadJSON(resultData.json_data, `polytope_request_${idx + 1}.json`); + } + }); + }); + + // Add event listeners to notebook buttons + document.querySelectorAll('.open-notebook-btn').forEach(btn => { + btn.addEventListener('click', (e) => { + const idx = parseInt(e.target.closest('.open-notebook-btn').getAttribute('data-request-idx')); + const resultData = result.results[idx]; + if (resultData && resultData.json_data) { + openInNotebook(resultData.json_data, idx); + } + }); + }); + } + + polytopeBtnText.textContent = 'Query Complete'; + } catch (error) { + console.error('Polytope query error:', error); + polytopeStatus.textContent = `Error: ${error.message}`; + polytopeStatus.className = 'polytope-status error'; + } finally { + // Re-enable button after a delay + setTimeout(() => { + polytopeBtn.disabled = false; + polytopeBtnText.textContent = 'Query Polytope Service'; + }, 2000); + } +} + +// ============================================ +// JupyterLite Notebook Integration +// ============================================ + +let codeEditor = null; +let currentNotebookData = null; + +// Server-side execution - no Pyodide initialization needed +// Python code runs on the server with full package support + +function initCodeEditor() { + if (codeEditor) { + return codeEditor; + } + + const editorElement = document.getElementById('code-editor'); + codeEditor = CodeMirror(editorElement, { + value: getDefaultNotebookCode(), + mode: 'python', + theme: 'monokai', + lineNumbers: true, + indentUnit: 4, + tabSize: 4, + indentWithTabs: false, + lineWrapping: true, + }); + + return codeEditor; +} + +function getDefaultNotebookCode() { + return `# Polytope Data Visualization - Request 1 +# The data is available in the 'polytope_data' variable + +import json +import numpy as np +import covjsonkit +import earthkit.plots + +from covjsonkit.api import Covjsonkit + +decoder = Covjsonkit().decode(polytope_data) + +ds = decoder.to_xarray() + +print(ds) + +# Handle missing/masked values +if '2t' in ds: + data = ds['2t'] + # Replace NaN with a fill value or drop them + data_filled = data.where(~np.isnan(data), drop=True) + + chart = earthkit.plots.Map(domain="Germany") + chart.point_cloud( + data_filled, + x="longitude", + y="latitude", + auto_style=True + ) + + chart.coastlines() + chart.borders() + chart.gridlines() + + chart.title("{variable_name} (number={number})") + + chart.legend() +else: + print("Variable '2t' not found in dataset") + print("Available variables:", list(ds.data_vars)) + +# chart.show() # Not needed - figure is captured automatically +`; +} + +async function openInNotebook(jsonData, requestIdx) { + const notebookSection = document.getElementById('notebook-section'); + + // Show notebook section + notebookSection.style.display = 'block'; + notebookSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); + + // Store data globally + currentNotebookData = jsonData; + window.currentNotebookRequestIdx = requestIdx; + + // Initialize code editor if not already done + if (!codeEditor) { + initCodeEditor(); + } + + // Update the default code with the request index + const defaultCode = `# Polytope Data Visualization - Request ${requestIdx + 1} +# The data is available in the 'polytope_data' variable + +import json +import numpy as np +import covjsonkit +import earthkit.plots + +from covjsonkit.api import Covjsonkit + +decoder = Covjsonkit().decode(polytope_data) + +ds = decoder.to_xarray() + +print(ds) + +# Handle missing/masked values +if '2t' in ds: + data = ds['2t'] + # Replace NaN with a fill value or drop them + data_filled = data.where(~np.isnan(data), drop=True) + + chart = earthkit.plots.Map(domain="Germany") + chart.point_cloud( + data_filled, + x="longitude", + y="latitude", + auto_style=True + ) + + chart.coastlines() + chart.borders() + chart.gridlines() + + chart.title("{variable_name} (number={number})") + + chart.legend() +else: + print("Variable '2t' not found in dataset") + print("Available variables:", list(ds.data_vars)) + +# chart.show() # Not needed - figure is captured automatically +`; + + codeEditor.setValue(defaultCode); +} + +async function runPythonCode() { + const runBtn = document.getElementById('run-code-btn'); + const runBtnText = document.getElementById('run-code-text'); + const outputDiv = document.getElementById('notebook-output'); + const outputContent = document.getElementById('output-content'); + const outputImages = document.getElementById('output-images'); + const loadingDiv = document.getElementById('notebook-loading-exec'); + + if (!currentNotebookData) { + outputContent.textContent = 'Error: No data available. Please query Polytope first.'; + outputDiv.style.display = 'block'; + return; + } + + // Disable button and show loading + runBtn.disabled = true; + runBtnText.textContent = 'Executing...'; + loadingDiv.style.display = 'flex'; + outputDiv.style.display = 'none'; + + try { + // Get code from editor + const code = codeEditor.getValue(); + + // Send code to server for execution + const response = await fetch('/api/v2/execute', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + code: code, + data: currentNotebookData + }) + }); + + const result = await response.json(); + + if (result.success) { + // Display output from stdout and stderr + let output = result.stdout || ''; + if (result.stderr) { + output += '\n\nErrors/Warnings:\n' + result.stderr; + } + outputContent.textContent = output || '(No output)'; + + // Display images if any + outputImages.innerHTML = ''; + if (result.images && result.images.length > 0) { + result.images.forEach((imgBase64, idx) => { + const img = document.createElement('img'); + img.src = `data:image/png;base64,${imgBase64}`; + img.alt = `Plot ${idx + 1}`; + img.className = 'output-image'; + outputImages.appendChild(img); + }); + } + } else { + // Display error + outputContent.textContent = `Error (${result.error_type || 'Error'}): ${result.error}`; + outputImages.innerHTML = ''; + } + + outputDiv.style.display = 'block'; + loadingDiv.style.display = 'none'; + runBtnText.textContent = 'Run Code'; + runBtn.disabled = false; + + } catch (error) { + console.error('Python execution error:', error); + outputContent.textContent = `Error communicating with server: ${error.message}`; + outputImages.innerHTML = ''; + outputDiv.style.display = 'block'; + loadingDiv.style.display = 'none'; + runBtnText.textContent = 'Run Code'; + runBtn.disabled = false; + } +} + +function resetCode() { + if (codeEditor) { + const requestIdx = window.currentNotebookRequestIdx || 0; + const defaultCode = `# Polytope Data Visualization - Request ${requestIdx + 1} +# The data is available in the 'polytope_data' variable + +import json +import numpy as np +import covjsonkit +import earthkit.plots + +from covjsonkit.api import Covjsonkit + +decoder = Covjsonkit().decode(polytope_data) + +ds = decoder.to_xarray() + +print(ds) + +# Handle missing/masked values +if '2t' in ds: + data = ds['2t'] + # Replace NaN with a fill value or drop them + data_filled = data.where(~np.isnan(data), drop=True) + + chart = earthkit.plots.Map(domain="Germany") + chart.point_cloud( + data_filled, + x="longitude", + y="latitude", + auto_style=True + ) + + chart.coastlines() + chart.borders() + chart.gridlines() + + chart.title("{variable_name} (number={number})") + + chart.legend() +else: + print("Variable '2t' not found in dataset") + print("Available variables:", list(ds.data_vars)) + +# chart.show() # Not needed - figure is captured automatically +`; + codeEditor.setValue(defaultCode); + } + + // Clear output + const outputDiv = document.getElementById('notebook-output'); + outputDiv.style.display = 'none'; +} + +function closeNotebook() { + const notebookSection = document.getElementById('notebook-section'); + notebookSection.style.display = 'none'; + + // Clear output + const outputDiv = document.getElementById('notebook-output'); + outputDiv.style.display = 'none'; +} + +// Call initializeViewer on page load +initializeViewer(); + +// Add event listener for copy button +document.addEventListener("DOMContentLoaded", () => { + const copyBtn = document.getElementById("copy-mars-btn"); + if (copyBtn) { + copyBtn.addEventListener("click", copyMARSRequests); + } + + // Add event listener for Polytope button + const polytopeBtn = document.getElementById('polytope-btn'); + if (polytopeBtn) { + polytopeBtn.addEventListener('click', queryPolytope); + } + + // Add event listener for close notebook button + const closeNotebookBtn = document.getElementById('close-notebook-btn'); + if (closeNotebookBtn) { + closeNotebookBtn.addEventListener('click', closeNotebook); + } + + // Add event listener for run code button + const runCodeBtn = document.getElementById('run-code-btn'); + if (runCodeBtn) { + runCodeBtn.addEventListener('click', runPythonCode); + } + + // Add event listener for reset code button + const resetCodeBtn = document.getElementById('reset-code-btn'); + if (resetCodeBtn) { + resetCodeBtn.addEventListener('click', resetCode); + } +}); \ No newline at end of file diff --git a/stac_server/static/logo.png b/stac_server/static/logo.png new file mode 100644 index 0000000..5c44952 Binary files /dev/null and b/stac_server/static/logo.png differ diff --git a/stac_server/static/qube_styles.css b/stac_server/static/qube_styles.css new file mode 100644 index 0000000..45e81f5 --- /dev/null +++ b/stac_server/static/qube_styles.css @@ -0,0 +1,50 @@ +pre#qube { + font-family: monospace; + white-space: pre; + font-family: SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace; + font-size: 12px; + line-height: 1.4; + + details { + margin-left: 0; + } + + .qubed-level a { + margin-left: 10px; + text-decoration: none; + } + + summary { + list-style: none; + cursor: pointer; + text-overflow: ellipsis; + overflow: hidden; + text-wrap: nowrap; + display: block; + } + + span.qubed-node:hover { + background-color: #f0f0f0; + } + + details > summary::after { + content: ' ▲'; + } + + details:not([open]) > summary::after { + content: " ▼"; + } + + .qubed-level { + text-overflow: ellipsis; + overflow: hidden; + text-wrap: nowrap; + display: block; + } + + summary::-webkit-details-marker { + display: none; + content: ""; + } + +} \ No newline at end of file diff --git a/stac_server/static/styles.css b/stac_server/static/styles.css new file mode 100644 index 0000000..91cc9c1 --- /dev/null +++ b/stac_server/static/styles.css @@ -0,0 +1,1749 @@ +/* ============================================ + Modern Professional Catalogue Styles + ============================================ */ + +/* CSS Variables for consistent theming */ +:root { + --primary-color: #0073E6; + --primary-dark: #2F3842; + --primary-light: #009DEB; + --secondary-color: #009DEB; + --accent-color: #FF6B9D; + + --bg-primary: #ffffff; + --bg-secondary: #F6F9FC; + --bg-tertiary: #F2F7FD; + --bg-dark: #2F3842; + + --text-primary: #100F0F; + --text-secondary: #B1B5C3; + --text-light: #adb5bd; + --text-inverse: #ffffff; + + --border-color: #dee2e6; + --border-light: #e9ecef; + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); + --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 20px rgba(0, 0, 0, 0.12); + --shadow-hover: 0 8px 16px rgba(0, 0, 0, 0.15); + + --radius-sm: 6px; + --radius-md: 10px; + --radius-lg: 14px; + + --transition-fast: 0.15s ease; + --transition-base: 0.25s ease; + --transition-slow: 0.35s ease; + + --header-height: 70px; + --sidebar-width: 420px; +} + +/* Reset & Base Styles */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +html, +body { + min-height: 100vh; + height: 100%; + margin: 0; + padding: 0; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 15px; + line-height: 1.6; + color: var(--text-primary); + background-color: var(--bg-secondary); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* ============================================ + Header Styles + ============================================ */ + +.main-header { + background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%); + color: var(--text-inverse); + box-shadow: var(--shadow-md); + position: sticky; + top: 0; + z-index: 1000; + height: var(--header-height); +} + +.header-content { + max-width: 1800px; + margin: 0 auto; + padding: 0 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: space-between; +} + +.header-left { + display: flex; + align-items: center; + gap: 1rem; +} + +.logo-icon { + font-size: 2rem; + line-height: 1; +} + +.site-title { + font-size: 1.5rem; + font-weight: 600; + margin: 0; + letter-spacing: -0.02em; +} + +.header-right { + display: flex; + gap: 1rem; +} + +.header-link { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: rgba(255, 255, 255, 0.1); + border-radius: var(--radius-sm); + color: var(--text-inverse); + text-decoration: none; + font-weight: 500; + transition: background var(--transition-base); +} + +.header-link:hover { + background: rgba(255, 255, 255, 0.2); +} + +/* ============================================ + Layout + ============================================ */ + +#viewer { + display: flex; + flex-direction: row; + min-height: calc(100vh - var(--header-height)); + max-width: 1800px; + margin: 0 auto; +} + +/* ============================================ + Sidebar / Catalog List + ============================================ */ + +#catalog-list { + flex: 0 0 var(--sidebar-width); + background-color: var(--bg-primary); + border-right: 1px solid var(--border-color); + overflow-y: auto; + box-shadow: var(--shadow-sm); + transition: flex-basis var(--transition-base); +} + +#catalog-list.region-active { + flex: 0 0 650px; +} + +.sidebar-sticky { + padding: 2rem 1.5rem; +} + +.sidebar-intro { + margin-bottom: 2rem; + padding-bottom: 1.5rem; + border-bottom: 2px solid var(--border-light); +} + +.instruction-text { + margin: 0 0 0.75rem 0; + color: var(--text-secondary); + font-size: 0.9rem; + line-height: 1.5; +} + +.update-time { + display: flex; + align-items: center; + gap: 0.5rem; + margin: 1rem 0 0 0; + padding: 0.75rem 1rem; + background: var(--bg-secondary); + border-radius: var(--radius-sm); + font-size: 0.85rem; + color: var(--text-secondary); +} + +/* ============================================ + Navigation Controls + ============================================ */ + +.sidebar-nav { + display: flex; + gap: 0.75rem; + margin-bottom: 1.5rem; +} + +.nav-btn { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + border: none; + border-radius: var(--radius-md); + font-size: 0.9rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: var(--shadow-sm); +} + +.nav-btn.primary { + background: var(--primary-color); + color: var(--text-inverse); +} + +.nav-btn.primary:hover { + background: var(--primary-dark); + box-shadow: var(--shadow-md); + transform: translateY(-1px); +} + +.nav-btn.secondary { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.nav-btn.secondary:hover { + background: var(--border-color); + box-shadow: var(--shadow-md); + transform: translateY(-1px); +} + +.nav-btn:active { + transform: translateY(0); +} + +/* ============================================ + Catalog Items / Cards + ============================================ */ + +.catalog-items { + display: flex; + flex-direction: column; + gap: 1rem; +} +.catalog-items { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.item { + position: relative; + display: flex; + flex-direction: column; + background: var(--bg-primary); + border: 2px solid var(--border-light); + border-radius: var(--radius-lg); + padding: 1.5rem; + transition: all var(--transition-base); + box-shadow: var(--shadow-sm); +} + +.item:hover { + border-color: var(--primary-light); + box-shadow: var(--shadow-hover); + transform: translateY(-2px); +} + +.item.selected { + background: linear-gradient(135deg, #F2F7FD 0%, #F6F9FC 100%); + border-color: var(--primary-color); + box-shadow: var(--shadow-md); +} + +.item-title { + font-size: 1.15rem; + font-weight: 600; + margin: 0 0 0.5rem 0; + color: var(--text-primary); + letter-spacing: -0.01em; +} + +.item-type { + display: inline-block; + padding: 0.25rem 0.75rem; + background: var(--bg-secondary); + color: var(--text-secondary); + font-size: 0.75rem; + font-weight: 500; + border-radius: var(--radius-sm); + margin-bottom: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.item-description { + font-size: 0.9rem; + margin: 0.5rem 0 1rem 0; + color: var(--text-secondary); + line-height: 1.5; +} + +/* Select All Button */ +.item button.all { + position: absolute; + right: 1.25rem; + top: 1.25rem; + width: 2rem; + height: 2rem; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + background: var(--bg-secondary); + color: var(--text-primary); + border: 2px solid var(--border-color); + border-radius: 50%; + font-size: 1.2rem; + font-weight: bold; + cursor: pointer; + transition: all var(--transition-fast); +} + +.item button.all:hover { + background: var(--primary-color); + color: var(--text-inverse); + border-color: var(--primary-color); + transform: scale(1.1); +} + +/* ============================================ + Checkbox Container + ============================================ */ + +.checkbox-container { + display: grid; + grid-template-columns: auto auto 1fr; + grid-auto-rows: auto; + grid-column-gap: 0.75rem; + grid-row-gap: 0.75rem; + max-height: 280px; + overflow-y: auto; + padding: 1rem; + margin-top: 1rem; + background: var(--bg-secondary); + border: 1px solid var(--border-light); + border-radius: var(--radius-md); + scrollbar-width: thin; + scrollbar-color: var(--border-color) transparent; +} + +.checkbox-container::-webkit-scrollbar { + width: 6px; +} + +.checkbox-container::-webkit-scrollbar-track { + background: transparent; +} + +.checkbox-container::-webkit-scrollbar-thumb { + background: var(--border-color); + border-radius: 3px; +} + +.checkbox-container::-webkit-scrollbar-thumb:hover { + background: var(--text-secondary); +} + +.checkbox-container[disabled] { + background-color: #e9ecef; + opacity: 0.7; +} + +.checkbox-row { + display: contents; +} + +.checkbox-row:hover > * { + color: var(--primary-color); +} + +.checkbox-row:hover > input[type='checkbox'] { + box-shadow: 0 0 0 3px rgba(0, 115, 230, 0.15); +} + +.checkbox-row input[type='checkbox'] { + grid-column-start: 1; + width: 1.25rem; + height: 1.25rem; + align-self: center; + cursor: pointer; + accent-color: var(--primary-color); + transition: all var(--transition-fast); +} + +.checkbox-row a.more-info { + cursor: help; + text-decoration: none; + font-size: 0.7rem; + font-weight: 600; + display: inline-flex; + width: 1.2rem; + height: 1.2rem; + padding: 0; + align-items: center; + justify-content: center; + aspect-ratio: 1 / 1; + border-radius: 50%; + border: 2px solid var(--text-secondary); + color: var(--text-secondary); + transition: all var(--transition-fast); +} + +.checkbox-row a.more-info:hover { + background: var(--primary-color); + border-color: var(--primary-color); + color: var(--text-inverse); + transform: scale(1.15); +} + +.checkbox-row label { + grid-column-start: 2; + align-self: center; + font-size: 0.9rem; + color: var(--text-primary); + cursor: pointer; + transition: color var(--transition-fast); +} + +.checkbox-row label.code { + grid-column-start: 3; + text-align: right; + align-self: center; + font-family: 'Monaco', 'Courier New', monospace; + font-size: 0.8rem; + color: var(--text-secondary); +} + +/* ============================================ + Filter Input for Checkbox Lists + ============================================ */ + +.filter-wrapper { + margin-top: 1rem; + margin-bottom: 0.75rem; +} + +.filter-input { + width: 100%; + padding: 0.625rem 0.875rem 0.625rem 2.25rem; + border: 2px solid var(--border-color); + border-radius: var(--radius-md); + font-size: 0.9rem; + background: var(--bg-primary); + color: var(--text-primary); + transition: all var(--transition-base); + background-image: url('data:image/svg+xml,'); + background-repeat: no-repeat; + background-position: 0.75rem center; + background-size: 16px 16px; +} + +.filter-input:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(0, 115, 230, 0.1); +} + +.filter-input::placeholder { + color: var(--text-light); +} + +/* Sidebar Footer */ +.sidebar-footer { + margin-top: 2rem; + padding-top: 1.5rem; + border-top: 2px solid var(--border-light); +} + +.text-link { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + background: var(--bg-secondary); + border-radius: var(--radius-md); + color: var(--primary-color); + text-decoration: none; + font-weight: 500; + font-size: 0.9rem; + transition: all var(--transition-base); +} + +.text-link:hover { + background: var(--primary-color); + color: var(--text-inverse); + box-shadow: var(--shadow-md); +} + +/* ============================================ + Main Content Area + ============================================ */ + +#details { + flex: 1; + padding: 2rem; + overflow-y: auto; + overflow-x: hidden; + background: var(--bg-secondary); + max-width: 100%; +} + +.detail-section { + background: var(--bg-primary); + border-radius: var(--radius-lg); + padding: 2rem; + margin-bottom: 1.5rem; + box-shadow: var(--shadow-sm); + border: 1px solid var(--border-light); +} + +.detail-section.collapsible { + padding: 0; +} + +.detail-section.collapsible summary { + padding: 1.5rem 2rem; + cursor: pointer; + transition: background var(--transition-base); + border-radius: var(--radius-lg); +} + +.detail-section.collapsible summary:hover { + background: var(--bg-secondary); +} + +.detail-section.collapsible[open] summary { + border-bottom: 1px solid var(--border-light); + border-radius: var(--radius-lg) var(--radius-lg) 0 0; +} + +.detail-section.collapsible > *:not(summary) { + padding: 0 2rem 2rem 2rem; +} + +.section-title { + display: flex; + align-items: center; + gap: 0.75rem; + font-size: 1.25rem; + font-weight: 600; + margin: 0 0 1rem 0; + color: var(--text-primary); + letter-spacing: -0.02em; +} + +.section-title svg { + color: var(--primary-color); +} + +.section-description { + margin: 0 0 1.25rem 0; + color: var(--text-secondary); + font-size: 0.95rem; + line-height: 1.6; +} + +.section-description a { + color: var(--primary-color); + text-decoration: none; + font-weight: 500; + transition: color var(--transition-fast); +} + +.section-description a:hover { + color: var(--primary-dark); + text-decoration: underline; +} + +/* ============================================ + Code Blocks + ============================================ */ + +.code-block { + background: var(--bg-dark); + border-radius: var(--radius-md); + overflow: hidden; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.code-block pre { + margin: 0; + padding: 1.5rem; + overflow-x: auto; + font-family: 'Monaco', 'Menlo', 'Consolas', monospace; + font-size: 0.85rem; + line-height: 1.6; + scrollbar-width: thin; + scrollbar-color: var(--text-secondary) transparent; +} + +.code-block pre::-webkit-scrollbar { + height: 8px; +} + +.code-block pre::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.05); +} + +.code-block pre::-webkit-scrollbar-thumb { + background: var(--text-secondary); + border-radius: 4px; +} + +.code-block code { + font-family: inherit; + font-size: inherit; +} + +#final_req, +#qube { + margin: 0; + padding: 1.5rem; + background: var(--bg-dark); + color: #e9ecef; + border-radius: var(--radius-md); + overflow-x: auto; + font-family: 'Monaco', 'Menlo', 'Consolas', monospace; + font-size: 0.85rem; + line-height: 1.6; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* Syntax Highlighting Enhancements */ +span.key { + color: #4fc3f7; + font-weight: 600; +} + +span.value { + color: #81c784; +} + +span.key:hover, +span.value:hover { + color: #ffeb3b; + cursor: help; +} + +span.punct { + color: #e0e0e0; + font-weight: 500; +} + +/* ============================================ + Form Elements + ============================================ */ + +input[type="text"] { + width: 100%; + padding: 0.75rem 1rem; + border: 2px solid var(--border-color); + border-radius: var(--radius-md); + font-size: 0.9rem; + font-family: inherit; + transition: all var(--transition-base); + background: var(--bg-primary); +} + +input[type="text"]:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(0, 115, 230, 0.1); +} + +/* ============================================ + Utility Classes + ============================================ */ + +.has-data { + background-color: rgba(129, 199, 132, 0.2); + border: 2px solid #81c784 !important; +} + +.list-label { + font-weight: 600; + margin-bottom: 0.75rem; + display: block; + color: var(--primary-color); + font-size: 0.9rem; + text-transform: uppercase; + letter-spacing: 0.05em; +} + +/* Date Picker Styles */ +.date-picker-input { + width: 100%; + margin-top: 1rem; + border: none; + background: transparent; +} + +.date-picker-hint { + margin: 0.75rem 0 1rem 0; + padding: 0.75rem 1rem; + background: linear-gradient(135deg, #F2F7FD 0%, #F6F9FC 100%); + border-left: 4px solid var(--primary-color); + border-radius: var(--radius-sm); + font-size: 0.85rem; + line-height: 1.5; + color: var(--text-secondary); + font-weight: 500; + transition: all var(--transition-base); +} + +.date-picker-hint:empty { + display: none; +} + +div.air-datepicker { + width: 100% !important; + background: var(--bg-primary); + border: 2px solid var(--border-light); + border-radius: var(--radius-md); + box-shadow: var(--shadow-sm); + font-family: inherit; +} + +div.air-datepicker .air-datepicker-nav { + background: var(--bg-secondary); + border-bottom: 1px solid var(--border-light); + padding: 0.75rem; +} + +div.air-datepicker .air-datepicker-nav--title { + color: var(--text-primary); + font-weight: 600; +} + +div.air-datepicker .air-datepicker-nav--action { + color: var(--primary-color); +} + +div.air-datepicker .air-datepicker-nav--action:hover { + background: var(--primary-light); +} + +div.air-datepicker .air-datepicker-body--day-name { + color: var(--text-secondary); + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; +} + +div.air-datepicker .air-datepicker-cell { + color: var(--text-primary); + border-radius: var(--radius-sm); +} + +div.air-datepicker .air-datepicker-cell.-disabled- { + color: var(--text-light); + opacity: 0.25; + cursor: not-allowed; + background: transparent; + text-decoration: line-through; +} + +div.air-datepicker .air-datepicker-cell:not(.-disabled-):hover { + background: var(--primary-light); + color: var(--text-inverse); + cursor: pointer; + transform: scale(1.05); + transition: all var(--transition-fast); +} + +div.air-datepicker .air-datepicker-cell.-selected- { + background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%) !important; + color: var(--text-inverse) !important; + font-weight: 700; + box-shadow: 0 2px 8px rgba(0, 115, 230, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.2); + border: none !important; +} + +div.air-datepicker .air-datepicker-cell.-in-range- { + background: linear-gradient(135deg, rgba(0, 115, 230, 0.2) 0%, rgba(0, 115, 230, 0.15) 100%) !important; + color: var(--primary-dark); + font-weight: 600; + border-top: 1px solid rgba(0, 115, 230, 0.3); + border-bottom: 1px solid rgba(0, 115, 230, 0.3); +} + +div.air-datepicker .air-datepicker-cell.-range-from-, +div.air-datepicker .air-datepicker-cell.-range-to- { + background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-light) 100%) !important; + color: var(--text-inverse) !important; + font-weight: 700; + box-shadow: 0 2px 8px rgba(0, 115, 230, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.2); + border: none !important; +} + +/* Subtle indicator for dates with available data */ +div.air-datepicker .air-datepicker-cell.has-data { + font-weight: 600; + position: relative; + background: rgba(0, 115, 230, 0.06); + border-bottom: 2px solid rgba(0, 115, 230, 0.4); +} + +div.air-datepicker .air-datepicker-cell.has-data:not(.-disabled-) { + color: var(--primary-dark); +} + +/* When dates are selected, make them darker and more prominent */ +div.air-datepicker .air-datepicker-cell.-selected-.has-data, +div.air-datepicker .air-datepicker-cell.-range-from-.has-data, +div.air-datepicker .air-datepicker-cell.-range-to-.has-data { + background: linear-gradient(135deg, var(--primary-dark) 0%, var(--primary-color) 100%) !important; + color: var(--text-inverse) !important; + border-bottom: 2px solid var(--primary-dark); + font-weight: 700; + box-shadow: 0 3px 10px rgba(47, 56, 66, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15); +} + +div.air-datepicker .air-datepicker-cell.-in-range-.has-data { + background: linear-gradient(135deg, rgba(0, 115, 230, 0.25) 0%, rgba(0, 115, 230, 0.2) 100%) !important; + color: var(--primary-dark); + border-bottom: 2px solid rgba(0, 115, 230, 0.5); + font-weight: 600; + border-top: 1px solid rgba(0, 115, 230, 0.4); +} + +/* ============================================ + Responsive Design + ============================================ */ + +@media (max-width: 1200px) { + :root { + --sidebar-width: 360px; + } + + .header-content { + padding: 0 1.5rem; + } + + .site-title { + font-size: 1.25rem; + } +} + +@media (max-width: 968px) { + #viewer { + flex-direction: column; + } + + #catalog-list { + flex: 0 0 auto; + width: 100%; + border-right: none; + border-bottom: 1px solid var(--border-color); + max-height: 60vh; + } + + #details { + width: 100%; + } + + .header-content { + padding: 0 1rem; + } + + .site-title { + font-size: 1.1rem; + } + + .sidebar-nav { + flex-direction: column; + } +} + +@media (max-width: 640px) { + :root { + --header-height: 60px; + } + + .header-content { + padding: 0 1rem; + } + + .site-title { + font-size: 1rem; + } + + .logo-icon { + font-size: 1.5rem; + } + + .sidebar-sticky { + padding: 1.5rem 1rem; + } + + #details { + padding: 1.5rem 1rem; + } + + .detail-section { + padding: 1.5rem; + } + + .detail-section.collapsible summary { + padding: 1rem 1.5rem; + } + + .detail-section.collapsible > *:not(summary) { + padding: 0 1.5rem 1.5rem 1.5rem; + } + + .item { + padding: 1.25rem; + } + + .item button.all { + right: 1rem; + top: 1rem; + width: 1.75rem; + height: 1.75rem; + font-size: 1rem; + } +} + +/* ============================================ + Print Styles + ============================================ */ + +@media print { + .main-header, + .sidebar-nav, + .sidebar-footer, + button { + display: none; + } + + #viewer { + flex-direction: column; + } + + #catalog-list, + #details { + width: 100%; + border: none; + box-shadow: none; + } +} + +/* ============================================ + Geographic Region Selection + ============================================ */ + +.region-selection { + margin-top: 2rem; + padding: 1.5rem; + background: var(--bg-secondary); + border: 2px solid var(--border-light); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); +} + +.region-title { + font-size: 1rem; + font-weight: 600; + margin: 0 0 0.5rem 0; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 0.5rem; +} + +.region-description { + margin: 0 0 1rem 0; + color: var(--text-secondary); + font-size: 0.85rem; + line-height: 1.5; +} + +.region-controls { + display: flex; + gap: 0.75rem; + margin-bottom: 1.5rem; + flex-wrap: wrap; +} + +.region-btn { + flex: 1; + min-width: 120px; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + border: none; + border-radius: var(--radius-md); + font-size: 0.85rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: var(--shadow-sm); +} + +.region-btn.primary { + background: var(--primary-color); + color: var(--text-inverse); +} + +.region-btn.primary:hover { + background: var(--primary-dark); + box-shadow: var(--shadow-md); + transform: translateY(-1px); +} + +.region-btn.secondary { + background: var(--bg-secondary); + color: var(--text-primary); + border: 2px solid var(--border-color); +} + +.region-btn.secondary:hover { + background: var(--bg-tertiary); + border-color: var(--text-secondary); +} + +#map-container { + margin-top: 1.5rem; +} + +.map-instructions { + margin-bottom: 1rem; + padding: 0.75rem 1rem; + background: var(--bg-primary); + border-left: 4px solid var(--primary-color); + border-radius: var(--radius-sm); + font-size: 0.8rem; + color: var(--text-secondary); +} + +.map-instructions p { + margin: 0; + line-height: 1.5; +} + +.map-instructions strong { + color: var(--text-primary); +} + +#map { + border: 2px solid var(--border-light); + box-shadow: var(--shadow-md); +} + +.selected-region { + margin-top: 1.5rem; + padding: 1rem; + background: var(--bg-secondary); + border-radius: var(--radius-md); +} + +.selected-region h4 { + margin: 0 0 1rem 0; + color: var(--text-primary); + font-size: 0.95rem; + font-weight: 600; +} + +.selected-region .code-block { + margin-bottom: 1rem; +} + +.selected-region pre { + margin: 0; + padding: 1rem; + background: var(--bg-dark); + color: #e9ecef; + border-radius: var(--radius-sm); + font-size: 0.85rem; + line-height: 1.6; + overflow-x: auto; +} + +/* ============================================ + Animations + ============================================ */ + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.item { + animation: fadeIn var(--transition-base) ease-out; +} + +/* Loading State */ +.item.loading { + background: var(--bg-secondary); + color: var(--text-secondary); + pointer-events: none; + animation: pulse 1.5s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { + opacity: 1; + } + 50% { + opacity: 0.5; + } +} + +/* Focus Visible for Accessibility */ +:focus-visible { + outline: 3px solid var(--primary-color); + outline-offset: 2px; +} + +button:focus-visible, +a:focus-visible { + outline: 3px solid var(--accent-color); +} + +/* Canvas Elements */ +canvas { + width: 100%; + height: 300px; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + margin-top: 1.5rem; +} + +/* ============================================ + Copy Button for Code Blocks + ============================================ */ + +.code-block-with-copy { + position: relative; +} + +.copy-btn { + position: absolute; + top: 0.75rem; + right: 0.75rem; + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: rgba(255, 255, 255, 0.9); + color: var(--text-primary); + border: 2px solid var(--border-color); + border-radius: var(--radius-sm); + font-size: 0.85rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + z-index: 10; + box-shadow: var(--shadow-sm); +} + +.copy-btn:hover { + background: var(--primary-color); + color: var(--text-inverse); + border-color: var(--primary-color); + transform: translateY(-2px); + box-shadow: var(--shadow-md); +} + +.copy-btn.copied { + background: #28a745; + color: white; + border-color: #28a745; +} + +.copy-btn svg { + flex-shrink: 0; +} + +@media (max-width: 640px) { + .copy-btn { + padding: 0.4rem 0.75rem; + font-size: 0.8rem; + } + + .copy-btn-text { + display: none; + } +} + +/* ============================================ + Polytope Query Section + ============================================ */ + +.polytope-section { + margin-top: 2rem; + padding: 1.5rem; + background: linear-gradient(135deg, #F6F9FC 0%, #F2F7FD 100%); + border: 2px solid var(--border-light); + border-radius: var(--radius-lg); + box-shadow: var(--shadow-sm); +} + +.polytope-title { + font-size: 1.1rem; + font-weight: 600; + margin: 0 0 0.75rem 0; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 0.5rem; +} + +.polytope-description { + margin: 0 0 1.25rem 0; + color: var(--text-secondary); + font-size: 0.9rem; + line-height: 1.5; +} + +.polytope-auth-form { + margin-bottom: 1.5rem; + padding: 1.25rem; + background: var(--bg-primary); + border: 1px solid var(--border-light); + border-radius: var(--radius-md); +} + +.form-group { + margin-bottom: 1rem; +} + +.form-group:last-child { + margin-bottom: 0; +} + +.form-label { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.5rem; + color: var(--text-primary); + font-size: 0.9rem; + font-weight: 600; +} + +.form-input { + width: 100%; + padding: 0.75rem; + border: 2px solid var(--border-light); + border-radius: var(--radius-sm); + font-size: 0.9rem; + font-family: inherit; + color: var(--text-primary); + background: var(--bg-primary); + transition: all var(--transition-base); +} + +.form-input:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(0, 115, 230, 0.1); +} + +.form-input::placeholder { + color: var(--text-light); +} + +.form-hint { + margin: 0.5rem 0 0 0; + font-size: 0.8rem; + color: var(--text-secondary); + line-height: 1.4; +} + +.form-hint a { + color: var(--primary-color); + text-decoration: none; +} + +.form-hint a:hover { + text-decoration: underline; +} + +.polytope-btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-dark) 100%); + color: var(--text-inverse); + border: none; + border-radius: var(--radius-md); + font-size: 0.95rem; + font-weight: 600; + cursor: pointer; + transition: all var(--transition-base); + box-shadow: var(--shadow-md); +} + +.polytope-btn:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: var(--shadow-lg); +} + +.polytope-btn:active { + transform: translateY(0); +} + +.polytope-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.polytope-status { + margin-top: 1.25rem; + padding: 1rem; + background: var(--bg-primary); + border-left: 4px solid var(--primary-color); + border-radius: var(--radius-sm); + font-size: 0.9rem; + color: var(--text-primary); +} + +.polytope-status.loading { + border-left-color: var(--secondary-color); +} + +.polytope-status.success { + border-left-color: #28a745; +} + +.polytope-status.error { + border-left-color: var(--accent-color); + color: #dc3545; +} + +.polytope-results { + margin-top: 1.25rem; +} + +.polytope-result-item { + padding: 1rem; + margin-bottom: 0.75rem; + background: var(--bg-primary); + border: 1px solid var(--border-light); + border-radius: var(--radius-md); +} + +.polytope-result-item.success { + border-left: 4px solid #28a745; +} + +.polytope-result-item.error { + border-left: 4px solid #dc3545; +} + +.polytope-result-header { + font-weight: 600; + margin-bottom: 0.5rem; + color: var(--text-primary); + font-size: 0.9rem; +} + +.polytope-result-detail { + font-size: 0.85rem; + color: var(--text-secondary); + font-family: 'Monaco', 'Courier New', monospace; +} +.download-json-btn { + transition: all 0.2s ease; +} + +.download-json-btn:hover { + background: var(--secondary-color) !important; + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(0, 115, 230, 0.3); +} + +.download-json-btn:active { + transform: translateY(0); +} +/* ============================================ + JupyterLite Notebook Section + ============================================ */ + +.notebook-section { + background: var(--bg-primary); + padding: 2rem; + border-radius: var(--radius-lg); + border: 1px solid var(--border-light); + margin-bottom: 2rem; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); +} + +.notebook-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 1rem; +} + +.notebook-title { + font-size: 1.3rem; + font-weight: 600; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 0.75rem; + margin: 0; +} + +.notebook-title svg { + color: var(--primary-color); +} + +.close-notebook-btn { + background: transparent; + border: 1px solid var(--border-light); + color: var(--text-secondary); + padding: 0.5rem; + border-radius: var(--radius-sm); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +.close-notebook-btn:hover { + background: var(--bg-secondary); + color: var(--text-primary); + border-color: var(--primary-color); +} + +.notebook-description { + color: var(--text-secondary); + margin-bottom: 1.5rem; + line-height: 1.6; +} + +.notebook-description code { + background: var(--bg-secondary); + padding: 0.2rem 0.5rem; + border-radius: 3px; + font-size: 0.9em; + color: var(--primary-color); + font-family: 'Monaco', 'Courier New', monospace; +} + +.notebook-controls { + display: flex; + gap: 0.75rem; + margin-bottom: 1rem; +} + +.run-code-btn, +.reset-code-btn { + padding: 0.6rem 1.2rem; + border: none; + border-radius: var(--radius-md); + cursor: pointer; + font-size: 0.9rem; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s ease; +} + +.run-code-btn { + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: white; +} + +.run-code-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(0, 115, 230, 0.4); +} + +.run-code-btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; +} + +.reset-code-btn { + background: var(--bg-secondary); + color: var(--text-primary); + border: 1px solid var(--border-light); +} + +.reset-code-btn:hover { + background: var(--bg-tertiary); + border-color: var(--primary-color); +} + +.package-installer { + background: var(--bg-secondary); + border: 1px solid var(--border-light); + border-radius: var(--radius-md); + padding: 1rem; + margin-bottom: 1rem; +} + +.package-installer-title { + font-size: 0.95rem; + font-weight: 600; + color: var(--text-primary); + margin: 0 0 0.5rem 0; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.package-installer-title svg { + color: var(--primary-color); +} + +.package-installer-hint { + font-size: 0.85rem; + color: var(--text-secondary); + margin: 0 0 0.75rem 0; + line-height: 1.4; +} + +.package-installer-controls { + display: flex; + gap: 0.5rem; + align-items: stretch; +} + +.package-input { + flex: 1; + padding: 0.6rem; + border: 1px solid var(--border-light); + border-radius: var(--radius-md); + background: var(--bg-primary); + color: var(--text-primary); + font-size: 0.9rem; + font-family: 'Monaco', 'Courier New', monospace; + transition: border-color 0.2s ease; +} + +.package-input:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(0, 115, 230, 0.1); +} + +.package-input::placeholder { + color: var(--text-secondary); + opacity: 0.6; +} + +.install-package-btn { + padding: 0.6rem 1.2rem; + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: white; + border: none; + border-radius: var(--radius-md); + cursor: pointer; + font-size: 0.9rem; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s ease; + white-space: nowrap; +} + +.install-package-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(0, 115, 230, 0.4); +} + +.install-package-btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; +} + +.package-install-status { + margin-top: 0.75rem; + padding: 0.75rem; + border-radius: var(--radius-sm); + font-size: 0.85rem; + font-family: 'Monaco', 'Courier New', monospace; + line-height: 1.5; +} + +.package-install-status.loading { + background: rgba(0, 115, 230, 0.1); + border: 1px solid rgba(0, 115, 230, 0.2); + color: var(--primary-color); +} + +.package-install-status.success { + background: rgba(40, 167, 69, 0.1); + border: 1px solid rgba(40, 167, 69, 0.2); + color: #28a745; +} + +.package-install-status.error { + background: rgba(220, 53, 69, 0.1); + border: 1px solid rgba(220, 53, 69, 0.2); + color: #dc3545; +} + +.code-editor { + border: 1px solid var(--border-light); + border-radius: var(--radius-md); + overflow: hidden; + margin-bottom: 1rem; +} + +.CodeMirror { + height: 400px; + font-size: 14px; + font-family: 'Monaco', 'Courier New', monospace; +} + +.notebook-output { + background: var(--bg-secondary); + border: 1px solid var(--border-light); + border-radius: var(--radius-md); + padding: 1rem; + margin-top: 1rem; +} + +.output-title { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary); + margin: 0 0 0.75rem 0; +} + +.output-content { + margin: 0; + padding: 0.75rem; + background: #1e1e1e; + color: #d4d4d4; + border-radius: var(--radius-sm); + font-family: 'Monaco', 'Courier New', monospace; + font-size: 0.85rem; + line-height: 1.5; + overflow-x: auto; + white-space: pre-wrap; + word-wrap: break-word; +} + +.output-images { + display: flex; + flex-direction: column; + gap: 1rem; + margin-top: 1rem; +} + +.output-image { + max-width: 100%; + height: auto; + border-radius: var(--radius-md); + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + background: white; + display: block; +} + +.notebook-loading-exec { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 1rem; + background: var(--bg-secondary); + border-radius: var(--radius-md); + color: var(--text-secondary); + margin-top: 1rem; +} + +.loading-spinner-small { + width: 20px; + height: 20px; + border: 3px solid var(--border-light); + border-top: 3px solid var(--primary-color); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +.loading-spinner { + width: 40px; + height: 40px; + border: 4px solid var(--border-light); + border-top: 4px solid var(--primary-color); + border-radius: 50%; + animation: spin 1s linear infinite; + margin-bottom: 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.open-notebook-btn { + margin-top: 0.5rem; + padding: 0.5rem 1rem; + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + color: white; + border: none; + border-radius: var(--radius-md); + cursor: pointer; + font-size: 0.9rem; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 0.5rem; + transition: all 0.2s ease; +} + +.open-notebook-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(0, 115, 230, 0.4); +} + +.open-notebook-btn:active { + transform: translateY(0); +} + +.open-notebook-btn svg { + width: 16px; + height: 16px; +} \ No newline at end of file diff --git a/stac_server/templates/index.html b/stac_server/templates/index.html new file mode 100644 index 0000000..45b52e4 --- /dev/null +++ b/stac_server/templates/index.html @@ -0,0 +1,355 @@ + + + + + + + {{title}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Qubed Logo +

{{title}}

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

+ + + + Current Selection +

+

+ This is a MARS Selection object in JSON format. Hover over keys or values for more information. +

+
+
{
+}
+
+
+
+ + + +
+

+ + + + Currently Selected Tree +

+

+ This shows the data qube that matches the current query. The leaves are the next set of available selections you can make. +

+
+

+                
+
+ +
+ +

+ + + + Example Qubed Code +

+
+

+ See the Qubed documentation for more details. +

+
+
# pip install qubed requests
+import requests
+from qubed import Qube
+qube = Qube.from_json(requests.get("{{ api_url }}select/?{{request.url.query}}").json())
+qube.print()
+
+
+ +
+ +

+ + + + Raw STAC Response +

+
+

+ See the STAC Extension Proposal for more details on the format. +

+
+
+
+
+ +
+ +

+ + + + Debug Info +

+
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/stac_server/templates/landing.html b/stac_server/templates/landing.html new file mode 100644 index 0000000..4cafd05 --- /dev/null +++ b/stac_server/templates/landing.html @@ -0,0 +1,526 @@ + + + + + + + {{title}} - Welcome + + + + + + +
+
+
+ Qubed Logo +

{{title}}

+
+

Your gateway to climate and weather data

+
+ +
+ +
+
+
1
+

Select a Dataset

+

Choose the dataset you want to explore

+
+ +
+
+
🌍
+

Climate DT

+

Digital Twin for Climate Change Adaptation - Long-term climate projections and historical climate data

+
+ +
+
+

Extremes DT

+

Digital Twin for Weather-Induced Extremes - High-resolution extreme weather events and forecasts

+
+
+ +
+ +
+ + +
+ + + +
+
+ + + + + \ No newline at end of file diff --git a/stac_server/test_api.py b/stac_server/test_api.py new file mode 100644 index 0000000..3ab3a14 --- /dev/null +++ b/stac_server/test_api.py @@ -0,0 +1,66 @@ +import os +from pathlib import Path +from fastapi.testclient import TestClient + +os.environ["API_KEY"] = "testkey" + + +from . import main + +app_client = TestClient(main.app) + + +def test_root_page_renders_html(): + resp = app_client.get("/") + assert resp.status_code == 200 + # Fast check that we served HTML from the Jinja template + assert resp.headers.get("content-type", "").startswith("text/html") + + +def test_get_returns_qube_json_object(): + resp = app_client.get("/api/v2/get/") + assert resp.status_code == 200 + data = resp.json() + assert isinstance(data, dict) + # Should not be empty given example qubes are loaded via config/config.yaml + assert len(data) > 0 + # Should be the same as the example extremes_dt qube + + +def test_query_returns_axes_list(): + resp = app_client.get("/api/v2/query") + assert resp.status_code == 200 + axes = resp.json() + assert isinstance(axes, list) + # With example data, we expect at least one axis + assert len(axes) >= 1 + # Each axis item should include required keys + if axes: + assert {"key", "values", "dtype", "on_frontier"}.issubset(axes[0].keys()) + + +def test_basicstac_root_catalog(): + resp = app_client.get("/api/v2/basicstac/") + assert resp.status_code == 200 + payload = resp.json() + assert payload.get("type") == "Catalog" + assert isinstance(payload.get("links"), list) + + +def test_union_requires_bearer_token(): + # Missing Authorization header should be rejected by HTTPBearer + resp = app_client.post("/api/v2/union/", json={}) + assert resp.status_code in (401, 403) + + +def test_union_with_valid_bearer_token_works(): + # Merge the current qube with itself; this should be a no-op but exercises the path + base = app_client.get("/api/v2/get/").json() + resp = app_client.post( + "/api/v2/union/", + headers={"Authorization": "Bearer testkey"}, + json=base, + ) + assert resp.status_code == 200 + merged = resp.json() + assert merged == base \ No newline at end of file