diff --git a/.gitignore b/.gitignore index 2df2495..80bb9e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ -CMIP6_Amon.json ~$.xlsx *.json~ *.sh~ *.py~ *.swp -demo/obs4MIPs +demo/demo diff --git a/Tables/obs4MIPs_Aday.json b/Tables/obs4MIPs_Aday.json index 727cdbc..de65e4b 100644 --- a/Tables/obs4MIPs_Aday.json +++ b/Tables/obs4MIPs_Aday.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"atmos", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_Aday" + "table_id":"Aday" }, "variable_entry":{ "clt":{ diff --git a/Tables/obs4MIPs_Amon.json b/Tables/obs4MIPs_Amon.json index 95e9c21..ed3c156 100644 --- a/Tables/obs4MIPs_Amon.json +++ b/Tables/obs4MIPs_Amon.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"atmos", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_Amon" + "table_id":"Amon" }, "variable_entry":{ "ccb":{ diff --git a/Tables/obs4MIPs_Lmon.json b/Tables/obs4MIPs_Lmon.json index 1916d62..b5e19e8 100644 --- a/Tables/obs4MIPs_Lmon.json +++ b/Tables/obs4MIPs_Lmon.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"land", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_Lmon" + "table_id":"Lmon" }, "variable_entry":{ "baresoilFrac":{ diff --git a/Tables/obs4MIPs_Omon.json b/Tables/obs4MIPs_Omon.json index 17052ce..72220ed 100644 --- a/Tables/obs4MIPs_Omon.json +++ b/Tables/obs4MIPs_Omon.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"ocean", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_Omon" + "table_id":"Omon" }, "variable_entry":{ "agessc":{ diff --git a/Tables/obs4MIPs_SImon.json b/Tables/obs4MIPs_SImon.json index da8b03b..7811041 100644 --- a/Tables/obs4MIPs_SImon.json +++ b/Tables/obs4MIPs_SImon.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"seaIce", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_SImon" + "table_id":"SImon" }, "variable_entry":{ "siage":{ diff --git a/Tables/obs4MIPs_fx.json b/Tables/obs4MIPs_fx.json index 1ccf717..803ee57 100644 --- a/Tables/obs4MIPs_fx.json +++ b/Tables/obs4MIPs_fx.json @@ -10,7 +10,7 @@ "product":"observations", "realm":"fx", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_fx" + "table_id":"fx" }, "variable_entry":{ "areacella":{ diff --git a/demo/Tables/obs4MIPs_Aday.json b/demo/Tables/obs4MIPs_Aday.json new file mode 100644 index 0000000..de65e4b --- /dev/null +++ b/demo/Tables/obs4MIPs_Aday.json @@ -0,0 +1,665 @@ +{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "approx_interval":"1.00000", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "generic_levels":"", + "mip_era":"CMIP6", + "missing_value":"1e20", + "product":"observations", + "realm":"atmos", + "table_date":"17 July 2017", + "table_id":"Aday" + }, + "variable_entry":{ + "clt":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total cloud area fraction for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Includes both large-scale and convective cloud.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Total Cloud Fraction", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clt", + "positive":"", + "standard_name":"cloud_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "hfls":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Upward Latent Heat Flux", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hfls", + "positive":"up", + "standard_name":"surface_upward_latent_heat_flux", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "hfss":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Upward Sensible Heat Flux", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hfss", + "positive":"up", + "standard_name":"surface_upward_sensible_heat_flux", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "hur":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"The relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Relative Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hur", + "positive":"", + "standard_name":"relative_humidity", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "hurs":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Near-Surface Relative Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hurs", + "positive":"", + "standard_name":"relative_humidity", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "hursmax":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: maximum", + "comment":"", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Surface Daily Maximum Relative Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hursmax", + "positive":"", + "standard_name":"relative_humidity", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "hursmin":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: minimum", + "comment":"", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Surface Daily Minimum Relative Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hursmin", + "positive":"", + "standard_name":"relative_humidity", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "hus":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Specific Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"hus", + "positive":"", + "standard_name":"specific_humidity", + "type":"real", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "huss":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Near-surface (usually, 2 meter) specific humidity.", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Near-Surface Specific Humidity", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"huss", + "positive":"", + "standard_name":"specific_humidity", + "type":"real", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "mrro":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The total run-off (including drainage through the base of the soil model) per unit area leaving the land portion of the grid cell.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Total Runoff", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrro", + "positive":"", + "standard_name":"runoff_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "mrso":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"the mass per unit area (summed over all soil layers) of water in all phases.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Total Soil Moisture Content", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrso", + "positive":"", + "standard_name":"soil_moisture_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "mrsos":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The mass of water in all phases in the upper 10cm of the soil layer.", + "dimensions":"longitude latitude time sdepth1", + "frequency":"day", + "long_name":"Moisture in Upper Portion of Soil Column", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrsos", + "positive":"", + "standard_name":"moisture_content_of_soil_layer", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "pr":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"includes both liquid and solid phases", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Precipitation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"pr", + "positive":"", + "standard_name":"precipitation_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "prc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Convective precipitation at surface; includes both liquid and solid phases.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Convective Precipitation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"prc", + "positive":"", + "standard_name":"convective_precipitation_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "prsn":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"at surface; includes precipitation of all forms of water in the solid phase", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Snowfall Flux", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"prsn", + "positive":"", + "standard_name":"snowfall_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "psl":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Sea Level Pressure", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Sea Level Pressure", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"psl", + "positive":"", + "standard_name":"air_pressure_at_sea_level", + "type":"real", + "units":"Pa", + "valid_max":"", + "valid_min":"" + }, + "rlds":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Downwelling Longwave Radiation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rlds", + "positive":"down", + "standard_name":"surface_downwelling_longwave_flux_in_air", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "rlus":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Upwelling Longwave Radiation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rlus", + "positive":"up", + "standard_name":"surface_upwelling_longwave_flux_in_air", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "rlut":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"at the top of the atmosphere (to be compared with satellite measurements)", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"TOA Outgoing Longwave Radiation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rlut", + "positive":"up", + "standard_name":"toa_outgoing_longwave_flux", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "rsds":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"surface solar irradiance for UV calculations", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Downwelling Shortwave Radiation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rsds", + "positive":"down", + "standard_name":"surface_downwelling_shortwave_flux_in_air", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "rsus":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Upwelling Shortwave Radiation", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rsus", + "positive":"up", + "standard_name":"surface_upwelling_shortwave_flux_in_air", + "type":"real", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "sfcWind":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"near-surface (usually, 10 meters) wind speed.", + "dimensions":"longitude latitude time height10m", + "frequency":"day", + "long_name":"Daily-Mean Near-Surface Wind Speed", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sfcWind", + "positive":"", + "standard_name":"wind_speed", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "sfcWindmax":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: maximum", + "comment":"Daily maximum near-surface (usually, 10 meters) wind speed.", + "dimensions":"longitude latitude time height10m", + "frequency":"day", + "long_name":"Daily Maximum Near-Surface Wind Speed", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sfcWindmax", + "positive":"", + "standard_name":"wind_speed", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "snc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Fraction of each grid cell that is occupied by snow that rests on land portion of cell.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Snow Area Fraction", + "modeling_realm":"landIce land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"snc", + "positive":"", + "standard_name":"surface_snow_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "snw":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The mass of surface snow on the land portion of the grid cell divided by the land area in the grid cell; reported as missing where the land fraction is 0; excludes snow on vegetation canopy or on sea ice.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Snow Amount", + "modeling_realm":"landIce land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"snw", + "positive":"", + "standard_name":"surface_snow_amount", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "ta":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"Air Temperature", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Air Temperature", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"ta", + "positive":"", + "standard_name":"air_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "tas":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"near-surface (usually, 2 meter) air temperature", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Near-Surface Air Temperature", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tas", + "positive":"", + "standard_name":"air_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "tasmax":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: maximum", + "comment":"maximum near-surface (usually, 2 meter) air temperature (add cell_method attribute 'time: max')", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Daily Maximum Near-Surface Air Temperature", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tasmax", + "positive":"", + "standard_name":"air_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "tasmin":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: minimum", + "comment":"minimum near-surface (usually, 2 meter) air temperature (add cell_method attribute 'time: min')", + "dimensions":"longitude latitude time height2m", + "frequency":"day", + "long_name":"Daily Minimum Near-Surface Air Temperature", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tasmin", + "positive":"", + "standard_name":"air_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "tslsi":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean (comment: over land and sea ice)", + "comment":"'skin' temperature of all surfaces except open ocean.", + "dimensions":"longitude latitude time", + "frequency":"day", + "long_name":"Surface Temperature Where Land or Sea Ice", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tslsi", + "positive":"", + "standard_name":"surface_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "ua":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Eastward Wind", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"ua", + "positive":"", + "standard_name":"eastward_wind", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "uas":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Eastward component of the near-surface (usually, 10 meters) wind", + "dimensions":"longitude latitude time height10m", + "frequency":"day", + "long_name":"Eastward Near-Surface Wind", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"uas", + "positive":"", + "standard_name":"eastward_wind", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "va":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Northward Wind", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"va", + "positive":"", + "standard_name":"northward_wind", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "vas":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Northward component of the near surface wind", + "dimensions":"longitude latitude time height10m", + "frequency":"day", + "long_name":"Northward Near-Surface Wind", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"vas", + "positive":"", + "standard_name":"northward_wind", + "type":"real", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "wap":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"Omega (vertical velocity in pressure coordinates, positive downwards)", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"omega (=dp/dt)", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"wap", + "positive":"", + "standard_name":"lagrangian_tendency_of_air_pressure", + "type":"real", + "units":"Pa s-1", + "valid_max":"", + "valid_min":"" + }, + "zg":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"", + "dimensions":"longitude latitude plev8 time", + "frequency":"day", + "long_name":"Geopotential Height", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"zg", + "positive":"", + "standard_name":"geopotential_height", + "type":"real", + "units":"m", + "valid_max":"", + "valid_min":"" + } + } +} \ No newline at end of file diff --git a/demo1/obs4MIPs_CMOR_tables/obs4MIPs_Amon.json b/demo/Tables/obs4MIPs_Amon.json similarity index 77% rename from demo1/obs4MIPs_CMOR_tables/obs4MIPs_Amon.json rename to demo/Tables/obs4MIPs_Amon.json index d0d7c4a..ed3c156 100644 --- a/demo1/obs4MIPs_CMOR_tables/obs4MIPs_Amon.json +++ b/demo/Tables/obs4MIPs_Amon.json @@ -1,25 +1,24 @@ { "Header":{ - "Conventions":"CF-1.6 CMIP-6.0", + "Conventions":"CF-1.7 ODS-2.0", "approx_interval":"30.00000", "cmor_version":"3.2", - "data_specs_version":"01.00.05", - "frequency":"mon", + "data_specs_version":"01.00.13", "generic_levels":"alevel alevhalf", "mip_era":"CMIP6", "missing_value":"1e20", - "product":"output", + "product":"observations", "realm":"atmos", - "table_date":"05 April 2017", - "table_id":"Table Amon" + "table_date":"17 July 2017", + "table_id":"Amon" }, - "axis_entry":null, "variable_entry":{ "ccb":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Where convective cloud is present in the grid cell, the instantaneous cloud base altitude should be that of the bottom of the lowest level containing convective cloud. Missing data should be reported in the absence of convective cloud. The time mean should be calculated from these quantities averaging over occasions when convective cloud is present only, and should contain missing data for occasions when no convective cloud is present during the meaning period.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Air Pressure at Convective Cloud Base", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -33,9 +32,10 @@ }, "cct":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Where convective cloud is present in the grid cell, the instantaneous cloud top altitude should be that of the top of the highest level containing convective cloud. Missing data should be reported in the absence of convective cloud. The time mean should be calculated from these quantities averaging over occasions when convective cloud is present only, and should contain missing data for occasions when no convective cloud is present during the meaning period.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Air Pressure at Convective Cloud Top", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -49,9 +49,10 @@ }, "cfc113global":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of CFC113", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -65,9 +66,10 @@ }, "cfc11global":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of CFC11", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -81,9 +83,10 @@ }, "cfc12global":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of CFC12", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -100,6 +103,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Mole Fraction of CH4", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -113,13 +117,14 @@ }, "ch4Clim":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"", "dimensions":"longitude latitude plev19 time2", + "frequency":"monClim", "long_name":"Mole Fraction of CH4", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"ch4Clim", + "out_name":"ch4", "positive":"", "standard_name":"mole_fraction_of_methane_in_air", "type":"real", @@ -129,9 +134,10 @@ }, "ch4global":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Global Mean Mole Fraction of CH4", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of CH4", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -145,13 +151,14 @@ }, "ch4globalClim":{ "cell_measures":"", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"Global Mean Mole Fraction of CH4", "dimensions":"time2", + "frequency":"monClim", "long_name":"Global Mean Mole Fraction of CH4", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"ch4globalClim", + "out_name":"ch4global", "positive":"", "standard_name":"mole_fraction_of_methane_in_air", "type":"real", @@ -161,9 +168,10 @@ }, "ci":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Fraction of time that convection occurs in the grid cell.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Fraction of Time Convection Occurs", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -177,9 +185,10 @@ }, "cl":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Percentage cloud cover, including both large-scale and convective cloud.", "dimensions":"longitude latitude alevel time", + "frequency":"mon", "long_name":"Cloud Area Fraction", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -191,11 +200,46 @@ "valid_max":"", "valid_min":"" }, + "clCCI":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Percentage cloud cover in optical depth categories.", + "dimensions":"longitude latitude plev7c tau time", + "frequency":"mon", + "long_name":"CCI Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clCCI", + "positive":"", + "standard_name":"cloud_area_fraction_in_atmosphere_layer", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "clCLARA":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: mean", + "comment":"Percentage cloud cover in optical depth categories.", + "dimensions":"longitude latitude plev7c tau time", + "frequency":"mon", + "long_name":"CLARA Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clCLARA", + "positive":"", + "standard_name":"cloud_area_fraction_in_atmosphere_layer", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, "cli":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Includes both large-scale and convective cloud. This is calculated as the mass of cloud ice in the grid cell divided by the mass of air (including the water in all phases) in the grid cell. It includes precipitating hydrometeors ONLY if the precipitating hydrometeors affect the calculation of radiative transfer in model.", "dimensions":"longitude latitude alevel time", + "frequency":"mon", "long_name":"Mass Fraction of Cloud Ice", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -209,9 +253,10 @@ }, "clivi":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"mass of ice water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Includes precipitating frozen hydrometeors ONLY if the precipitating hydrometeor affects the calculation of radiative transfer in model.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Ice Water Path", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -225,9 +270,10 @@ }, "clt":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Total cloud area fraction for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Includes both large-scale and convective cloud.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Total Cloud Fraction", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -239,11 +285,46 @@ "valid_max":"", "valid_min":"" }, + "cltCCI":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total cloud area fraction for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Includes both large-scale and convective cloud.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CCI Total Cloud Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cltCCI", + "positive":"", + "standard_name":"cloud_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "cltCLARA":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: mean", + "comment":"Total cloud area fraction for the whole atmospheric column, as seen from the surface or the top of the atmosphere. Includes both large-scale and convective cloud.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CLARA Total Cloud Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cltCLARA", + "positive":"", + "standard_name":"cloud_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, "clw":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Includes both large-scale and convective cloud. Calculate as the mass of cloud liquid water in the grid cell divided by the mass of air (including the water in all phases) in the grid cells. Precipitating hydrometeors are included ONLY if the precipitating hydrometeors affect the calculation of radiative transfer in model.", "dimensions":"longitude latitude alevel time", + "frequency":"mon", "long_name":"Mass Fraction of Cloud Liquid Water", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -255,11 +336,80 @@ "valid_max":"", "valid_min":"" }, + "clwCCI":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Percentage liquid cloud cover in optical depth categories.", + "dimensions":"longitude latitude plev7c tau time", + "frequency":"mon", + "long_name":"CCI Liquid Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clwCCI", + "positive":"", + "standard_name":"liquid_water_cloud_area_fraction_in_atmosphere_layer", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "clwCLARA":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: mean", + "comment":"Percentage liquid cloud cover in optical depth categories.", + "dimensions":"longitude latitude plev7c tau time", + "frequency":"mon", + "long_name":"CLARA Liquid Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clwCLARA", + "positive":"", + "standard_name":"liquid_water_cloud_area_fraction_in_atmosphere_layer", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "clwtCCI":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CCI Total Liquid Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clwtCCI", + "positive":"", + "standard_name":"liquid_water_cloud_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "clwtCLARA":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CLARA Total Liquid Cloud Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"clwtCLARA", + "positive":"", + "standard_name":"liquid_water_cloud_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, "clwvi":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Mass of condensed (liquid + ice) water in the column divided by the area of the column (not just the area of the cloudy portion of the column). Includes precipitating hydrometeors ONLY if the precipitating hydrometeors affect the calculation of radiative transfer in model.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Condensed Water Path", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -276,6 +426,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Mole Fraction of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -289,13 +440,14 @@ }, "co2Clim":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"", "dimensions":"longitude latitude plev19 time2", + "frequency":"monClim", "long_name":"Mole Fraction of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"co2Clim", + "out_name":"co2", "positive":"", "standard_name":"mole_fraction_of_carbon_dioxide_in_air", "type":"real", @@ -305,9 +457,10 @@ }, "co2mass":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Total atmospheric mass of Carbon Dioxide", "dimensions":"time", + "frequency":"mon", "long_name":"Total Atmospheric Mass of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -321,13 +474,14 @@ }, "co2massClim":{ "cell_measures":"", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"Total atmospheric mass of Carbon Dioxide", "dimensions":"time2", + "frequency":"monClim", "long_name":"Total Atmospheric Mass of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"co2massClim", + "out_name":"co2mass", "positive":"", "standard_name":"atmosphere_mass_of_carbon_dioxide", "type":"real", @@ -337,9 +491,10 @@ }, "evspsbl":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Evaporation at surface: flux of water into the atmosphere due to conversion of both liquid and solid phases to vapor (from underlying surface and vegetation)", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Evaporation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -353,9 +508,10 @@ }, "fco2antt":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"This is requested only for the emission-driven coupled carbon climate model runs. Does not include natural fire sources but, includes all anthropogenic sources, including fossil fuel use, cement production, agricultural burning, and sources associated with anthropogenic land use change excluding forest regrowth.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Carbon Mass Flux into Atmosphere Due to All Anthropogenic Emissions of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -369,9 +525,10 @@ }, "fco2fos":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"This is the prescribed anthropogenic CO2 flux from fossil fuel use, including cement production, and flaring (but not from land-use changes, agricultural burning, forest regrowth, etc.)", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Carbon Mass Flux into Atmosphere Due to Fossil Fuel Emissions of CO2", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -385,9 +542,10 @@ }, "fco2nat":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"This is what the atmosphere sees (on its own grid). This field should be equivalent to the combined natural fluxes of carbon that account for natural exchanges between the atmosphere and land (nep) or ocean (fgco2) reservoirs.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Carbon Mass Flux into the Atmosphere Due to Natural Sources", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -401,9 +559,10 @@ }, "hcfc22global":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of HCFC22", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -417,9 +576,10 @@ }, "hfls":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Upward Latent Heat Flux", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -433,9 +593,10 @@ }, "hfss":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Upward Sensible Heat Flux", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -452,6 +613,7 @@ "cell_methods":"time: mean", "comment":"The relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Relative Humidity", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -465,9 +627,10 @@ }, "hurs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"The relative humidity with respect to liquid water for T> 0 C, and with respect to ice for T<0 C.", "dimensions":"longitude latitude time height2m", + "frequency":"mon", "long_name":"Near-Surface Relative Humidity", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -484,6 +647,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Specific Humidity", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -497,9 +661,10 @@ }, "huss":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Near-surface (usually, 2 meter) specific humidity.", "dimensions":"longitude latitude time height2m", + "frequency":"mon", "long_name":"Near-Surface Specific Humidity", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -513,9 +678,10 @@ }, "mc":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"The net mass flux should represent the difference between the updraft and downdraft components. The flux is computed as the mass divided by the area of the grid cell.", "dimensions":"longitude latitude alevhalf time", + "frequency":"mon", "long_name":"Convective Mass Flux", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -532,6 +698,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Mole Fraction of N2O", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -545,13 +712,14 @@ }, "n2oClim":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"", "dimensions":"longitude latitude plev19 time2", + "frequency":"monClim", "long_name":"Mole Fraction of N2O", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"n2oClim", + "out_name":"n2o", "positive":"", "standard_name":"mole_fraction_of_nitrous_oxide_in_air", "type":"real", @@ -561,9 +729,10 @@ }, "n2oglobal":{ "cell_measures":"", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Global mean Nitrous Oxide (N2O)", "dimensions":"time", + "frequency":"mon", "long_name":"Global Mean Mole Fraction of N2O", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -577,13 +746,14 @@ }, "n2oglobalClim":{ "cell_measures":"", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"Global mean Nitrous Oxide (N2O)", "dimensions":"time2", + "frequency":"monClim", "long_name":"Global Mean Mole Fraction of N2O", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"n2oglobalClim", + "out_name":"n2oglobal", "positive":"", "standard_name":"mole_fraction_of_nitrous_oxide_in_air", "type":"real", @@ -596,6 +766,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Mole Fraction of O3", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -609,13 +780,14 @@ }, "o3Clim":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"", "dimensions":"longitude latitude plev19 time2", + "frequency":"monClim", "long_name":"Mole Fraction of O3", "ok_max_mean_abs":"", "ok_min_mean_abs":"", - "out_name":"o3Clim", + "out_name":"o3", "positive":"", "standard_name":"mole_fraction_of_ozone_in_air", "type":"real", @@ -623,11 +795,46 @@ "valid_max":"", "valid_min":"" }, + "pctCCI":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CCI Mean Cloud Top Pressure", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"pctCCI", + "positive":"", + "standard_name":"air_pressure_at_cloud_top", + "type":"real", + "units":"Pa", + "valid_max":"", + "valid_min":"" + }, + "pctCLARA":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"CLARA Mean Cloud Top Pressure", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"pctCLARA", + "positive":"", + "standard_name":"air_pressure_at_cloud_top", + "type":"real", + "units":"Pa", + "valid_max":"", + "valid_min":"" + }, "pfull":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"Air pressure on model levels", "dimensions":"longitude latitude alevel time2", + "frequency":"mon", "long_name":"Pressure on Model Levels", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -641,9 +848,10 @@ }, "phalf":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean within years time: mean over years", + "cell_methods":"area: mean time: mean within years time: mean over years", "comment":"Air pressure on model half-levels", "dimensions":"longitude latitude alevhalf time2", + "frequency":"mon", "long_name":"Pressure on Model Half-Levels", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -657,9 +865,10 @@ }, "pr":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"includes both liquid and solid phases", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Precipitation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -673,9 +882,10 @@ }, "prc":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Convective precipitation at surface; includes both liquid and solid phases.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Convective Precipitation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -689,9 +899,10 @@ }, "prsn":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"at surface; includes precipitation of all forms of water in the solid phase", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Snowfall Flux", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -705,9 +916,10 @@ }, "prw":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"vertically integrated through the atmospheric column", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Water Vapor Path", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -721,9 +933,10 @@ }, "ps":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"surface pressure (not mean sea-level pressure), 2-D field to calculate the 3-D pressure field from hybrid coordinates", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Air Pressure", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -737,9 +950,10 @@ }, "psl":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Sea Level Pressure", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Sea Level Pressure", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -753,9 +967,10 @@ }, "rlds":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downwelling Longwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -769,9 +984,10 @@ }, "rldscs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Surface downwelling clear-sky longwave radiation", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downwelling Clear-Sky Longwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -785,9 +1001,10 @@ }, "rlus":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Upwelling Longwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -801,9 +1018,10 @@ }, "rlut":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"at the top of the atmosphere (to be compared with satellite measurements)", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"TOA Outgoing Longwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -817,9 +1035,10 @@ }, "rlutcs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"TOA Outgoing Clear-Sky Longwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -833,9 +1052,10 @@ }, "rsds":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"surface solar irradiance for UV calculations", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downwelling Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -849,9 +1069,10 @@ }, "rsdscs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"surface solar irradiance clear sky for UV calculations", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downwelling Clear-Sky Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -865,9 +1086,10 @@ }, "rsdt":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Shortwave radiation incident at the top of the atmosphere", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"TOA Incident Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -881,9 +1103,10 @@ }, "rsus":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Upwelling Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -897,9 +1120,10 @@ }, "rsuscs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", - "comment":"Surface upwelling clear-sky shortwave radiation", + "cell_methods":"area: time: mean", + "comment":"Surface Upwelling Clear-sky Shortwave Radiation", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Upwelling Clear-Sky Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -913,9 +1137,10 @@ }, "rsut":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"at the top of the atmosphere", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"TOA Outgoing Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -929,9 +1154,10 @@ }, "rsutcs":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Calculated in the absence of clouds.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"TOA Outgoing Clear-Sky Shortwave Radiation", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -945,9 +1171,10 @@ }, "rtmt":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Net Downward Radiative Flux at Top of Model : I.e., at the top of that portion of the atmosphere where dynamics are explicitly treated by the model. This is reported only if it differs from the net downward radiative flux at the top of the atmosphere.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Net Downward Flux at Top of Model", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -961,9 +1188,10 @@ }, "sbl":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"The snow and ice sublimation flux is the loss of snow and ice mass per unit area from the surface resulting from their direct conversion to water vapor that enters the atmosphere.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Snow and Ice Sublimation Flux", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -977,9 +1205,10 @@ }, "sci":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Fraction of time that shallow convection occurs in the grid cell.", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Fraction of Time Shallow Convection Occurs", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -992,10 +1221,11 @@ "valid_min":"" }, "sfcWind":{ - "cell_measures":"", - "cell_methods":"time: mean", + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", "comment":"near-surface (usually, 10 meters) wind speed.", "dimensions":"longitude latitude time height10m", + "frequency":"mon", "long_name":"Near-Surface Wind Speed", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1012,6 +1242,7 @@ "cell_methods":"time: mean", "comment":"Air Temperature", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Air Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1025,9 +1256,10 @@ }, "tas":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"near-surface (usually, 2 meter) air temperature", "dimensions":"longitude latitude time height2m", + "frequency":"mon", "long_name":"Near-Surface Air Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1041,9 +1273,10 @@ }, "tasmax":{ "cell_measures":"area: areacella", - "cell_methods":"time: maximum within days time: mean over days", + "cell_methods":"area: mean time: maximum within days time: mean over days", "comment":"maximum near-surface (usually, 2 meter) air temperature (add cell_method attribute 'time: max')", "dimensions":"longitude latitude time height2m", + "frequency":"mon", "long_name":"Daily Maximum Near-Surface Air Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1057,9 +1290,10 @@ }, "tasmin":{ "cell_measures":"area: areacella", - "cell_methods":"time: minimum within days time: mean over days", + "cell_methods":"area: mean time: minimum within days time: mean over days", "comment":"minimum near-surface (usually, 2 meter) air temperature (add cell_method attribute 'time: min')", "dimensions":"longitude latitude time height2m", + "frequency":"mon", "long_name":"Daily Minimum Near-Surface Air Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1073,9 +1307,10 @@ }, "tauu":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Downward eastward wind stress at the surface", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downward Eastward Wind Stress", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1089,9 +1324,10 @@ }, "tauv":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Downward northward wind stress at the surface", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Downward Northward Wind Stress", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1105,9 +1341,10 @@ }, "ts":{ "cell_measures":"area: areacella", - "cell_methods":"time: mean", + "cell_methods":"area: time: mean", "comment":"Temperature of the lower boundary of the atmosphere", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Surface Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1124,6 +1361,7 @@ "cell_methods":"area: areacella", "comment":"", "dimensions":"longitude latitude time", + "frequency":"mon", "long_name":"Top of Atmosphere Brightness Temperature", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1140,6 +1378,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Eastward Wind", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1152,10 +1391,11 @@ "valid_min":"" }, "uas":{ - "cell_measures":"", - "cell_methods":"time: mean", + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", "comment":"Eastward component of the near-surface (usually, 10 meters) wind", "dimensions":"longitude latitude time height10m", + "frequency":"mon", "long_name":"Eastward Near-Surface Wind", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1172,6 +1412,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Northward Wind", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1184,10 +1425,11 @@ "valid_min":"" }, "vas":{ - "cell_measures":"", - "cell_methods":"time: mean", + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", "comment":"Northward component of the near surface wind", "dimensions":"longitude latitude time height10m", + "frequency":"mon", "long_name":"Northward Near-Surface Wind", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1204,6 +1446,7 @@ "cell_methods":"time: mean", "comment":"Omega (vertical velocity in pressure coordinates, positive downwards)", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"omega (=dp/dt)", "ok_max_mean_abs":"", "ok_min_mean_abs":"", @@ -1220,6 +1463,7 @@ "cell_methods":"time: mean", "comment":"", "dimensions":"longitude latitude plev19 time", + "frequency":"mon", "long_name":"Geopotential Height", "ok_max_mean_abs":"", "ok_min_mean_abs":"", diff --git a/demo/Tables/obs4MIPs_Lmon.json b/demo/Tables/obs4MIPs_Lmon.json new file mode 100644 index 0000000..b5e19e8 --- /dev/null +++ b/demo/Tables/obs4MIPs_Lmon.json @@ -0,0 +1,969 @@ +{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "approx_interval":"30.00000", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "generic_levels":"", + "mip_era":"CMIP6", + "missing_value":"1e20", + "product":"observations", + "realm":"land", + "table_date":"17 July 2017", + "table_id":"Lmon" + }, + "variable_entry":{ + "baresoilFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by bare soil.", + "dimensions":"longitude latitude time typebare", + "frequency":"mon", + "long_name":"Bare Soil Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"baresoilFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "burntFractionAll":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of grid cell burned due to all fires including natural and anthropogenic fires and those associated with anthropogenic land use change", + "dimensions":"longitude latitude time typeburnt", + "frequency":"mon", + "long_name":"Percentage of Entire Grid cell that is Covered by Burnt Vegetation (All Classes)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"burntFractionAll", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "c3PftFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by C3 PFTs (including grass, crops, and trees).", + "dimensions":"longitude latitude time typec3pft", + "frequency":"mon", + "long_name":"Total C3 PFT Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"c3PftFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "c4PftFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by C4 PFTs (including grass and crops).", + "dimensions":"longitude latitude time typec4pft", + "frequency":"mon", + "long_name":"Total C4 PFT Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"c4PftFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "cCwd":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in woody debris (dead organic matter composed of coarse wood. It is distinct from litter)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Coarse Woody Debris", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cCwd", + "positive":"", + "standard_name":"wood_debris_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cLeaf":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in leaves.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Leaves", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cLeaf", + "positive":"", + "standard_name":"leaf_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cLitter":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Litter Pool", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cLitter", + "positive":"", + "standard_name":"litter_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cLitterAbove":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Above-Ground Litter", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cLitterAbove", + "positive":"", + "standard_name":"surface_litter_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cLitterBelow":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Below-Ground Litter", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cLitterBelow", + "positive":"", + "standard_name":"subsurface_litter_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cProduct":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in that has been removed from the environment through land use change.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Products of Land Use Change", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cProduct", + "positive":"", + "standard_name":"carbon_content_of_products_of_anthropogenic_land_use_change", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cRoot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in roots, including fine and coarse roots.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Roots", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cRoot", + "positive":"", + "standard_name":"root_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cSoilFast":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in fast soil pool. Fast means a lifetime of less than 10 years for reference climate conditions (20th century) in the absence of water limitations.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Fast Soil Pool", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cSoilFast", + "positive":"", + "standard_name":"fast_soil_pool_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cSoilMedium":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in medium (rate) soil pool. Medium means a lifetime of more than than 10 years and less than 100 years for reference climate conditions (20th century) in the absence of water limitations.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Medium Soil Pool", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cSoilMedium", + "positive":"", + "standard_name":"medium_soil_pool_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cSoilSlow":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in slow soil pool. Slow means a lifetime of more than 100 years for reference climate (20th century) in the absence of water limitations.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Slow Soil Pool", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cSoilSlow", + "positive":"", + "standard_name":"slow_soil_pool_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cVeg":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass per unit area in vegetation.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass in Vegetation", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cVeg", + "positive":"", + "standard_name":"vegetation_carbon_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "cropFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by crop.", + "dimensions":"longitude latitude time typecrop", + "frequency":"mon", + "long_name":"Crop Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"cropFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "evspsblsoi":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Water evaporation from soil (including sublimation).", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Water Evaporation from Soil", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"evspsblsoi", + "positive":"up", + "standard_name":"water_evaporation_flux_from_soil", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "evspsblveg":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The canopy evaporation and sublimation (if present in model); may include dew formation as a negative flux.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Evaporation from Canopy", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"evspsblveg", + "positive":"up", + "standard_name":"water_evaporation_flux_from_canopy", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fFire":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"CO2 emissions (expressed as a carbon mass flux per unit area) from natural fires and human ignition fires as calculated by the fire module of the dynamic vegetation model, but excluding any CO2 flux from fire included in fLuc (CO2 Flux to Atmosphere from Land Use Change).", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to CO2 Emission from Fire", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fFire", + "positive":"up", + "standard_name":"surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_emission_from_fires_excluding_anthropogenic_land_use_change", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fGrazing":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area due to grazing on land", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Grazing on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fGrazing", + "positive":"up", + "standard_name":"surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_emission_from_grazing", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fHarvest":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area due to crop harvesting", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Crop Harvesting", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fHarvest", + "positive":"up", + "standard_name":"surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_emission_from_crop_harvesting", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fLitterSoil":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area into soil from litter (dead plant material in or above the soil).", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Total Carbon Mass Flux from Litter to Soil", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fLitterSoil", + "positive":"", + "standard_name":"carbon_mass_flux_into_soil_from_litter", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fVegLitter":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Total Carbon Mass Flux from Vegetation to Litter", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fVegLitter", + "positive":"", + "standard_name":"litter_carbon_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fVegSoil":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area from vegetation directly into soil, without intermediate conversion to litter.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Total Carbon Mass Flux from Vegetation Directly to Soil", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fVegSoil", + "positive":"", + "standard_name":"carbon_mass_flux_into_soil_from_vegetation_excluding_litter", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "fapar":{ + "cell_measures":"time: mean area: mean where land", + "cell_methods":"area: areacella", + "comment":"The fraction of incoming solar radiation in the photosynthetically active radiation spectral region that is absorbed by a vegetation canopy.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Fraction of Absorbed Photosynthetically Active Radiation", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"fapar", + "positive":"", + "standard_name":"fraction_of_surface_downwelling_photosynthetic_radiative_flux_absorbed_by_vegetation", + "type":"real", + "units":"1", + "valid_max":"1.0", + "valid_min":"0.0" + }, + "gpp":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux out of Atmosphere due to Gross Primary Production on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"gpp", + "positive":"down", + "standard_name":"gross_primary_productivity_of_biomass_expressed_as_carbon", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "grassFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by natural grass.", + "dimensions":"longitude latitude time typenatgr", + "frequency":"mon", + "long_name":"Natural Grass Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"grassFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "lai":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Leaf Area Index", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"lai", + "positive":"", + "standard_name":"leaf_area_index", + "type":"real", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "landCoverFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of grid cell area occupied by different model vegetation/land cover categories. The categories may differ from model to model, depending on each model's subgrid land cover category definitions. Categories may include natural vegetation, anthropogenic vegetation, bare soil, lakes, urban areas, glaciers, etc. Sum of all should equal the fraction of the grid-cell that is land.", + "dimensions":"longitude latitude vegtype time", + "frequency":"mon", + "long_name":"Plant Functional Type Grid Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"landCoverFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "mrfso":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The mass per unit area (summed over all model layers) of frozen water.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Soil Frozen Water Content", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrfso", + "positive":"", + "standard_name":"soil_frozen_water_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "mrlsl":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The mass of water in all phases, including ice, in soil layers. Report as missing for grid cells with no land.", + "dimensions":"longitude latitude sdepth time", + "frequency":"mon", + "long_name":"Water Content of Soil Layer", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrlsl", + "positive":"", + "standard_name":"moisture_content_of_soil_layer", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "mrro":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The total run-off (including drainage through the base of the soil model) per unit area leaving the land portion of the grid cell.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Total Runoff", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrro", + "positive":"", + "standard_name":"runoff_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "mrros":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The total surface run off leaving the land portion of the grid cell (excluding drainage through the base of the soil model).", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Surface Runoff", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrros", + "positive":"", + "standard_name":"surface_runoff_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "mrso":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"the mass per unit area (summed over all soil layers) of water in all phases.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Total Soil Moisture Content", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrso", + "positive":"", + "standard_name":"soil_moisture_content", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "mrsos":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The mass of water in all phases in the upper 10cm of the soil layer.", + "dimensions":"longitude latitude time sdepth1", + "frequency":"mon", + "long_name":"Moisture in Upper Portion of Soil Column", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrsos", + "positive":"", + "standard_name":"moisture_content_of_soil_layer", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "nbp":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"This is the net mass flux of carbon from atmosphere into land, calculated as photosynthesis MINUS the sum of plant and soil respiration, carbon fluxes from fire, harvest, grazing and land use change. Positive flux is into the land.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux out of Atmosphere due to Net Biospheric Production on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"nbp", + "positive":"down", + "standard_name":"surface_net_downward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_all_land_processes", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "ndvi":{ + "cell_measures":"time: mean area: mean where land", + "cell_methods":"area: areacella", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Normalized Difference Vegetation Index", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"ndvi", + "positive":"", + "standard_name":"normalized_difference_vegetation_index", + "type":"real", + "units":"1", + "valid_max":"1.0", + "valid_min":"-0.1" + }, + "npp":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux out of Atmosphere due to Net Primary Production on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"npp", + "positive":"down", + "standard_name":"net_primary_productivity_of_biomass_expressed_as_carbon", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "nppLeaf":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"This is the rate of carbon uptake by leaves due to NPP", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux due to NPP Allocation to Leaf", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"nppLeaf", + "positive":"down", + "standard_name":"net_primary_productivity_of_carbon_accumulated_in_leaves", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "nppRoot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"This is the rate of carbon uptake by roots due to NPP", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux due to NPP Allocation to Roots", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"nppRoot", + "positive":"down", + "standard_name":"net_primary_productivity_of_carbon_accumulated_in_roots", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "nppWood":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"This is the rate of carbon uptake by wood due to NPP", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux due to NPP Allocation to Wood", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"nppWood", + "positive":"down", + "standard_name":"net_primary_productivity_of_carbon_accumulated_in_wood", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "pastureFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by anthropogenic pasture.", + "dimensions":"longitude latitude time typepasture", + "frequency":"mon", + "long_name":"Anthropogenic Pasture Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"pastureFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "prveg":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"The precipitation flux that is intercepted by the vegetation canopy (if present in model) before reaching the ground.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Precipitation onto Canopy", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"prveg", + "positive":"", + "standard_name":"precipitation_flux_onto_canopy", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "rGrowth":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Growth Autotrophic Respiration on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rGrowth", + "positive":"up", + "standard_name":"surface_upward_carbon_mass_flux_due_to_plant_respiration_for_biomass_growth", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "rMaint":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Maintenance Autotrophic Respiration on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rMaint", + "positive":"up", + "standard_name":"surface_upward_carbon_mass_flux_due_to_plant_respiration_for_biomass_maintenance", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "ra":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area into atmosphere due to autotrophic respiration on land (respiration by producers) [see rh for heterotrophic production]", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Autotrophic (Plant) Respiration on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"ra", + "positive":"up", + "standard_name":"plant_respiration_carbon_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "residualFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is land and is covered by neither vegetation nor bare-soil (e.g., urban, ice, lakes, etc.)", + "dimensions":"longitude latitude time typeresidual", + "frequency":"mon", + "long_name":"Fraction of Grid Cell that is Land but Neither Vegetation-Covered nor Bare Soil", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"residualFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "rh":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Carbon mass flux per unit area into atmosphere due to heterotrophic respiration on land (respiration by consumers)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Carbon Mass Flux into Atmosphere due to Heterotrophic Respiration on Land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rh", + "positive":"up", + "standard_name":"heterotrophic_respiration_carbon_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "shrubFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by shrub.", + "dimensions":"longitude latitude time typeshrub", + "frequency":"mon", + "long_name":"Shrub Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"shrubFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "tran":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Transpiration (may include dew formation as a negative flux).", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Transpiration", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tran", + "positive":"up", + "standard_name":"transpiration_flux", + "type":"real", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "treeFrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by trees.", + "dimensions":"longitude latitude time typetree", + "frequency":"mon", + "long_name":"Tree Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"treeFrac", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "treeFracPrimDec":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of the entire grid cell that is covered by total primary deciduous trees.", + "dimensions":"longitude latitude time typepdec", + "frequency":"mon", + "long_name":"Total Primary Deciduous Tree Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"treeFracPrimDec", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "treeFracPrimEver":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by primary evergreen trees.", + "dimensions":"longitude latitude time typepever", + "frequency":"mon", + "long_name":"Total Primary Evergreen Tree Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"treeFracPrimEver", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "treeFracSecDec":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by secondary deciduous trees.", + "dimensions":"longitude latitude time typesdec", + "frequency":"mon", + "long_name":"Total Secondary Deciduous Tree Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"treeFracSecDec", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "treeFracSecEver":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land over all_area_types time: mean", + "comment":"Percentage of entire grid cell that is covered by secondary evergreen trees.", + "dimensions":"longitude latitude time typesever", + "frequency":"mon", + "long_name":"Total Secondary Evergreen Tree Cover Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"treeFracSecEver", + "positive":"", + "standard_name":"area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "tsl":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where land time: mean", + "comment":"Temperature of each soil layer. Reported as missing for grid cells with no land.", + "dimensions":"longitude latitude sdepth time", + "frequency":"mon", + "long_name":"Temperature of Soil", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"tsl", + "positive":"", + "standard_name":"soil_temperature", + "type":"real", + "units":"K", + "valid_max":"", + "valid_min":"" + } + } +} \ No newline at end of file diff --git a/demo/obs4MIPs_Omon_composite.json b/demo/Tables/obs4MIPs_Omon.json similarity index 99% rename from demo/obs4MIPs_Omon_composite.json rename to demo/Tables/obs4MIPs_Omon.json index 1cb3c6c..72220ed 100644 --- a/demo/obs4MIPs_Omon_composite.json +++ b/demo/Tables/obs4MIPs_Omon.json @@ -1,16 +1,16 @@ { "Header":{ - "Conventions":"CF-1.7 CMIP-6.0", + "Conventions":"CF-1.7 ODS-2.0", "approx_interval":"30.00000", "cmor_version":"3.2", - "data_specs_version":"01.00.11", + "data_specs_version":"01.00.13", "generic_levels":"olevel", "mip_era":"CMIP6", "missing_value":"1e20", "product":"observations", "realm":"ocean", - "table_date":"19 June 2017", - "table_id":"Table obs4MIPs_Omon" + "table_date":"17 July 2017", + "table_id":"Omon" }, "variable_entry":{ "agessc":{ @@ -4419,7 +4419,7 @@ "tos":{ "cell_measures":"area: areacello", "cell_methods":"area: mean where sea time: mean", - "comment":"temperature of liquid ocean. Note that the correct standard_name for this variable is 'sea_surface_temperature', not 'surface_temperature', but this was discovered too late to correct. To maintain consistency across CMIP5 models, the wrong standard_name will continue to be used.", + "comment":"Temperature of upper boundary of the liquid ocean, including temperatures below sea-ice and floating ice shelves.", "dimensions":"longitude latitude time", "frequency":"mon", "long_name":"Sea Surface Temperature", @@ -4436,7 +4436,7 @@ "tosga":{ "cell_measures":"", "cell_methods":"area: mean where sea time: mean", - "comment":"This may differ from 'surface temperature' in regions of sea ice.This may differ from 'surface temperature' in regions of sea ice.For models using conservative temperature as prognostic field, they should report the SST as surface potent", + "comment":"Temperature of upper boundary of the liquid ocean, including temperatures below sea-ice and floating ice shelves.", "dimensions":"time", "frequency":"mon", "long_name":"Global Average Sea Surface Temperature", @@ -4453,7 +4453,7 @@ "tossq":{ "cell_measures":"area: areacello", "cell_methods":"area: mean where sea time: mean", - "comment":"square of temperature of liquid ocean, averaged over the day.", + "comment":"Square of temperature of liquid ocean.", "dimensions":"longitude latitude time", "frequency":"mon", "long_name":"Square of Sea Surface Temperature", diff --git a/demo/Tables/obs4MIPs_SImon.json b/demo/Tables/obs4MIPs_SImon.json new file mode 100644 index 0000000..7811041 --- /dev/null +++ b/demo/Tables/obs4MIPs_SImon.json @@ -0,0 +1,1530 @@ +{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "approx_interval":"30.00000", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "generic_levels":"", + "mip_era":"CMIP6", + "missing_value":"1e20", + "product":"observations", + "realm":"seaIce", + "table_date":"17 July 2017", + "table_id":"SImon" + }, + "variable_entry":{ + "siage":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Age of sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Age of sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siage", + "positive":"", + "standard_name":"age_of_sea_ice", + "type":"", + "units":"s", + "valid_max":"", + "valid_min":"" + }, + "siareaacrossline":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"net (sum of transport in all directions) sea ice area transport through the following four passages, positive into the Arctic Ocean 1. Fram Strait = (11.5W,81.3N to (10.5E,79.6N) 2. Canadian Archipelago = (128.2W,70.6N) to (59.3W,82.1N) 3. Barents opening = (16.8E,76.5N) to (19.2E,70.2N) 4. Bering Strait = (171W,66.2N) to (166W,65N)", + "dimensions":"siline time", + "frequency":"mon", + "long_name":"Sea ice area flux through straits", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siareaacrossline", + "positive":"", + "standard_name":"sea_ice_area_transport_across_line", + "type":"", + "units":"m2 s-1", + "valid_max":"", + "valid_min":"" + }, + "siarean":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"total area of sea ice in the Northern hemisphere", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice area North", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siarean", + "positive":"", + "standard_name":"sea_ice_area", + "type":"", + "units":"1e6 km2", + "valid_max":"", + "valid_min":"" + }, + "siareas":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"total area of sea ice in the Southern hemisphere", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice area South", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siareas", + "positive":"", + "standard_name":"sea_ice_area", + "type":"", + "units":"1e6 km2", + "valid_max":"", + "valid_min":"" + }, + "sicompstren":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Computed strength of the ice pack, defined as the energy (J m-2) dissipated per unit area removed from the ice pack under compression, and assumed proportional to the change in potential energy caused by ridging. For Hibler-type models, this is P (= P*hexp(-C(1-A)))", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Compressive sea ice strength", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sicompstren", + "positive":"", + "standard_name":"compressive_strength_of_sea_ice", + "type":"", + "units":"N m-1", + "valid_max":"", + "valid_min":"" + }, + "siconc":{ + "cell_measures":"area: areacello", + "cell_methods":"area: mean where sea time: mean", + "comment":"Area fraction of grid cell covered by sea ice", + "dimensions":"longitude latitude time typesi", + "frequency":"mon", + "long_name":"Sea Ice Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siconc", + "positive":"", + "standard_name":"sea_ice_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "siconco":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Area fraction of grid cell covered by sea ice", + "dimensions":"longitude latitude time typesi", + "frequency":"mon", + "long_name":"Sea Ice Area Fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siconco", + "positive":"", + "standard_name":"sea_ice_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "sidconcdyn":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total change in sea-ice area fraction through dynamics-related processes (advection, divergence...)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice area fraction change from dynamics", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidconcdyn", + "positive":"", + "standard_name":"tendency_of_sea_ice_area_fraction_due_to_dynamics", + "type":"", + "units":"s-1", + "valid_max":"", + "valid_min":"" + }, + "sidconcth":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total change in sea-ice area fraction through thermodynamic processes", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice area fraction change from thermodynamics", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidconcth", + "positive":"", + "standard_name":"tendency_of_sea_ice_area_fraction_due_to_thermodynamics", + "type":"", + "units":"s-1", + "valid_max":"", + "valid_min":"" + }, + "sidivvel":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where sea_ice (comment: mask=siconc) time: point", + "comment":"Divergence of sea-ice velocity field (first shear strain invariant)", + "dimensions":"longitude latitude time1", + "frequency":"mon", + "long_name":"Divergence of the sea-ice velocity field", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidivvel", + "positive":"", + "standard_name":"divergence_of_sea_ice_velocity", + "type":"", + "units":"s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassdyn":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total change in sea-ice mass through dynamics-related processes (advection,...) divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change from dynamics", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassdyn", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_dynamics", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassevapsubl":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea-ice mass change through evaporation and sublimation divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through evaporation and sublimation", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassevapsubl", + "positive":"", + "standard_name":"water_evaporation_flux", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassgrowthbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass due to vertical growth of existing sea ice at its base divided by grid-cell area.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through basal growth", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassgrowthbot", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_congelation_ice_accumulation", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassgrowthwat":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass due to sea ice formation in supercooled water (often through frazil formation) divided by grid-cell area. Together, sidmassgrowthwat and sidmassgrowthbot should give total ice growth", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through growth in supercooled open water (aka frazil)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassgrowthwat", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_freezing_in_open_water", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmasslat":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass through lateral melting divided by grid-cell area (report 0 if not explicitly calculated thermodynamically)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Lateral sea ice melt rate", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmasslat", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_lateral_melting", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassmeltbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass through melting at the ice bottom divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through bottom melting", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassmeltbot", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_basal_melting", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassmelttop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass through melting at the ice surface divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through surface melting", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassmelttop", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_surface_melting", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmasssi":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"The rate of change of sea ice mass due to transformation of snow to sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change through snow-to-ice conversion", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmasssi", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_snow_conversion", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmassth":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total change in sea-ice mass from thermodynamic processes divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"sea-ice mass change from thermodynamics", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmassth", + "positive":"", + "standard_name":"tendency_of_sea_ice_amount_due_to_thermodynamics", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmasstranx":{ + "cell_measures":"--MODEL", + "cell_methods":"time: mean", + "comment":"Includes transport of both sea ice and snow by advection", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"X-component of sea-ice mass transport", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmasstranx", + "positive":"", + "standard_name":"sea_ice_x_transport", + "type":"", + "units":"kg s-1", + "valid_max":"", + "valid_min":"" + }, + "sidmasstrany":{ + "cell_measures":"--MODEL", + "cell_methods":"time: mean", + "comment":"Includes transport of both sea ice and snow by advection", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Y-component of sea-ice mass transport", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidmasstrany", + "positive":"", + "standard_name":"sea_ice_y_transport", + "type":"", + "units":"kg s-1", + "valid_max":"", + "valid_min":"" + }, + "sidragbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Oceanic drag coefficient that is used to calculate the oceanic momentum drag on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Ocean drag coefficient", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidragbot", + "positive":"", + "standard_name":"surface_drag_coefficient_for_momentum_in_water", + "type":"", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "sidragtop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Atmospheric drag coefficient that is used to calculate the atmospheric momentum drag on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Atmospheric drag coefficient", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sidragtop", + "positive":"", + "standard_name":"surface_drag_coefficient_for_momentum_in_air", + "type":"", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "siextentn":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"Total area of all Northern-Hemisphere grid cells that are covered by at least 15 % areal fraction of sea ice", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice extent North", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siextentn", + "positive":"", + "standard_name":"sea_ice_extent", + "type":"", + "units":"1e6 km2", + "valid_max":"", + "valid_min":"" + }, + "siextents":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"Total area of all Southern-Hemisphere grid cells that are covered by at least 15 % areal fraction of sea ice", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice extent South", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siextents", + "positive":"", + "standard_name":"sea_ice_extent", + "type":"", + "units":"1e6 km2", + "valid_max":"", + "valid_min":"" + }, + "sifb":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Mean height of sea-ice surface (=snow-ice interface when snow covered) above sea level", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-ice freeboard", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sifb", + "positive":"", + "standard_name":"sea_ice_freeboard", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "siflcondbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the net heat conduction flux at the ice base", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Net conductive heat fluxes in ice at the bottom", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflcondbot", + "positive":"", + "standard_name":"conductive_heat_flux_at_sea_ice_bottom", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflcondtop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the net heat conduction flux at the ice surface", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Net conductive heat flux in ice at the surface", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflcondtop", + "positive":"", + "standard_name":"conductive_heat_flux_at_sea_ice_surface", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflfwbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Total flux of fresh water from water into sea ice divided by grid-cell area; This flux is negative during ice growth (liquid water mass decreases, hence upward flux of freshwater), positive during ice melt (liquid water mass increases, hence downward flux of freshwater)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Freshwater flux from sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflfwbot", + "positive":"", + "standard_name":"freshwater_flux_from_ice", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "siflfwdrain":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Total flux of fresh water from sea-ice surface into underlying ocean. This combines both surface melt water that drains directly into the ocean and the drainage of surface melt pond. By definition, this flux is always positive.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Freshwater flux from sea-ice surface", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflfwdrain", + "positive":"", + "standard_name":"freshwater_flux_from_ice_surface", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sifllatstop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the net latent heat flux over sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Net latent heat flux over sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sifllatstop", + "positive":"", + "standard_name":"surface_upward_latent_heat_flux", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "sifllwdtop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the downwelling longwave flux over sea ice (always positive)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Downwelling longwave flux over sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sifllwdtop", + "positive":"", + "standard_name":"surface_downwelling_longwave_flux_in_air", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "sifllwutop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the upwelling longwave flux over sea ice (always negative)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Upwelling Longwave Flux over Sea Ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sifllwutop", + "positive":"", + "standard_name":"surface_upwelling_longwave_flux_in_air", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflsaltbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Total flux of salt from water into sea ice divided by grid-cell area; salt flux is upward (negative) during ice growth when salt is embedded into the ice and downward (positive) during melt when salt from sea ice is again released to the ocean", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Salt flux from sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflsaltbot", + "positive":"", + "standard_name":"salt_flux_from_ice", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "siflsenstop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the net sensible heat flux over sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Net sensible heat flux over sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflsenstop", + "positive":"", + "standard_name":"surface_upward_sensible_heat_flux", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflsensupbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"the net sensible heat flux under sea ice from the ocean", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Net sensible heat flux under sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflsensupbot", + "positive":"", + "standard_name":"ice_ocean_heat_flux", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflswdbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"The downwelling shortwave flux underneath sea ice (always positive)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Downwelling shortwave flux under sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflswdbot", + "positive":"", + "standard_name":"bottom_downwelling_shortwave_flux_into_ocean", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflswdtop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"The downwelling shortwave flux over sea ice (always positive by sign convention)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Downwelling shortwave flux over sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflswdtop", + "positive":"", + "standard_name":"surface_downwelling_shortwave_flux_in_air", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siflswutop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"The upwelling shortwave flux over sea ice (always negative)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Upwelling Shortwave Flux over Sea Ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siflswutop", + "positive":"", + "standard_name":"surface_upwelling_shortwave_flux_in_air", + "type":"", + "units":"W m-2", + "valid_max":"", + "valid_min":"" + }, + "siforcecoriolx":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"X-component of force on sea ice caused by coriolis force", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Coriolis force term in force balance (x-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforcecoriolx", + "positive":"", + "standard_name":"coriolis_force_on_sea_ice_x", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "siforcecorioly":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Y-component of force on sea ice caused by coriolis force", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Coriolis force term in force balance (y-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforcecorioly", + "positive":"", + "standard_name":"coriolis_force_on_sea_ice_y", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "siforceintstrx":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"X-component of force on sea ice caused by internal stress (divergence of sigma)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Internal stress term in force balance (x-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforceintstrx", + "positive":"", + "standard_name":"internal_stress_in_sea_ice_x", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "siforceintstry":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Y-component of force on sea ice caused by internal stress (divergence of sigma)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Internal stress term in force balance (y-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforceintstry", + "positive":"", + "standard_name":"internal_stress_in_sea_ice_y", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "siforcetiltx":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"X-component of force on sea ice caused by sea-surface tilt", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-surface tilt term in force balance (x-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforcetiltx", + "positive":"", + "standard_name":"sea_surface_tilt_force_on_sea_ice_x", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "siforcetilty":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Y-component of force on sea ice caused by sea-surface tilt", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-surface tilt term in force balance (y-component)", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siforcetilty", + "positive":"", + "standard_name":"sea_surface_tilt_force_on_sea_ice_y", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "sihc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Heat content of all ice in grid cell divided by total grid-cell area. Water at 0 Celsius is assumed to have a heat content of 0 J. Does not include heat content of snow, but does include heat content of brine. Heat content is always negative, since both the sensible and the latent heat content of ice are less than that of water", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-ice heat content per unit area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sihc", + "positive":"", + "standard_name":"integral_of_sea_ice_temperature_wrt_depth_expressed_as_heat_content", + "type":"", + "units":"J m-2", + "valid_max":"", + "valid_min":"" + }, + "siitdconc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Area fraction of grid cell covered by each ice-thickness category (vector with one entry for each thickness category starting from the thinnest category, netcdf file should use thickness bounds of the categories as third coordinate axis)", + "dimensions":"longitude latitude iceband time", + "frequency":"mon", + "long_name":"Sea-ice area fractions in thickness categories", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siitdconc", + "positive":"", + "standard_name":"sea_ice_area_fraction_over_categories", + "type":"", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "siitdsnconc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siitdconc)", + "comment":"Area fraction of grid cell covered by snow in each ice-thickness category (vector with one entry for each thickness category starting from the thinnest category, netcdf file should use thickness bounds of the categories as third coordinate axis)", + "dimensions":"longitude latitude iceband time", + "frequency":"mon", + "long_name":"Snow area fractions in thickness categories", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siitdsnconc", + "positive":"", + "standard_name":"snow_area_fraction_over_categories", + "type":"", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "siitdsnthick":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siitdconc)", + "comment":"Actual thickness of snow in each category (NOT volume divided by grid area), (vector with one entry for each thickness category starting from the thinnest category, netcdf file should use thickness bounds of categories as third coordinate axis)", + "dimensions":"longitude latitude iceband time", + "frequency":"mon", + "long_name":"Snow thickness in thickness categories", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siitdsnthick", + "positive":"", + "standard_name":"snow_thickness_over_categories", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "siitdthick":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siitdconc)", + "comment":"Actual (floe) thickness of sea ice in each category (NOT volume divided by grid area), (vector with one entry for each thickness category starting from the thinnest category, netcdf file should use thickness bounds of categories as third coordinate axis)", + "dimensions":"longitude latitude iceband time", + "frequency":"mon", + "long_name":"Sea-ice thickness in thickness categories", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siitdthick", + "positive":"", + "standard_name":"sea_ice_thickness_over_categories", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "simass":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total mass of sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-ice mass per area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"simass", + "positive":"", + "standard_name":"sea_ice_amount", + "type":"", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "simassacrossline":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"net (sum of transport in all directions) sea ice area transport through the following four passages, positive into the Arctic Ocean 1. Fram Strait = (11.5W,81.3N to (10.5E,79.6N) 2. Canadian Archipelago = (128.2W,70.6N) to (59.3W,82.1N) 3. Barents opening = (16.8E,76.5N) to (19.2E,70.2N) 4. Bering Strait = (171W,66.2N) to (166W,65N)", + "dimensions":"siline time", + "frequency":"mon", + "long_name":"Sea mass area flux through straits", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"simassacrossline", + "positive":"", + "standard_name":"sea_ice_transport_across_line", + "type":"", + "units":"kg s-1", + "valid_max":"", + "valid_min":"" + }, + "simpconc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Fraction of sea ice, by area, which is covered by melt ponds, giving equal weight to every square metre of sea ice .", + "dimensions":"longitude latitude time typemp", + "frequency":"mon", + "long_name":"Percentage Cover of Sea-Ice by Meltpond", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"simpconc", + "positive":"", + "standard_name":"area_fraction", + "type":"", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "simpmass":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice_melt_pond (comment: mask=simpconc)", + "comment":"Meltpond mass per area of sea ice.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Meltpond Mass per Unit Area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"simpmass", + "positive":"", + "standard_name":"surface_liquid_water_amount", + "type":"", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "simprefrozen":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice_melt_pond (comment: mask=simpconc)", + "comment":"Volume of refrozen ice on melt ponds divided by meltpond covered area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Thickness of Refrozen Ice on Melt Pond", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"simprefrozen", + "positive":"", + "standard_name":"melt_pond_refrozen_ice", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sipr":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"mass of liquid precipitation falling onto sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Rainfall rate over sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sipr", + "positive":"", + "standard_name":"rainfall_flux", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sirdgconc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Fraction of sea ice, by area, which is covered by sea ice ridges, giving equal weight to every square metre of sea ice .", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Percentage Cover of Sea-Ice by Ridging", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sirdgconc", + "positive":"", + "standard_name":"fraction_of_ridged_sea_ice", + "type":"", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "sirdgthick":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=sirdgconc - ridges only)", + "comment":"Sea Ice Ridge Height (representing mean height over the ridged area)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Ridged ice thickness", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sirdgthick", + "positive":"", + "standard_name":"thickness_of_ridged_sea_ice", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sisali":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Mean sea-ice salinity of all sea ice in grid cell", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea ice salinity", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisali", + "positive":"", + "standard_name":"sea_ice_salinity", + "type":"", + "units":"0.001", + "valid_max":"", + "valid_min":"" + }, + "sisaltmass":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total mass of all salt in sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Mass of salt in sea ice per area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisaltmass", + "positive":"", + "standard_name":"sea_ice_salt_mass", + "type":"", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "sishevel":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where sea_ice (comment: mask=siconc) time: point", + "comment":"Maximum shear of sea-ice velocity field (second shear strain invariant)", + "dimensions":"longitude latitude time1", + "frequency":"mon", + "long_name":"Maximum shear of sea-ice velocity field", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sishevel", + "positive":"", + "standard_name":"maximum_shear_of_sea_ice_velocity", + "type":"", + "units":"s-1", + "valid_max":"", + "valid_min":"" + }, + "sisnconc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Fraction of sea ice, by area, which is covered by snow, giving equal weight to every square metre of sea ice . Exclude snow that lies on land or land ice.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow area fraction", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisnconc", + "positive":"", + "standard_name":"surface_snow_area_fraction", + "type":"", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "sisnhc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Heat-content of all snow in grid cell divided by total grid-cell area. Snow-water equivalent at 0 Celsius is assumed to have a heat content of 0 J. Does not include heat content of sea ice.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow-heat content per unit area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisnhc", + "positive":"", + "standard_name":"thermal_energy_content_of_surface_snow", + "type":"", + "units":"J m-2", + "valid_max":"", + "valid_min":"" + }, + "sisnmass":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Total mass of snow on sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow mass per area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisnmass", + "positive":"", + "standard_name":"liquid_water_content_of_surface_snow", + "type":"", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "sisnthick":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where snow over sea_ice area: time: mean where sea_ice", + "comment":"Actual thickness of snow (snow volume divided by snow-covered area)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow thickness", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sisnthick", + "positive":"", + "standard_name":"surface_snow_thickness", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sispeed":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Speed of ice (i.e. mean absolute velocity) to account for back-and-forth movement of the ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-ice speed", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sispeed", + "positive":"", + "standard_name":"sea_ice_speed", + "type":"", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "sistremax":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where sea_ice (comment: mask=siconc) time: point", + "comment":"Maximum shear stress in sea ice (second stress invariant)", + "dimensions":"longitude latitude time1", + "frequency":"mon", + "long_name":"Maximum shear stress in sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistremax", + "positive":"", + "standard_name":"maximum_shear_stress", + "type":"", + "units":"N m-1", + "valid_max":"", + "valid_min":"" + }, + "sistresave":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean where sea_ice (comment: mask=siconc) time: point", + "comment":"Average normal stress in sea ice (first stress invariant)", + "dimensions":"longitude latitude time1", + "frequency":"mon", + "long_name":"Average normal stress in sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistresave", + "positive":"", + "standard_name":"average_normal_stress", + "type":"", + "units":"N m-1", + "valid_max":"", + "valid_min":"" + }, + "sistrxdtop":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"X-component of atmospheric stress on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"X-component of atmospheric stress on sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistrxdtop", + "positive":"", + "standard_name":"surface_downward_x_stress", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "sistrxubot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"X-component of ocean stress on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"X-component of ocean stress on sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistrxubot", + "positive":"", + "standard_name":"sea_ice_base_upward_x_stress", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "sistrydtop":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Y-component of atmospheric stress on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Y-component of atmospheric stress on sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistrydtop", + "positive":"", + "standard_name":"surface_downward_y_stress", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "sistryubot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Y-component of ocean stress on sea ice", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Y-component of ocean stress on sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sistryubot", + "positive":"", + "standard_name":"downward_y_stress_at_sea_ice_base", + "type":"", + "units":"N m-2", + "valid_max":"", + "valid_min":"" + }, + "sitempbot":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Report temperature at interface, NOT temperature within lowermost model layer", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Temperature at ice-ocean interface", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sitempbot", + "positive":"", + "standard_name":"sea_ice_bottom_temperature", + "type":"", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "sitempsnic":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Report surface temperature of ice where snow thickness is zero", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Temperature at snow-ice interface", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sitempsnic", + "positive":"", + "standard_name":"sea_ice_surface_temperature", + "type":"", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "sitemptop":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Report surface temperature of snow where snow covers the sea ice.", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Surface temperature of sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sitemptop", + "positive":"", + "standard_name":"sea_ice_surface_temperature", + "type":"", + "units":"K", + "valid_max":"", + "valid_min":"" + }, + "sithick":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"Actual (floe) thickness of sea ice (NOT volume divided by grid area as was done in CMIP5)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea Ice Thickness", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sithick", + "positive":"", + "standard_name":"sea_ice_thickness", + "type":"real", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sitimefrac":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Fraction of time steps of the averaging period during which sea ice is present (siconc >0 ) in a grid cell", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Fraction of time steps with sea ice", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sitimefrac", + "positive":"", + "standard_name":"sea_ice_time_fraction", + "type":"", + "units":"1.0", + "valid_max":"", + "valid_min":"" + }, + "siu":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"The x-velocity of ice on native model grid", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"X-component of sea ice velocity", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siu", + "positive":"", + "standard_name":"sea_ice_x_velocity", + "type":"", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "siv":{ + "cell_measures":"--MODEL", + "cell_methods":"area: time: mean where sea_ice (comment: mask=siconc)", + "comment":"The y-velocity of ice on native model grid", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Y-component of sea ice velocity", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"siv", + "positive":"", + "standard_name":"sea_ice_y_velocity", + "type":"", + "units":"m s-1", + "valid_max":"", + "valid_min":"" + }, + "sivol":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"Total volume of sea ice divided by grid-cell area (this used to be called ice thickness in CMIP5)", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Sea-ice volume per area", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sivol", + "positive":"", + "standard_name":"sea_ice_thickness", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sivoln":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"total volume of sea ice in the Northern hemisphere", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice volume North", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sivoln", + "positive":"", + "standard_name":"sea_ice_volume", + "type":"", + "units":"1e3 km3", + "valid_max":"", + "valid_min":"" + }, + "sivols":{ + "cell_measures":"", + "cell_methods":"area: time: mean", + "comment":"total volume of sea ice in the Southern hemisphere", + "dimensions":"time", + "frequency":"mon", + "long_name":"Sea ice volume South", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sivols", + "positive":"", + "standard_name":"sea_ice_volume", + "type":"", + "units":"1e3 km3", + "valid_max":"", + "valid_min":"" + }, + "sndmassdyn":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"the rate of change of snow mass through advection with sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow Mass Rate of Change through Avection by Sea-ice Dynamics", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmassdyn", + "positive":"", + "standard_name":"tendency_of_snow_mass_due_to_sea_ice_dynamics", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sndmassmelt":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"the rate of change of snow mass through melt divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow Mass Rate of Change through Melt", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmassmelt", + "positive":"", + "standard_name":"surface_snow_melt_flux", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sndmasssi":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"the rate of change of snow mass due to transformation of snow to sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow Mass Rate of Change through Snow-to-Ice Conversion", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmasssi", + "positive":"", + "standard_name":"tendency_of_surface_snow_amount_due_to_conversion_of_snow_to_sea_ice", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sndmasssnf":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"mass of solid precipitation falling onto sea ice divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"snow mass change through snow fall", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmasssnf", + "positive":"", + "standard_name":"snowfall_flux", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sndmasssubl":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"the rate of change of snow mass through sublimation and evaporation divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow Mass Rate of Change through Evaporation or Sublimation", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmasssubl", + "positive":"", + "standard_name":"surface_snow_sublimation_flux", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "sndmasswindrif":{ + "cell_measures":"area: areacella", + "cell_methods":"area: time: mean", + "comment":"the rate of change of snow mass through wind drift of snow (from sea-ice into the sea) divided by grid-cell area", + "dimensions":"longitude latitude time", + "frequency":"mon", + "long_name":"Snow Mass Rate of Change through Wind Drift of Snow", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sndmasswindrif", + "positive":"", + "standard_name":"tendency_of_snow_mass_due_to_drifting_snow", + "type":"", + "units":"kg m-2 s-1", + "valid_max":"", + "valid_min":"" + }, + "snmassacrossline":{ + "cell_measures":"area: areacella", + "cell_methods":"time: mean", + "comment":"net (sum of transport in all directions) snow mass transport through the following four passages, positive into the Arctic Ocean 1. Fram Strait = (11.5W,81.3N to (10.5E,79.6N) 2. Canadian Archipela", + "dimensions":"siline time", + "frequency":"mon", + "long_name":"Snow mass flux through straits", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"snmassacrossline", + "positive":"", + "standard_name":"snow_mass_transport_across_line", + "type":"", + "units":"kg s-1", + "valid_max":"", + "valid_min":"" + } + } +} \ No newline at end of file diff --git a/demo/obs4MIPs_coordinate.json b/demo/Tables/obs4MIPs_coordinate.json similarity index 99% rename from demo/obs4MIPs_coordinate.json rename to demo/Tables/obs4MIPs_coordinate.json index ff60196..448e285 100644 --- a/demo/obs4MIPs_coordinate.json +++ b/demo/Tables/obs4MIPs_coordinate.json @@ -2842,7 +2842,7 @@ "bounds_values":"", "climatology":"", "formula":"", - "long_name":"", + "long_name":"__unset__", "must_have_bounds":"", "out_name":"xant", "positive":"", @@ -2864,7 +2864,7 @@ "bounds_values":"", "climatology":"", "formula":"", - "long_name":"", + "long_name":"__unset__", "must_have_bounds":"", "out_name":"xgre", "positive":"", @@ -2886,7 +2886,7 @@ "bounds_values":"", "climatology":"", "formula":"", - "long_name":"", + "long_name":"__unset__", "must_have_bounds":"", "out_name":"yant", "positive":"", @@ -2908,7 +2908,7 @@ "bounds_values":"", "climatology":"", "formula":"", - "long_name":"", + "long_name":"__unset__", "must_have_bounds":"", "out_name":"ygre", "positive":"", diff --git a/demo/obs4MIPs_formula_terms.json b/demo/Tables/obs4MIPs_formula_terms.json similarity index 74% rename from demo/obs4MIPs_formula_terms.json rename to demo/Tables/obs4MIPs_formula_terms.json index 32eb44c..08da158 100644 --- a/demo/obs4MIPs_formula_terms.json +++ b/demo/Tables/obs4MIPs_formula_terms.json @@ -1,140 +1,184 @@ { - "variable_entry":{ + "formula_entry":{ "a":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: a(k)", + "out_name":"a", "type":"double", "units":"" }, "a_bnds":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: a(k+1/2)", + "out_name":"a_bnds", "type":"double", "units":"" }, "ap":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: ap(k)", + "out_name":"ap", "type":"double", "units":"Pa" }, "ap_bnds":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: ap(k+1/2)", + "out_name":"ap_bnds", "type":"double", "units":"Pa" }, "b":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: b(k)", + "out_name":"b", "type":"double", "units":"" }, "b_bnds":{ "dimensions":"alevel", "long_name":"vertical coordinate formula term: b(k+1/2)", + "out_name":"b_bnds", "type":"double", "units":"" }, "depth":{ "dimensions":"longitude latitude", "long_name":"Sea Floor Depth: formula term: thetao", + "out_name":"depth", "type":"real", "units":"m" }, "depth_c":{ "dimensions":"", "long_name":"vertical coordinate formula term: depth_c", + "out_name":"depth_c", "type":"double", "units":"" }, "eta":{ "dimensions":"longitude latitude time", "long_name":"Sea Surface Height formula term: thetao", + "out_name":"eta", + "type":"real", + "units":"m" + }, + "eta2":{ + "dimensions":"longitude latitude time2", + "long_name":"Sea Surface Height formula term: thetao", + "out_name":"eta", "type":"real", "units":"m" }, "href":{ "dimensions":"", "long_name":"vertical coordinate formula term: href", + "out_name":"href", "type":"double", "units":"" }, "k_c":{ "dimensions":"", "long_name":"vertical coordinate formula term: k_c", + "out_name":"k_c", "type":"integer", "units":"" }, "nsigma":{ "dimensions":"", "long_name":"vertical coordinate formula term: nsigma", + "out_name":"nsigma", "type":"integer", "units":"" }, "orog":{ "dimensions":"longitude latitude", "long_name":"Surface Altitude", + "out_name":"orog", "type":"real", "units":"m" }, "p0":{ "dimensions":"", "long_name":"vertical coordinate formula term: reference pressure", + "out_name":"p0", "type":"", "units":"Pa" }, "ps":{ "dimensions":"longitude latitude time", "long_name":"Surface Air Pressure", + "out_name":"ps", + "type":"real", + "units":"Pa" + }, + "ps1":{ + "dimensions":"longitude latitude time1", + "long_name":"vertical coordinate formula term: ps", + "out_name":"ps", + "type":"real", + "units":"Pa" + }, + "ps2":{ + "dimensions":"longitude latitude time2", + "long_name":"vertical coordinate formula term: ps", + "out_name":"ps", "type":"real", "units":"Pa" }, "ptop":{ "dimensions":"", "long_name":"pressure at top of model", + "out_name":"ptop", "type":"", "units":"Pa" }, "sigma":{ "dimensions":"olevel", "long_name":"vertical coordinate formula term: sigma(k)", + "out_name":"sigma", "type":"double", "units":"" }, "sigma_bnds":{ "dimensions":"olevel", "long_name":"vertical coordinate formula term: sigma(k+1/2)", + "out_name":"sigma_bnds", "type":"double", "units":"" }, "z1":{ "dimensions":"", "long_name":"vertical coordinate formula term: z1", + "out_name":"z1", "type":"double", "units":"" }, "z2":{ "dimensions":"", "long_name":"vertical coordinate formula term: z2", + "out_name":"z2", "type":"double", "units":"" }, "zlev":{ "dimensions":"olevel", "long_name":"vertical coordinate formula term: zlev(k)", + "out_name":"zlev", "type":"double", "units":"" }, "zlev_bnds":{ "dimensions":"olevel", "long_name":"vertical coordinate formula term: zlev(k+1/2)", + "out_name":"zlev_bnds", "type":"double", "units":"" }, "ztop":{ "dimensions":"", "long_name":"height of top of model", + "out_name":"ztop", "type":"", "units":"m" } diff --git a/demo/Tables/obs4MIPs_fx.json b/demo/Tables/obs4MIPs_fx.json new file mode 100644 index 0000000..803ee57 --- /dev/null +++ b/demo/Tables/obs4MIPs_fx.json @@ -0,0 +1,143 @@ +{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "approx_interval":"0.00000", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "generic_levels":"alevel", + "mip_era":"CMIP6", + "missing_value":"1e20", + "product":"observations", + "realm":"fx", + "table_date":"17 July 2017", + "table_id":"fx" + }, + "variable_entry":{ + "areacella":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"For atmospheres with more than 1 mesh (e.g., staggered grids), report areas that apply to surface vertical fluxes of energy.", + "dimensions":"longitude latitude", + "frequency":"fx", + "long_name":"Atmosphere Grid-Cell Area", + "modeling_realm":"atmos land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"areacella", + "positive":"", + "standard_name":"cell_area", + "type":"real", + "units":"m2", + "valid_max":"", + "valid_min":"" + }, + "mrsofc":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"'reported *where land*: divide the total water holding capacity of all the soil in the grid cell by the land area in the grid cell; reported as *missing* where the land fraction is 0.'", + "dimensions":"longitude latitude", + "frequency":"fx", + "long_name":"Capacity of Soil to Store Water", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"mrsofc", + "positive":"", + "standard_name":"soil_moisture_content_at_field_capacity", + "type":"real", + "units":"kg m-2", + "valid_max":"", + "valid_min":"" + }, + "orog":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"The surface called 'surface' means the lower boundary of the atmosphere. Altitude is the (geometric) height above the geoid, which is the reference geopotential surface. The geoid is similar to mean sea level.", + "dimensions":"longitude latitude", + "frequency":"fx", + "long_name":"Surface Altitude", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"orog", + "positive":"", + "standard_name":"surface_altitude", + "type":"real", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "rootd":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"report the maximum soil depth reachable by plant roots (if defined in model), i.e., the maximum soil depth from which they can extract moisture; report as *missing* where the land fraction is 0.", + "dimensions":"longitude latitude", + "frequency":"fx", + "long_name":"Maximum Root Depth", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"rootd", + "positive":"", + "standard_name":"root_depth", + "type":"real", + "units":"m", + "valid_max":"", + "valid_min":"" + }, + "sftgif":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"Fraction of grid cell covered by land ice (ice sheet, ice shelf, ice cap, glacier)", + "dimensions":"longitude latitude typeli", + "frequency":"fx", + "long_name":"Fraction of Grid Cell Covered with Glacier", + "modeling_realm":"land", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sftgif", + "positive":"", + "standard_name":"land_ice_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "sftlf":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"Please express 'X_area_fraction' as the percentage of horizontal area occupied by X.", + "dimensions":"longitude latitude typeland", + "frequency":"fx", + "long_name":"Land Area Fraction", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"sftlf", + "positive":"", + "standard_name":"land_area_fraction", + "type":"real", + "units":"%", + "valid_max":"", + "valid_min":"" + }, + "zfull":{ + "cell_measures":"area: areacella", + "cell_methods":"area: mean", + "comment":"", + "dimensions":"longitude latitude alevel", + "frequency":"fx", + "long_name":"Altitude of Model Full-Levels", + "modeling_realm":"atmos", + "ok_max_mean_abs":"", + "ok_min_mean_abs":"", + "out_name":"zfull", + "positive":"", + "standard_name":"height_above_reference_ellipsoid", + "type":"float", + "units":"m", + "valid_max":"", + "valid_min":"" + } + } +} \ No newline at end of file diff --git a/demo/Tables/obs4MIPs_grids.json b/demo/Tables/obs4MIPs_grids.json new file mode 100644 index 0000000..9bbf987 --- /dev/null +++ b/demo/Tables/obs4MIPs_grids.json @@ -0,0 +1,154 @@ +{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "missing_value":"1e20", + "product":"observations", + "table_date":"17 July 2017", + "table_id":"grids" + }, + "axis_entry":{ + "grid_latitude":{ + "axis":"Y", + "long_name":"latitude in rotated pole grid", + "out_name":"rlat", + "standard_name":"grid_latitude", + "type":"", + "units":"degrees" + }, + "grid_longitude":{ + "axis":"X", + "long_name":"longitude in rotated pole grid", + "out_name":"rlon", + "standard_name":"grid_longitude", + "type":"", + "units":"degrees" + }, + "i_index":{ + "axis":"", + "long_name":"cell index along first dimension", + "out_name":"i", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "j_index":{ + "axis":"", + "long_name":"cell index along second dimension", + "out_name":"j", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "k_index":{ + "axis":"", + "long_name":"cell index along third dimension", + "out_name":"k", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "l_index":{ + "axis":"", + "long_name":"cell index along fourth dimension", + "out_name":"l", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "m_index":{ + "axis":"", + "long_name":"cell index along fifth dimension", + "out_name":"m", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "vertices":{ + "axis":"", + "long_name":"", + "out_name":"", + "standard_name":"", + "type":"", + "units":"" + }, + "x":{ + "axis":"X", + "long_name":"x coordinate of projection", + "out_name":"", + "standard_name":"projection_x_coordinate", + "type":"", + "units":"m" + }, + "x_deg":{ + "axis":"X", + "long_name":"x coordinate of projection", + "out_name":"x", + "standard_name":"projection_x_coordinate", + "type":"", + "units":"degrees" + }, + "y":{ + "axis":"Y", + "long_name":"y coordinate of projection", + "out_name":"", + "standard_name":"projection_y_coordinate", + "type":"", + "units":"m" + }, + "y_deg":{ + "axis":"Y", + "long_name":"y coordinate of projection", + "out_name":"y", + "standard_name":"projection_y_coordinate", + "type":"", + "units":"degrees" + } + }, + "mapping_entry":{ + "sample_user_mapping":{ + "coordinates":"rlon rlat", + "parameter1":"false_easting", + "parameter2":"false_northing" + } + }, + "variable_entry":{ + "latitude":{ + "dimensions":"longitude latitude", + "long_name":"", + "out_name":"latitude", + "standard_name":"latitude", + "units":"degrees_north", + "valid_max":"90.0", + "valid_min":"-90.0" + }, + "longitude":{ + "dimensions":"longitude latitude", + "long_name":"", + "out_name":"longitude", + "standard_name":"longitude", + "units":"degrees_east", + "valid_max":"360.0", + "valid_min":"0.0" + }, + "vertices_latitude":{ + "dimensions":"vertices longitude latitude", + "long_name":"", + "out_name":"vertices_latitude", + "standard_name":"vertices_latitude", + "units":"degrees_north", + "valid_max":"90.0", + "valid_min":"-90.0" + }, + "vertices_longitude":{ + "dimensions":"vertices longitude latitude", + "long_name":"", + "out_name":"vertices_longitude", + "standard_name":"vertices_longitude", + "units":"degrees_east", + "valid_max":"360.0", + "valid_min":"0.0" + } + } +} \ No newline at end of file diff --git a/demo/amipbc_areacello_360x180_v1.1.0.nc b/demo/amipbc_areacello_360x180_v1.1.0.nc deleted file mode 100644 index 99f04e2..0000000 Binary files a/demo/amipbc_areacello_360x180_v1.1.0.nc and /dev/null differ diff --git a/demo/amipobs_tos_360x180_v1.1.0_187001-187112.nc b/demo/amipobs_tos_360x180_v1.1.0_187001-187112.nc deleted file mode 100644 index 0cc107c..0000000 Binary files a/demo/amipobs_tos_360x180_v1.1.0_187001-187112.nc and /dev/null differ diff --git a/demo/demo.zip b/demo/demo.zip new file mode 100644 index 0000000..26cc8cd Binary files /dev/null and b/demo/demo.zip differ diff --git a/demo/drive_obs4MIPs.json b/demo/drive_obs4MIPs.json deleted file mode 100644 index 424745f..0000000 --- a/demo/drive_obs4MIPs.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "_control_vocabulary_file": "obs4MIPs_CV.json", - "_AXIS_ENTRY_FILE": "obs4MIPs_coordinate.json", - "_FORMULA_VAR_FILE": "obs4MIPs_formula_terms.json", - "activity_id": "obs4MIPs", - "calendar": "gregorian", - - "data_structure": "grid", - "dataset_version_number": "1.1.0", - "frequency": "mon", - "grid": "1x1 degree latitude x longitude", - "grid_label": "gn", - "nominal_resolution": "1x1 degree", - "product": "composite", - "realm": "ocean", - "region": "global", - - "comment": "Based on Hurrell SST/sea ice consistency criteria applied to merged HadISST (1870-01 1981-10) & NCEP-0I2 (1981-11 to 2015-12)", - "contact ": "PCMDI (pcmdi-cmip@llnl.gov) ", - "further_info_url": "http://www-pcmdi.llnl.gov/projects/amip/AMIP2EXPDSN/BCS/amip2bcs.php", - "institution_id": "PCMDI", - "institution": "Program for Climate Model Diagnosis and Intercomparison (LLNL), Livermore, CA 94550, USA", - "references": "Taylor, K.E., D. Williamson and F. Zwiers, 2000: The sea surface temperature and sea ice concentration boundary conditions for AMIP II simulations. PCMDI Report 60, Program for Climate Model Diagnosis and Intercomparison, Lawrence Livermore National Laboratory, 25 pp. Available online: http://www-pcmdi.llnl.gov/publications/pdf/60.pdf", - "source": "PCMDI-AMIP 1.1.0: Merged SST based on UK MetOffice HadISST and NCEP OI2", - "source_id": "PCMDI-AMIP-1-1-0", - "title": "PCMDI-AMIP 1.1.0 dataset prepared for input4MIPs", - - "outpath": ".", - "output_path_template": "", - "output_file_template": "", - - "license": "AMIP boundary condition data produced by PCMDI is licensed under a Creative Commons Attribution \"Share Alike\" 4.0 International License (http://creativecommons.org/licenses/by/4.0/). The data producers and data providers make no warranty, either express or implied, including but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law." -} diff --git a/demo/obs4MIPs_CV.json b/demo/obs4MIPs_CV.json index b23b7c7..92b8e79 100644 --- a/demo/obs4MIPs_CV.json +++ b/demo/obs4MIPs_CV.json @@ -1,137 +1,3516 @@ { "CV":{ + "coordinate":{ + "axis_entry":{ + "alev1":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"lowest atmospheric model level", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "alt16":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"altitude", + "must_have_bounds":"yes", + "out_name":"alt16", + "positive":"up", + "requested":[ + "0", + "250", + "750", + "1250", + "1750", + "2250", + "2750", + "3500", + "4500", + "6000", + "8000", + "10000", + "12000", + "14500", + "16000", + "18000" + ], + "requested_bounds":[ + "-99000.0", + "0.0", + "0.0", + "500.0", + "500.0", + "1000.0", + "1000.0", + "1500.0", + "1500.0", + "2000.0", + "2000.0", + "2500.0", + "2500.0", + "3000.0", + "3000.0", + "4000.0", + "4000.0", + "5000.0", + "5000.0", + "7000.0", + "7000.0", + "9000.0", + "9000.0", + "11000.0", + "11000.0", + "13000.0", + "13000.0", + "15000.0", + "15000.0", + "17000.0", + "17000.0", + "99000.0" + ], + "standard_name":"altitude", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "alt40":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"altitude", + "must_have_bounds":"yes", + "out_name":"alt40", + "positive":"up", + "requested":[ + "240.", + "720.", + "1200.", + "1680.", + "2160.", + "2640.", + "3120.", + "3600.", + "4080.", + "4560.", + "5040.", + "5520.", + "6000.", + "6480.", + "6960.", + "7440.", + "7920.", + "8400.", + "8880.", + "9360.", + "9840.", + "10320.", + "10800.", + "11280.", + "11760.", + "12240.", + "12720.", + "13200.", + "13680.", + "14160.", + "14640.", + "15120.", + "15600.", + "16080.", + "16560.", + "17040.", + "17520.", + "18000.", + "18480.", + "18960." + ], + "requested_bounds":[ + "0.0", + "480.0", + "480.0", + "960.0", + "960.0", + "1440.0", + "1440.0", + "1920.0", + "1920.0", + "2400.0", + "2400.0", + "2880.0", + "2880.0", + "3360.0", + "3360.0", + "3840.0", + "3840.0", + "4320.0", + "4320.0", + "4800.0", + "4800.0", + "5280.0", + "5280.0", + "5760.0", + "5760.0", + "6240.0", + "6240.0", + "6720.0", + "6720.0", + "7200.0", + "7200.0", + "7680.0", + "7680.0", + "8160.0", + "8160.0", + "8640.0", + "8640.0", + "9120.0", + "9120.0", + "9600.0", + "9600.0", + "10080.0", + "10080.0", + "10560.0", + "10560.0", + "11040.0", + "11040.0", + "11520.0", + "11520.0", + "12000.0", + "12000.0", + "12480.0", + "12480.0", + "12960.0", + "12960.0", + "13440.0", + "13440.0", + "13920.0", + "13920.0", + "14400.0", + "14400.0", + "14880.0", + "14880.0", + "15360.0", + "15360.0", + "15840.0", + "15840.0", + "16320.0", + "16320.0", + "16800.0", + "16800.0", + "17280.0", + "17280.0", + "17760.0", + "17760.0", + "18240.0", + "18240.0", + "18720.0", + "18720.0", + "19200.0" + ], + "standard_name":"altitude", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "alternate_hybrid_sigma":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"p = ap + b*ps", + "long_name":"hybrid sigma pressure coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_hybrid_sigma_pressure_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"1", + "valid_max":"1.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"ap: ap_bnds b: b_bnds ps: ps", + "z_factors":"ap: ap b: b ps: ps" + }, + "basin":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"ocean basin", + "must_have_bounds":"no", + "out_name":"basin", + "positive":"", + "requested":[ + "atlantic_arctic_ocean", + "indian_pacific_ocean", + "global_ocean" + ], + "requested_bounds":"", + "standard_name":"region", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "dbze":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"CloudSat simulator equivalent radar reflectivity factor", + "must_have_bounds":"yes", + "out_name":"dbze", + "positive":"", + "requested":[ + "-47.5", + "-42.5", + "-37.5", + "-32.5", + "-27.5", + "-22.5", + "-17.5", + "-12.5", + "-7.5", + "-2.5", + "2.5", + "7.5", + "12.5", + "17.5", + "22.5" + ], + "requested_bounds":[ + "-50.0", + "-45.0", + "-45.0", + "-40.0", + "-40.0", + "-35.0", + "-35.0", + "-30.0", + "-30.0", + "-25.0", + "-25.0", + "-20.0", + "-20.0", + "-15.0", + "-15.0", + "-10.0", + "-10.0", + "-5.0", + "-5.0", + "0.0", + "0.0", + "5.0", + "5.0", + "10.0", + "10.0", + "15.0", + "15.0", + "20.0", + "20.0", + "25.0" + ], + "standard_name":"equivalent_reflectivity_factor", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"dBZ", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth0m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"100.0", + "valid_min":"0.0", + "value":"0.", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth100m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"120.0", + "valid_min":"80.0", + "value":"100.", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth2000m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"2200.0", + "valid_min":"1980.0", + "value":"2000", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth300m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"320.0", + "valid_min":"280.0", + "value":"300", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth700m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"720.0", + "valid_min":"680.0", + "value":"700", + "z_bounds_factors":"", + "z_factors":"" + }, + "depth_coord":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"ocean depth coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"", + "units":"m", + "valid_max":"12000.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "effectRadIc":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Effective Radius [Values to be specified]", + "must_have_bounds":"", + "out_name":"effectRadIc", + "positive":"", + "requested":[ + "5.", + "15.", + "25.", + "35.", + "50.", + "75." + ], + "requested_bounds":[ + "0.0", + "10.0", + "10.0", + "20.0", + "20.0", + "30.0", + "30.0", + "40.0", + "40.0", + "60.0", + "60.0", + "90.0" + ], + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"micron", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "effectRadLi":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Effective Radius [Values to be specified]", + "must_have_bounds":"", + "out_name":"effectRadLi", + "positive":"", + "requested":[ + "4.", + "9.", + "11.5", + "14.", + "17.5", + "25." + ], + "requested_bounds":[ + "0.0", + "8.0", + "8.0", + "10.0", + "10.0", + "13.0", + "13.0", + "15.0", + "15.0", + "20.0", + "20.0", + "30.0" + ], + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"micron", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "height100m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"height", + "must_have_bounds":"no", + "out_name":"height", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"height", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"120.0", + "valid_min":"80.0", + "value":"100.", + "z_bounds_factors":"", + "z_factors":"" + }, + "height10m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"height", + "must_have_bounds":"no", + "out_name":"height", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"height", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"30.0", + "valid_min":"1.0", + "value":"10.", + "z_bounds_factors":"", + "z_factors":"" + }, + "height2m":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"height", + "must_have_bounds":"no", + "out_name":"height", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"height", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"10.0", + "valid_min":"1.0", + "value":"2.", + "z_bounds_factors":"", + "z_factors":"" + }, + "hybrid_height":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"z = a + b*orog", + "long_name":"hybrid height coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_hybrid_height_coordinate", + "stored_direction":"increasing", + "tolerance":"", + "type":"", + "units":"m", + "valid_max":"", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"a: lev_bnds b: b_bnds orog: orog", + "z_factors":"a: lev b: b orog: orog" + }, + "iceband":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Ice Depth Band", + "must_have_bounds":"yes", + "out_name":"iceband", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"sea_ice_thickness", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "icesheet":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Ice Sheet", + "must_have_bounds":"no", + "out_name":"region", + "positive":"", + "requested":[ + "antarctic", + "greenland" + ], + "requested_bounds":"", + "standard_name":"region", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "landUse":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Land use type", + "must_have_bounds":"no", + "out_name":"landuse", + "positive":"", + "requested":[ + "primary_and_secondary_land", + "pastures", + "crops", + "urban" + ], + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "latitude":{ + "axis":"Y", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"latitude", + "must_have_bounds":"yes", + "out_name":"lat", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"latitude", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"degrees_north", + "valid_max":"90.0", + "valid_min":"-90.0", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "location":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"location index", + "must_have_bounds":"no", + "out_name":"loc", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"", + "stored_direction":"increasing", + "tolerance":"", + "type":"integer", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "longitude":{ + "axis":"X", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"longitude", + "must_have_bounds":"yes", + "out_name":"lon", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"longitude", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"degrees_east", + "valid_max":"360.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "misrBands":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"MISR Spectral Frequency Band", + "must_have_bounds":"yes", + "out_name":"spectband", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"wave_frequency", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"s-1", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "natural_log_pressure":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"p = p0 * exp(-lev)", + "long_name":"atmosphere natural log pressure coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_ln_pressure_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"20.0", + "valid_min":"-1.0", + "value":"", + "z_bounds_factors":"p0: p0 lev: lev_bnds", + "z_factors":"p0: p0 lev: lev" + }, + "ocean_double_sigma":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"for k <= k_c:\n z(k,j,i)= sigma(k)*f(j,i) \n for k > k_c:\n z(k,j,i)= f(j,i) + (sigma(k)-1)*(depth(j,i)-f(j,i)) \n f(j,i)= 0.5*(z1+ z2) + 0.5*(z1-z2)* tanh(2*a/(z1-z2)*(depth(j,i)-href))", + "long_name":"ocean double sigma coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"ocean_double_sigma", + "stored_direction":"", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"sigma: sigma_bnds depth: depth z1: z1 z2: z2 a: a href: href k_c: k_c", + "z_factors":"sigma: sigma depth: depth z1: z1 z2: z2 a: a_coeff href: href k_c: k_c" + }, + "ocean_s":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"z(n,k,j,i) = eta(n,j,i)*(1+s(k)) + depth_c*s(k) + (depth(j,i)-depth_c)*C(k) \n where \n C(k)=(1-b)*sinh(a*s(k))/sinh(a) +\n b*(tanh(a*(s(k)+0.5))/(2*tanh(0.5*a)) - 0.5)", + "long_name":"ocean s-coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"ocean_s_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"0.0", + "valid_min":"-1.0", + "value":"", + "z_bounds_factors":"s: lev_bnds eta: eta depth: depth a: a b: b depth_c: depth_c", + "z_factors":"s: lev eta: eta depth: depth a: a_coeff b: b_coeff depth_c: depth_c" + }, + "ocean_sigma":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"z(n,k,j,i) = eta(n,j,i) + sigma(k)*(depth(j,i)+eta(n,j,i))", + "long_name":"ocean sigma coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"ocean_sigma_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"0.0", + "valid_min":"-1.0", + "value":"", + "z_bounds_factors":"sigma: lev_bnds eta: eta depth: depth", + "z_factors":"sigma: lev eta: eta depth: depth" + }, + "ocean_sigma_z":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"for k <= nsigma: z(n,k,j,i) = eta(n,j,i) + sigma(k)*(min(depth_c,depth(j,i))+eta(n,j,i)) ; for k > nsigma: z(n,k,j,i) = zlev(k)", + "long_name":"ocean sigma over z coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"ocean_sigma_z", + "stored_direction":"", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"sigma: sigma_bnds eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev_bnds", + "z_factors":"sigma: sigma eta: eta depth: depth depth_c: depth_c nsigma: nsigma zlev: zlev" + }, + "olayer100m":{ + "axis":"Z", + "bounds_values":"0.0 100.0", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"no", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"100.0", + "valid_min":"0.0", + "value":"50.", + "z_bounds_factors":"", + "z_factors":"" + }, + "oline":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"ocean passage", + "must_have_bounds":"no", + "out_name":"line", + "positive":"", + "requested":[ + "barents_opening", + "bering_strait", + "canadian_archipelago", + "denmark_strait", + "drake_passage", + "english_channel", + "pacific_equatorial_undercurrent", + "faroe_scotland_channel", + "florida_bahamas_strait", + "fram_strait", + "iceland_faroe_channel", + "indonesian_throughflow", + "mozambique_channel", + "taiwan_luzon_straits", + "windward_passage" + ], + "requested_bounds":"", + "standard_name":"region", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "p10":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"1000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p100":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"10000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p1000":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"100000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p200":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"20000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p220":{ + "axis":"Z", + "bounds_values":"44000.0 0.0", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"22000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p500":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"50000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p560":{ + "axis":"Z", + "bounds_values":"68000.0 44000.0", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"56000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p700":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"70000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p840":{ + "axis":"Z", + "bounds_values":"100000.0 68000.0", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"84000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "p850":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"85000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "pl700":{ + "axis":"Z", + "bounds_values":"85000.0 60000.0", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"70000.", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev10":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "85000.", + "70000.", + "50000.", + "25000.", + "15000.", + "10000.", + "7000.", + "5000.", + "1000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev19":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "92500.", + "85000.", + "70000.", + "60000.", + "50000.", + "40000.", + "30000.", + "25000.", + "20000.", + "15000.", + "10000.", + "7000.", + "5000.", + "3000.", + "2000.", + "1000.", + "500.", + "100." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev23":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "92500.", + "85000.", + "70000.", + "60000.", + "50000.", + "40000.", + "30000.", + "25000.", + "20000.", + "15000.", + "10000.", + "7000.", + "5000.", + "3000.", + "2000.", + "1000.", + "700.", + "500.", + "300.", + "200.", + "100.", + "40." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev27":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "97500.", + "95000.", + "92500.", + "90000.", + "87500.", + "85000.", + "82500.", + "80000.", + "77500.", + "75000.", + "70000.", + "65000.", + "60000.", + "55000.", + "50000.", + "45000.", + "40000.", + "35000.", + "30000.", + "25000.", + "22500.", + "20000.", + "17500.", + "15000.", + "12500.", + "10000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev3":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "85000.", + "50000.", + "25000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev39":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "92500.", + "85000.", + "70000.", + "60000.", + "50000.", + "40000.", + "30000.", + "25000.", + "20000.", + "17000.", + "15000.", + "13000.", + "11500.", + "10000.", + "9000.", + "8000.", + "7000.", + "5000.", + "3000.", + "2000.", + "1500.", + "1000.", + "700.", + "500.", + "300.", + "200.", + "150.", + "100.", + "70.", + "50.", + "40.", + "30.", + "20.", + "15.", + "10.", + "7.", + "5.", + "3." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev3h":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "10000.", + "1000.", + "100." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev4":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "92500.", + "85000.", + "50000.", + "25000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev7":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":[ + "90000.", + "74000.", + "62000.", + "50000.", + "37500.", + "24500.", + "9000." + ], + "requested_bounds":[ + "100000.", + "80000.", + "80000.", + "68000.", + "68000.", + "56000.", + "56000.", + "44000.", + "44000.", + "31000.", + "31000.", + "18000.", + "18000.", + " 0." + ], + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"0.001", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev7c":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"yes", + "out_name":"plev", + "positive":"down", + "requested":[ + "90000.", + "74000.", + "62000.", + "50000.", + "37500.", + "24500.", + "9000." + ], + "requested_bounds":[ + "100000.0", + "80000.0", + "80000.0", + "68000.0", + "68000.0", + "56000.0", + "56000.0", + "44000.0", + "44000.0", + "31000.0", + "31000.0", + "18000.0", + "18000.0", + "0.0" + ], + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev7h":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "92500.", + "85000.", + "70000.", + "60000.", + "50000.", + "25000.", + "5000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "plev8":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"pressure", + "must_have_bounds":"no", + "out_name":"plev", + "positive":"down", + "requested":[ + "100000.", + "85000.", + "70000.", + "50000.", + "25000.", + "10000.", + "5000.", + "1000." + ], + "requested_bounds":"", + "standard_name":"air_pressure", + "stored_direction":"decreasing", + "tolerance":"", + "type":"double", + "units":"Pa", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "rho":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"potential density referenced to 2000 dbar", + "must_have_bounds":"yes", + "out_name":"rho", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"sea_water_potential_density", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"kg m-3", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "scatratio":{ + "axis":"", + "bounds_values":"0.0 0.01 1.2 3.0 5.0 7.0 10.0 15.0 20.0 25.0 30.0 40.0 50.0 60.0 80.0 100000.0", + "climatology":"", + "formula":"", + "long_name":"lidar backscattering ratio", + "must_have_bounds":"yes", + "out_name":"scatratio", + "positive":"", + "requested":[ + "0.005", + "0.605", + "2.1", + "4.", + "6.", + "8.5", + "12.5", + "17.5", + "22.5", + "27.5", + "35.", + "45.", + "55.", + "70.", + "50040." + ], + "requested_bounds":[ + "0.0", + "0.01", + "0.01", + "1.2", + "1.2", + "3.0", + "3.0", + "5.0", + "5.0", + "7.0", + "7.0", + "10.0", + "10.0", + "15.0", + "15.0", + "20.0", + "20.0", + "25.0", + "25.0", + "30.0", + "30.0", + "40.0", + "40.0", + "50.0", + "50.0", + "60.0", + "60.0", + "80.0", + "80.0", + "100000.0" + ], + "standard_name":"backscattering_ratio", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"1.0", + "valid_max":"", + "valid_min":"", + "value":"0.005, 0.605, 2.1, 4, 6, 8.5, 12.5, 17.5, 22.5, 27.5, 35, 45, 55, 70, 50040", + "z_bounds_factors":"", + "z_factors":"" + }, + "sdepth":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"yes", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"200.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "sdepth1":{ + "axis":"Z", + "bounds_values":"0.0 0.1", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"yes", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"0.2", + "valid_min":"0.0", + "value":"0.05", + "z_bounds_factors":"", + "z_factors":"" + }, + "siline":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"ocean passage", + "must_have_bounds":"no", + "out_name":"line", + "positive":"", + "requested":[ + "Fram", + "Strait,", + "Canadian", + "Archipelego,", + "Barents", + "opening,", + "Bering", + "Strait" + ], + "requested_bounds":"", + "standard_name":"region", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "site":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"site index", + "must_have_bounds":"no", + "out_name":"site", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"integer", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "smooth_level":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"z = a*ztop + b1*zsurf1 + b2*zsurf2", + "long_name":"atmosphere smooth level vertical (SLEVE) coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"up", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_sleve_coordinate", + "stored_direction":"increasing", + "tolerance":"", + "type":"", + "units":"m", + "valid_max":"800000.0", + "valid_min":"-200.0", + "value":"", + "z_bounds_factors":"a: a_bnds b1: b1_bnds b2: b2_bnds ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2", + "z_factors":"a: a b1: b1 b2: b2 ztop: ztop zsurf1: zsurf1 zsurf2: zsurf2" + }, + "snowband":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Snow Depth Band", + "must_have_bounds":"yes", + "out_name":"snowband", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"surface_snow_thickness", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "snowdepth":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"depth", + "must_have_bounds":"yes", + "out_name":"depth", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"depth", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"m", + "valid_max":"200.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "spectband":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Spectral Frequency Band", + "must_have_bounds":"yes", + "out_name":"spectband", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"sensor_band_central_radiation_wavenumber", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"m-1", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "standard_hybrid_sigma":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"p = a*p0 + b*ps", + "long_name":"hybrid sigma pressure coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_hybrid_sigma_pressure_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"1", + "valid_max":"1.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"p0: p0 a: a_bnds b: b_bnds ps: ps", + "z_factors":"p0: p0 a: a b: b ps: ps" + }, + "standard_sigma":{ + "axis":"Z", + "bounds_values":"", + "climatology":"", + "formula":"p = ptop + sigma*(ps - ptop)", + "long_name":"sigma coordinate", + "must_have_bounds":"yes", + "out_name":"lev", + "positive":"down", + "requested":"", + "requested_bounds":"", + "standard_name":"atmosphere_sigma_coordinate", + "stored_direction":"decreasing", + "tolerance":"", + "type":"", + "units":"", + "valid_max":"1.0", + "valid_min":"0.0", + "value":"", + "z_bounds_factors":"ptop: ptop sigma: lev_bnds ps: ps", + "z_factors":"ptop: ptop sigma: lev ps: ps" + }, + "sza5":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"solar zenith angle", + "must_have_bounds":"no", + "out_name":"sza", + "positive":"", + "requested":[ + "0.", + "20.", + "40.", + "60.", + "80." + ], + "requested_bounds":"", + "standard_name":"solar_zenith_angle", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"degree", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "tau":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"cloud optical thickness", + "must_have_bounds":"yes", + "out_name":"tau", + "positive":"", + "requested":[ + "0.15", + "0.8", + "2.45", + "6.5", + "16.2", + "41.5", + "100." + ], + "requested_bounds":[ + "0.0", + "0.3", + "0.3", + "1.3", + "1.3", + "3.6", + "3.6", + "9.4", + "9.4", + "23.0", + "23.0", + "60.0", + "60.0", + "100000.0" + ], + "standard_name":"atmosphere_optical_thickness_due_to_cloud", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"1.0", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "time":{ + "axis":"T", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"time", + "must_have_bounds":"yes", + "out_name":"time", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"time", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"days since ?", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "time1":{ + "axis":"T", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"time", + "must_have_bounds":"no", + "out_name":"time", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"time", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"days since ?", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "time2":{ + "axis":"T", + "bounds_values":"", + "climatology":"yes", + "formula":"", + "long_name":"time", + "must_have_bounds":"yes", + "out_name":"time", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"time", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"days since ?", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "time3":{ + "axis":"T", + "bounds_values":"", + "climatology":"yes", + "formula":"", + "long_name":"time", + "must_have_bounds":"yes", + "out_name":"time", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"time", + "stored_direction":"increasing", + "tolerance":"", + "type":"double", + "units":"days since ?", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "typebare":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"bare_ground", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeburnt":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Burnt vegetation area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"burnt_vegetation", + "z_bounds_factors":"", + "z_factors":"" + }, + "typec3pft":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"c3_plant_functional_types", + "z_bounds_factors":"", + "z_factors":"" + }, + "typec4pft":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"c4_plant_functional_types", + "z_bounds_factors":"", + "z_factors":"" + }, + "typecloud":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Cloud area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"cloud", + "z_bounds_factors":"", + "z_factors":"" + }, + "typecrop":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Crop area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"crops", + "z_bounds_factors":"", + "z_factors":"" + }, + "typefis":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Floating Ice Shelf area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"floating_ice_shelf", + "z_bounds_factors":"", + "z_factors":"" + }, + "typegis":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Grounded Ice Sheet area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"grounded_ice_sheet", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeland":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Land area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"land", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeli":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Land Ice area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"land_ice", + "z_bounds_factors":"", + "z_factors":"" + }, + "typemp":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Melt pond area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"sea_ice_melt_pond", + "z_bounds_factors":"", + "z_factors":"" + }, + "typenatgr":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Natural grass area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"natural_grasses", + "z_bounds_factors":"", + "z_factors":"" + }, + "typenwd":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Non-Woody Vegetation area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"non_woody_vegetation", + "z_bounds_factors":"", + "z_factors":"" + }, + "typepasture":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Pasture area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"pastures", + "z_bounds_factors":"", + "z_factors":"" + }, + "typepdec":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"primary_deciduous_trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typepever":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"primary_evergreen_trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeresidual":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Residual area", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"residual", + "z_bounds_factors":"", + "z_factors":"" + }, + "typesdec":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"secondary_decidous_trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typesea":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Ocean area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"sea", + "z_bounds_factors":"", + "z_factors":"" + }, + "typesever":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"surface type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"secondary_evergreen_trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeshrub":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Shrub area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"shrubs", + "z_bounds_factors":"", + "z_factors":"" + }, + "typesi":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Sea Ice area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"sea_ice", + "z_bounds_factors":"", + "z_factors":"" + }, + "typetree":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Tree area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typetreebd":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Tree area type (Broadleaf Deciduous)", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typetreebe":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Tree area type (Broadleaf Evergreen)", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typetreend":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Tree area type (Narrowleaf Deciduous)", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typetreene":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Tree area type (Narrowleaf Evergreen)", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"trees", + "z_bounds_factors":"", + "z_factors":"" + }, + "typeveg":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Vegetation area type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"vegetation", + "z_bounds_factors":"", + "z_factors":"" + }, + "typewetla":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"Wetland", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"area_type", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "vegtype":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"plant functional type", + "must_have_bounds":"no", + "out_name":"type", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"", + "stored_direction":"", + "tolerance":"", + "type":"character", + "units":"", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "xant":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"__unset__", + "must_have_bounds":"", + "out_name":"xant", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"projection_x_coordinate", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"km", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "xgre":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"__unset__", + "must_have_bounds":"", + "out_name":"xgre", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"projection_x_coordinate", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"km", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "yant":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"__unset__", + "must_have_bounds":"", + "out_name":"yant", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"projection_y_coordinate", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"km", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + }, + "ygre":{ + "axis":"", + "bounds_values":"", + "climatology":"", + "formula":"", + "long_name":"__unset__", + "must_have_bounds":"", + "out_name":"ygre", + "positive":"", + "requested":"", + "requested_bounds":"", + "standard_name":"projection_y_coordinate", + "stored_direction":"", + "tolerance":"", + "type":"double", + "units":"km", + "valid_max":"", + "valid_min":"", + "value":"", + "z_bounds_factors":"", + "z_factors":"" + } + } + }, + "formula_terms":{ + "formula_entry":{ + "a":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: a(k)", + "out_name":"a", + "type":"double", + "units":"" + }, + "a_bnds":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: a(k+1/2)", + "out_name":"a_bnds", + "type":"double", + "units":"" + }, + "ap":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: ap(k)", + "out_name":"ap", + "type":"double", + "units":"Pa" + }, + "ap_bnds":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: ap(k+1/2)", + "out_name":"ap_bnds", + "type":"double", + "units":"Pa" + }, + "b":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: b(k)", + "out_name":"b", + "type":"double", + "units":"" + }, + "b_bnds":{ + "dimensions":"alevel", + "long_name":"vertical coordinate formula term: b(k+1/2)", + "out_name":"b_bnds", + "type":"double", + "units":"" + }, + "depth":{ + "dimensions":"longitude latitude", + "long_name":"Sea Floor Depth: formula term: thetao", + "out_name":"depth", + "type":"real", + "units":"m" + }, + "depth_c":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: depth_c", + "out_name":"depth_c", + "type":"double", + "units":"" + }, + "eta":{ + "dimensions":"longitude latitude time", + "long_name":"Sea Surface Height formula term: thetao", + "out_name":"eta", + "type":"real", + "units":"m" + }, + "eta2":{ + "dimensions":"longitude latitude time2", + "long_name":"Sea Surface Height formula term: thetao", + "out_name":"eta", + "type":"real", + "units":"m" + }, + "href":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: href", + "out_name":"href", + "type":"double", + "units":"" + }, + "k_c":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: k_c", + "out_name":"k_c", + "type":"integer", + "units":"" + }, + "nsigma":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: nsigma", + "out_name":"nsigma", + "type":"integer", + "units":"" + }, + "orog":{ + "dimensions":"longitude latitude", + "long_name":"Surface Altitude", + "out_name":"orog", + "type":"real", + "units":"m" + }, + "p0":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: reference pressure", + "out_name":"p0", + "type":"", + "units":"Pa" + }, + "ps":{ + "dimensions":"longitude latitude time", + "long_name":"Surface Air Pressure", + "out_name":"ps", + "type":"real", + "units":"Pa" + }, + "ps1":{ + "dimensions":"longitude latitude time1", + "long_name":"vertical coordinate formula term: ps", + "out_name":"ps", + "type":"real", + "units":"Pa" + }, + "ps2":{ + "dimensions":"longitude latitude time2", + "long_name":"vertical coordinate formula term: ps", + "out_name":"ps", + "type":"real", + "units":"Pa" + }, + "ptop":{ + "dimensions":"", + "long_name":"pressure at top of model", + "out_name":"ptop", + "type":"", + "units":"Pa" + }, + "sigma":{ + "dimensions":"olevel", + "long_name":"vertical coordinate formula term: sigma(k)", + "out_name":"sigma", + "type":"double", + "units":"" + }, + "sigma_bnds":{ + "dimensions":"olevel", + "long_name":"vertical coordinate formula term: sigma(k+1/2)", + "out_name":"sigma_bnds", + "type":"double", + "units":"" + }, + "z1":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: z1", + "out_name":"z1", + "type":"double", + "units":"" + }, + "z2":{ + "dimensions":"", + "long_name":"vertical coordinate formula term: z2", + "out_name":"z2", + "type":"double", + "units":"" + }, + "zlev":{ + "dimensions":"olevel", + "long_name":"vertical coordinate formula term: zlev(k)", + "out_name":"zlev", + "type":"double", + "units":"" + }, + "zlev_bnds":{ + "dimensions":"olevel", + "long_name":"vertical coordinate formula term: zlev(k+1/2)", + "out_name":"zlev_bnds", + "type":"double", + "units":"" + }, + "ztop":{ + "dimensions":"", + "long_name":"height of top of model", + "out_name":"ztop", + "type":"", + "units":"m" + } + } + }, "frequency":{ - "1hr":"sampled hourly", - "1hrClimMon":"monthly climatology of diurnal cycle computed from hourly samples", - "3hr":"sampled every 3 hours", - "6hr":"sampled every 6 hours", - "day":"daily mean samples", - "dec":"decadal mean samples", - "fx":"fixed (time invariant) field", - "mon":"monthly mean samples", - "monClim":"monthly climatology computed from monthly mean samples", - "subhr":"sampled sub-hourly", - "yr":"annual mean samples" + "frequency":{ + "1hr":"sampled hourly", + "1hrClimMon":"monthly climatology of diurnal cycle computed from hourly samples", + "3hr":"sampled every 3 hours", + "6hr":"sampled every 6 hours", + "day":"daily mean samples", + "dec":"decadal mean samples", + "fx":"fixed (time invariant) field", + "mon":"monthly mean samples", + "monClim":"monthly climatology computed from monthly mean samples", + "subhr":"sampled sub-hourly", + "yr":"annual mean samples" + } + }, + "grid_label":{ + "grid_label":[ + "gm", + "gn", + "gna", + "gng", + "gnz", + "gr", + "gr1", + "gr1a", + "gr1g", + "gr1z", + "gr2", + "gr2a", + "gr2g", + "gr2z", + "gr3", + "gr3a", + "gr3g", + "gr3z", + "gr4", + "gr4a", + "gr4g", + "gr4z", + "gr5", + "gr5a", + "gr5g", + "gr5z", + "gr6", + "gr6a", + "gr6g", + "gr6z", + "gr7", + "gr7a", + "gr7g", + "gr7z", + "gr8", + "gr8a", + "gr8g", + "gr8z", + "gr9", + "gr9a", + "gr9g", + "gr9z", + "gra", + "grg", + "grz" + ] + }, + "grids":{ + "Header":{ + "Conventions":"CF-1.7 ODS-2.0", + "cmor_version":"3.2", + "data_specs_version":"01.00.13", + "missing_value":"1e20", + "product":"observations", + "table_date":"17 July 2017", + "table_id":"grids" + }, + "axis_entry":{ + "grid_latitude":{ + "axis":"Y", + "long_name":"latitude in rotated pole grid", + "out_name":"rlat", + "standard_name":"grid_latitude", + "type":"", + "units":"degrees" + }, + "grid_longitude":{ + "axis":"X", + "long_name":"longitude in rotated pole grid", + "out_name":"rlon", + "standard_name":"grid_longitude", + "type":"", + "units":"degrees" + }, + "i_index":{ + "axis":"", + "long_name":"cell index along first dimension", + "out_name":"i", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "j_index":{ + "axis":"", + "long_name":"cell index along second dimension", + "out_name":"j", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "k_index":{ + "axis":"", + "long_name":"cell index along third dimension", + "out_name":"k", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "l_index":{ + "axis":"", + "long_name":"cell index along fourth dimension", + "out_name":"l", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "m_index":{ + "axis":"", + "long_name":"cell index along fifth dimension", + "out_name":"m", + "standard_name":"", + "type":"integer", + "units":"1" + }, + "vertices":{ + "axis":"", + "long_name":"", + "out_name":"", + "standard_name":"", + "type":"", + "units":"" + }, + "x":{ + "axis":"X", + "long_name":"x coordinate of projection", + "out_name":"", + "standard_name":"projection_x_coordinate", + "type":"", + "units":"m" + }, + "x_deg":{ + "axis":"X", + "long_name":"x coordinate of projection", + "out_name":"x", + "standard_name":"projection_x_coordinate", + "type":"", + "units":"degrees" + }, + "y":{ + "axis":"Y", + "long_name":"y coordinate of projection", + "out_name":"", + "standard_name":"projection_y_coordinate", + "type":"", + "units":"m" + }, + "y_deg":{ + "axis":"Y", + "long_name":"y coordinate of projection", + "out_name":"y", + "standard_name":"projection_y_coordinate", + "type":"", + "units":"degrees" + } + }, + "mapping_entry":{ + "sample_user_mapping":{ + "coordinates":"rlon rlat", + "parameter1":"false_easting", + "parameter2":"false_northing" + } + }, + "variable_entry":{ + "latitude":{ + "dimensions":"longitude latitude", + "long_name":"", + "out_name":"latitude", + "standard_name":"latitude", + "units":"degrees_north", + "valid_max":"90.0", + "valid_min":"-90.0" + }, + "longitude":{ + "dimensions":"longitude latitude", + "long_name":"", + "out_name":"longitude", + "standard_name":"longitude", + "units":"degrees_east", + "valid_max":"360.0", + "valid_min":"0.0" + }, + "vertices_latitude":{ + "dimensions":"vertices longitude latitude", + "long_name":"", + "out_name":"vertices_latitude", + "standard_name":"vertices_latitude", + "units":"degrees_north", + "valid_max":"90.0", + "valid_min":"-90.0" + }, + "vertices_longitude":{ + "dimensions":"vertices longitude latitude", + "long_name":"", + "out_name":"vertices_longitude", + "standard_name":"vertices_longitude", + "units":"degrees_east", + "valid_max":"360.0", + "valid_min":"0.0" + } + } }, - "grid_label":[ - "gm", - "gn", - "gna", - "gng", - "gnz", - "gr", - "gr1", - "gr1a", - "gr1g", - "gr1z", - "gr2", - "gr2a", - "gr2g", - "gr2z", - "gr3", - "gr3a", - "gr3g", - "gr3z", - "gr4", - "gr4a", - "gr4g", - "gr4z", - "gr5", - "gr5a", - "gr5g", - "gr5z", - "gr6", - "gr6a", - "gr6g", - "gr6z", - "gr7", - "gr7a", - "gr7g", - "gr7z", - "gr8", - "gr8a", - "gr8g", - "gr8z", - "gr9", - "gr9a", - "gr9g", - "gr9z", - "gra", - "grg", - "grz" - ], "institution_id":{ - "DWD":"Deutscher Wetterdienst, Offenbach 63067, Germany", - "JPL":"Jet Propulsion Laboratory, Pasadena, CA 91109, USA", - "NOAA-NCEI":"NOAA's National Centers for Environmental Information, Asheville, NC 28801, USA", - "PCMDI":"Program for Climate Model Diagnosis and Intercomparison, Lawrence Livermore National Laboratory, Livermore, CA 94550, USA", - "RSS":"Remote Sensing Systems, Santa Rosa, CA 95401, USA" + "institution_id":{ + "DWD":"Deutscher Wetterdienst, Offenbach 63067, Germany", + "JPL":"Jet Propulsion Laboratory, Pasadena, CA 91109, USA", + "NOAA-NCEI":"NOAA's National Centers for Environmental Information, Asheville, NC 28801, USA", + "PCMDI":"Program for Climate Model Diagnosis and Intercomparison, Lawrence Livermore National Laboratory, Livermore, CA 94550, USA", + "RSS":"Remote Sensing Systems, Santa Rosa, CA 95401, USA" + } + }, + "license":{ + "license":"Data in this file produced by is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (https://creativecommons.org/licenses/). Use of the data must be acknowledged following guidelines found at . Further information about this data, including some limitations, can be found via .)" + }, + "mip_era":{ + "mip_era":[ + "CMIP5", + "CMIP6" + ] + }, + "nominal_resolution":{ + "nominal_resolution":[ + "0.5 km", + "1 km", + "10 km", + "100 km", + "1000 km", + "10000 km", + "1x1 degree", + "2.5 km", + "25 km", + "250 km", + "2500 km", + "5 km", + "50 km", + "500 km", + "5000 km" + ] + }, + "product":{ + "product":[ + "observations" + ] + }, + "realm":{ + "realm":[ + "aerosol", + "atmos", + "atmosChem", + "land", + "landIce", + "ocean", + "ocnBgchem", + "seaIce" + ] + }, + "region":{ + "region":[ + "africa", + "antarctica", + "arabian_sea", + "aral_sea", + "arctic_ocean", + "asia", + "atlantic_ocean", + "australia", + "baltic_sea", + "barents_opening", + "barents_sea", + "beaufort_sea", + "bellingshausen_sea", + "bering_sea", + "bering_strait", + "black_sea", + "canadian_archipelago", + "caribbean_sea", + "caspian_sea", + "central_america", + "chukchi_sea", + "contiguous_united_states", + "denmark_strait", + "drake_passage", + "east_china_sea", + "english_channel", + "eurasia", + "europe", + "faroe_scotland_channel", + "florida_bahamas_strait", + "fram_strait", + "global", + "global_land", + "global_ocean", + "great_lakes", + "greenland", + "gulf_of_alaska", + "gulf_of_mexico", + "hudson_bay", + "iceland_faroe_channel", + "indian_ocean", + "indo_pacific_ocean", + "indonesian_throughflow", + "irish_sea", + "lake_baykal", + "lake_chad", + "lake_malawi", + "lake_tanganyika", + "lake_victoria", + "mediterranean_sea", + "mozambique_channel", + "north_america", + "north_sea", + "norwegian_sea", + "pacific_equatorial_undercurrent", + "pacific_ocean", + "persian_gulf", + "red_sea", + "ross_sea", + "sea_of_japan", + "sea_of_okhotsk", + "south_america", + "south_china_sea", + "southern_ocean", + "taiwan_luzon_straits", + "weddell_sea", + "windward_passage", + "yellow_sea" + ] + }, + "required_global_attributes":{ + "required_global_attributes":[ + "Conventions", + "activity_id", + "contact", + "creation_date", + "data_specs_version", + "frequency", + "further_info_url", + "grid", + "grid_label", + "institution_id", + "license", + "mip_era", + "nominal_resolution", + "product", + "realm", + "source_id", + "source_type", + "source_version_number", + "table_id", + "tracking_id", + "variable_id" + ] + }, + "source_id":{ + "source_id":{ + "GPCP":{ + "label":"GPCP", + "label_extended":"Global Precipitation Climatology Project", + "release_year":"2017", + "source_id":"GPCP" + } + } + }, + "source_type":{ + "source_type":[ + "gridded_insitu", + "reanalysis", + "satellite_blended", + "satellite_retrieval" + ] }, - "mip_era":[ - "CMIP6" - ], - "nominal_resolution":[ - "0.5 km", - "1 km", - "10 km", - "100 km", - "1000 km", - "10000 km", - "1x1 degree", - "2.5 km", - "25 km", - "250 km", - "2500 km", - "5 km", - "50 km", - "500 km", - "5000 km" - ], - "product":[ - "composite", - "remote-sensed", - "satellite", - "surface-gridded-insitu", - "surface-radar" - ], - "realm":[ - "aerosol", - "atmos", - "atmosChem", - "land", - "landIce", - "ocean", - "ocnBgchem", - "seaIce" - ], - "required_global_attributes":[ - "activity_id", - "Conventions", - "creation_date", - "dataset_version_number", - "further_info_url", - "frequency", - "grid", - "grid_label", - "institution_id", - "license", - "mip_era", - "nominal_resolution", - "product", - "realm", - "region", - "source_id", - "table_id", - "tracking_id", - "variable_id" - ], - "table_id":[ - "Aday", - "Amon", - "Lmon", - "Omon", - "SImon", - "fx" - ] + "table_id":{ + "table_id":[ + "Aday", + "Amon", + "Lmon", + "Omon", + "SImon", + "fx" + ] + } } } \ No newline at end of file diff --git a/demo/obs4MIPs_Ofx_composite.json b/demo/obs4MIPs_Ofx_composite.json deleted file mode 100644 index 2a812c7..0000000 --- a/demo/obs4MIPs_Ofx_composite.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "Header":{ - "Conventions":"CF-1.7 CMIP-6.0", - "approx_interval":"0.00000", - "cmor_version":"3.2", - "data_specs_version":"01.00.11", - "generic_levels":"olevel", - "mip_era":"CMIP6", - "missing_value":"1e20", - "product":"model-output", - "realm":"ocean", - "table_date":"16 June 2017", - "table_id":"Table Ofx" - }, - "variable_entry":{ - "areacello":{ - "cell_measures":"area: areacello", - "cell_methods":"area: mean", - "comment":"Horizontal area of ocean grid cells", - "dimensions":"longitude latitude", - "frequency":"fx", - "long_name":"Ocean Grid-Cell Area", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"areacello", - "positive":"", - "standard_name":"cell_area", - "type":"real", - "units":"m2", - "valid_max":"", - "valid_min":"" - }, - "basin":{ - "cell_measures":"area: areacello", - "cell_methods":"area: mean", - "comment":"", - "dimensions":"longitude latitude", - "flag_meanings":"global_land southern_ocean atlantic_ocean pacific_ocean arctic_ocean indian_ocean mediterranean_sea black_sea hudson_bay baltic_sea red_sea", - "flag_values":"0 1 2 3 4 5 6 7 8 9 10", - "frequency":"fx", - "long_name":"Region Selection Index", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"basin", - "positive":"", - "standard_name":"region", - "type":"integer", - "units":"1.0", - "valid_max":"", - "valid_min":"" - }, - "deptho":{ - "cell_measures":"area: areacello", - "cell_methods":"area: mean", - "comment":"Ocean bathymetry. Reported here is the sea floor depth for present day relative to z=0 geoid. Reported as missing for land grid cells.", - "dimensions":"longitude latitude", - "frequency":"fx", - "long_name":"Sea Floor Depth Below Geoid", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"deptho", - "positive":"", - "standard_name":"sea_floor_depth_below_geoid", - "type":"real", - "units":"m", - "valid_max":"", - "valid_min":"" - }, - "hfgeou":{ - "cell_measures":"area: areacello", - "cell_methods":"area: mean", - "comment":"", - "dimensions":"longitude latitude", - "frequency":"fx", - "long_name":"Upward Geothermal Heat Flux at Sea Floor", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"hfgeou", - "positive":"up", - "standard_name":"upward_geothermal_heat_flux_at_sea_floor", - "type":"real", - "units":"W m-2", - "valid_max":"", - "valid_min":"" - }, - "masscello":{ - "cell_measures":"area: areacello volume: volcello", - "cell_methods":"area: mean", - "comment":"Tracer grid-cell mass per unit area used for computing tracer budgets. For Boussinesq models with static ocean grid cell thickness, masscello = rhozero*thickcello, where thickcello is static cell thickness and rhozero is constant Boussinesq reference density. More generally, masscello is time dependent and reported as part of Omon.", - "dimensions":"longitude latitude olevel", - "frequency":"fx", - "long_name":"Ocean Grid-Cell Mass per area", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"masscello", - "positive":"", - "standard_name":"sea_water_mass_per_unit_area", - "type":"real", - "units":"kg m-2", - "valid_max":"", - "valid_min":"" - }, - "sftof":{ - "cell_measures":"area: areacello", - "cell_methods":"area: mean", - "comment":"This is the area fraction at the ocean surface.", - "dimensions":"longitude latitude typesea", - "frequency":"fx", - "long_name":"Sea Area Fraction", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"sftof", - "positive":"", - "standard_name":"sea_area_fraction", - "type":"real", - "units":"%", - "valid_max":"", - "valid_min":"" - }, - "thkcello":{ - "cell_measures":"area: areacello volume: volcello", - "cell_methods":"area: mean", - "comment":"", - "dimensions":"longitude latitude olevel", - "frequency":"fx", - "long_name":"Ocean Model Cell Thickness", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"thkcello", - "positive":"", - "standard_name":"cell_thickness", - "type":"real", - "units":"m", - "valid_max":"", - "valid_min":"" - }, - "ugrid":{ - "cell_measures":"--UGRID", - "cell_methods":"", - "comment":"", - "dimensions":"longitude latitude", - "frequency":"fx", - "long_name":"UGRID Grid Information", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"ugrido", - "positive":"", - "standard_name":"missing", - "type":"float", - "units":"", - "valid_max":"", - "valid_min":"" - }, - "volcello":{ - "cell_measures":"area: areacello volume: volcello", - "cell_methods":"area: mean", - "comment":"grid-cell volume ca. 2000.", - "dimensions":"longitude latitude olevel", - "frequency":"fx", - "long_name":"Ocean Grid-Cell Volume", - "modeling_realm":"ocean", - "ok_max_mean_abs":"", - "ok_min_mean_abs":"", - "out_name":"volcello", - "positive":"", - "standard_name":"ocean_volume", - "type":"real", - "units":"m3", - "valid_max":"", - "valid_min":"" - } - } -} \ No newline at end of file diff --git a/demo/rssSsmiPrw-input.json b/demo/rssSsmiPrw-input.json new file mode 100644 index 0000000..2e2f6b1 --- /dev/null +++ b/demo/rssSsmiPrw-input.json @@ -0,0 +1,35 @@ +{ + "_control_vocabulary_file": "obs4MIPs_CV.json", + "_AXIS_ENTRY_FILE": "obs4MIPs_coordinate.json", + "_FORMULA_VAR_FILE": "obs4MIPs_formula_terms.json", + "activity_id": "obs4MIPs", + + "calendar": "gregorian", + "data_structure": "grid", + "grid": "2.5x2.5 degree latitude x longitude", + "grid_label": "gn", + "nominal_resolution": "250 km", + "dataset_version_number": "6.6.0", + "source_version_number": "6.6.0", + "frequency": "mon", + "product": "observations", + "realm": "atmos", + "source_type": "satellite_blended", + "variant_label": "BE", + + "comment": "", + "contact": "PCMDI (pcmdi-cmip@llnl.gov)", + "further_info_url": "https://www.earthsystemcog.org/projects/obs4mips/", + "institution_id": "RSS", + "institution": "Remote Sensing Systems, Santa Rosa, CA 95401, USA", + "references": "", + "source": "REMSS PRW v6.6.0 (2017): Precipitable water (PRW)", + "source_id": "REMSS-PRW-6-6-0", + "title": "PRW V6.6.0 prepared for obs4MIPs (ODS-v2.0.0)", + + "outpath": "./demo/", + "output_path_template": "", + "output_file_template": "", + + "license": "Data in this file produced by is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License (https://creativecommons.org/licenses/). Use of the data must be acknowledged following guidelines found at . Further information about this data, including some limitations, can be found via " +} \ No newline at end of file diff --git a/demo1/rss_ssmi_pw_v06.6-demo.nc b/demo/rss_ssmi_prw_v06.6-demo.nc similarity index 100% rename from demo1/rss_ssmi_pw_v06.6-demo.nc rename to demo/rss_ssmi_prw_v06.6-demo.nc diff --git a/demo/runCMOR3.py b/demo/runCMOR3.py deleted file mode 100755 index 8336347..0000000 --- a/demo/runCMOR3.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -""" -Created on Mon Jul 18 13:49:08 2016 - -This script generates all json files required to run obs4MIPs data creation and -then calls cmor3 to generate two example files. - -The file is split into 3 sections: - 1 - creates controlled vocabulary (CV) json inputs for CMOR3 - 2 - creates an Omon (ocean monthly) json input for generating a 'tos' - variable from a CF-compliant input - 3 - creates an fx (fixed field) json input for generating an 'areacello' - variable from a CF-compliant input - -PJD 20 Jul 2016 - Removed source_id -PJD 20 Jul 2016 - Further tweaks to enhance readability -PJD 28 Sep 2016 - Update to deal with new json (embedded key) formats -PJD 30 Jan 2017 - Update to deal with new tables -PJD 31 Jan 2017 - Updated to work with CMOR 3.2.1 -PJD 11 May 2017 - Updated to refer to all internal CVs and tables, and revised for CMOR 3.2.3 - - TODO: - -@author: durack1 -""" - -#%% Import statements -import cmor,gc,json,os -import cdms2 as cdm -import numpy as np -from durolib import readJsonCreateDict - -#%% Set local path -homePath = os.path.join('/','/'.join(os.path.realpath(__file__).split('/')[0:-1])) ; # Extract path from executing file -#homePath = '/export/durack1/git/obs4MIPs-cmor-tables/' ; # Linux hard code path -#homePath = '/sync/git/obs4MIPs-cmor-tables/demo' ; # OS-X hard code path -os.chdir(homePath) - -#%% SECTION 1 - Integrate all controlled vocabularies (CVs) into master file - create obs4MIPs_CV.json -jsonCVs = 'obs4MIPs_CV.json' -buildList = [ - ['frequency','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_frequency.json'], - ['grid_label','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_grid_label.json'], - ['institution_id','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_institution_id.json'], - ['mip_era','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_mip_era.json'], - ['nominal_resolution','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_nominal_resolution.json'], - ['product','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_product.json'], - ['realm','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_realm.json'], - ['required_global_attributes','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_required_global_attributes.json'], - ['table_id','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_table_id.json'], - ['coordinate','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_coordinate.json'], - ['formula_terms','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_formula_terms.json'] - ] ; - -# Loop through buildList and create output tables -tmp = readJsonCreateDict(buildList) -for count,table in enumerate(tmp.keys()): - if table in ['coordinate','formula_terms']: - vars()[table] = tmp[table] - else: - vars()[table] = tmp[table].get(table) -del(tmp,count,table) ; gc.collect() - -# Rebuild dictionaries -obs4MIPs_CV = {} -obs4MIPs_CV['CV'] = {} -for count,CV in enumerate(buildList): - CVName1 = CV[0] - if CVName1 in ['coordinate','formula_terms','grids']: - continue - else: - obs4MIPs_CV['CV'][CVName1] = eval(CVName1) - -outFilePairs = {'obs4MIPs_CV':'obs4MIPs_CV.json', - 'coordinate':'obs4MIPs_coordinate.json', - 'formula_terms':'obs4MIPs_formula_terms.json'} - -# Loop through dictionary and write files -for count,pair in enumerate(outFilePairs): - if os.path.exists(outFilePairs[pair]): - print 'File existing, purging:',outFilePairs[pair] - os.remove(outFilePairs[pair]) - fH = open(outFilePairs[pair],'w') - json.dump(eval(pair),fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") - fH.close() - -# Cleanup -del(CVName1,buildList,coordinate,count,formula_terms,frequency,grid_label,homePath,institution_id,jsonCVs, - mip_era,nominal_resolution,obs4MIPs_CV,outFilePairs,pair,product,realm, - required_global_attributes,table_id) - -#%% SECTION 2 - Integrate Omon into master file - create obs4MIPs_Omon_composite.json -buildList = [ - ['Omon','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/Tables/obs4MIPs_Omon.json'] - ] ; - -# Loop through buildList and create output tables -tmp = readJsonCreateDict(buildList) -for count,table in enumerate(tmp.keys()): - if table == 'coordinate': - vars()[table] = tmp[table].get(table) - else: - vars()[table] = tmp[table] -del(tmp,count,table) ; gc.collect() - -outFile = 'obs4MIPs_Omon_composite.json' -# Check file exists -if os.path.exists(outFile): - print 'File existing, purging:',outFile - os.remove(outFile) -fH = open(outFile,'w') -json.dump(Omon,fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") -fH.close() - -# Process variable (with time axis) -print 'starting cmor' -cmor.setup(inpath='../Tables',netcdf_file_action=cmor.CMOR_REPLACE_4) -print 'cmor.setup complete' -cmor.dataset_json('drive_obs4MIPs.json') ; # Update contents of this file to set your global_attributes -print 'cmor.dataset_json complete' -f = cdm.open('amipobs_tos_360x180_v1.1.0_187001-187112.nc') -d = f['tos'] -lat = d.getLatitude() -lon = d.getLongitude() -time = d.getTime() -#cmor.set_cur_dataset_attribute('history',f.history) ; # Force local file attribute as history -table = 'obs4MIPs_Omon_composite.json' ; # Amon,Lmon,Omon,SImon -obs4MIPsOmonID = cmor.load_table(table) ; # Load target table (above), axis info (coordinates, grid*) and CVs -print 'cmor.load_table complete' -axes = [ {'table_entry': 'time', - 'units': 'days since 1870-01-01', - }, - {'table_entry': 'latitude', - 'units': 'degrees_north', - 'coord_vals': lat[:], - 'cell_bounds': lat.getBounds()}, - {'table_entry': 'longitude', - 'units': 'degrees_east', - 'coord_vals': lon[:], - 'cell_bounds': lon.getBounds()}, - ] -axis_ids = list() -for axis in axes: - axis_id = cmor.axis(**axis) - axis_ids.append(axis_id) -varid = cmor.variable('tos',d.units,axis_ids) -print 'cmor.variable complete' -values = np.array(d[:],np.float32) -cmor.set_deflate(varid,1,1,1) ; # shuffle=1,deflate=1,deflate_level=1 ; CMOR 3.0.6+ -cmor.write(varid,values,time_vals=time[:],time_bnds=time.getBounds()) ; # Write variable with time axis -f.close() -cmor.close() -# Cleanup -del(f,d,lat,lon,time) ; gc.collect() - - -#%% SECTION 3 - Integrate fx into master file - create obs4MIPs_fx_composite.json -buildList = [ - ['Ofx','https://raw.githubusercontent.com/PCMDI/cmip6-cmor-tables/master/Tables/CMIP6_Ofx.json'] - ] ; - -# Loop through buildList and create output tables -tmp = readJsonCreateDict(buildList) -for count,table in enumerate(tmp.keys()): - vars()[table] = tmp[table] -del(tmp,count,table) ; gc.collect() - -# Rebuild -table = {} -for count,CV in enumerate(buildList): - CVName1 = CV[0] - keys = eval(CVName1).keys() - for count in range(len(keys)): - table[keys[count]] = eval(CVName1).get(keys[count]) - -table['Header']['realm'] = 'ocean' ; # Overwrite realm info - -outFile = 'obs4MIPs_Ofx_composite.json' -# Check file exists -if os.path.exists(outFile): - print 'File existing, purging:',outFile - os.remove(outFile) -fH = open(outFile,'w') -json.dump(table,fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") -fH.close() - -# Process fixed field -cmor.setup(inpath='../Tables',netcdf_file_action=cmor.CMOR_REPLACE_4) -cmor.dataset_json('drive_obs4MIPs.json') ; # Update contents of this file to set your global_attributes -f = cdm.open('amipbc_areacello_360x180_v1.1.0.nc') -d = f['areacello'] -lat = d.getLatitude() -lon = d.getLongitude() -time = d.getTime() -#cmor.set_cur_dataset_attribute('history',f.history) ; # Force local file attribute as history -table = 'obs4MIPs_Ofx_composite.json' ; # Amon,Lmon,Omon,SImon -cmor.load_table(table) -axes = [ {'table_entry': 'latitude', - 'units': 'degrees_north', - 'coord_vals': lat[:], - 'cell_bounds': lat.getBounds()}, - {'table_entry': 'longitude', - 'units': 'degrees_east', - 'coord_vals': lon[:], - 'cell_bounds': lon.getBounds()}, - ] -axis_ids = list() -for axis in axes: - axis_id = cmor.axis(**axis) - axis_ids.append(axis_id) -varid = cmor.variable('areacello',d.units,axis_ids) -values = np.array(d[:],np.float32) -cmor.set_deflate(varid,1,1,1) ; # shuffle=1,deflate=1,deflate_level=1 ; CMOR 3.0.6+ -cmor.write(varid,values) ; # Write fixed variable -f.close() -cmor.close() -# Cleanup -del(outFile,f,d,lat,lon,time) ; gc.collect() diff --git a/demo/runCmorDemo.py b/demo/runCmorDemo.py new file mode 100644 index 0000000..c60209d --- /dev/null +++ b/demo/runCmorDemo.py @@ -0,0 +1,57 @@ +import cmor +import cdms2 as cdm +import numpy as np +#import pdb ; # Debug statement - import if enabling below + +#%% User provided input +cmorTable = 'Tables/obs4MIPs_Amon.json' ; # Aday,Amon,Lmon,Omon,SImon,fx - Load target table, axis info (coordinates, grid*) and CVs +inputJson = 'rssSsmiPrw-input.json' ; # Update contents of this file to set your global_attributes +inputDataPath = 'rss_ssmi_prw_v06.6-demo.nc' +inputVarName = 'prw' +outputVarName = 'prw' +outputUnits = 'kg m-2' + +### BETTER IF THE USER DOES NOT CHANGE ANYTHING BELOW THIS LINE... +#%% Process variable (with time axis) +# Open and read input netcdf file +f = cdm.open(inputDataPath) +d = f(inputVarName) +lat = d.getLatitude() +lon = d.getLongitude() +#time = d.getTime() ; # Assumes variable is named 'time', for the demo file this is named 'months' +time = d.getAxis(0) + +#%% Initialize and run CMOR +# For more information see https://cmor.llnl.gov/mydoc_cmor3_api/ +cmor.setup(inpath='./',netcdf_file_action=cmor.CMOR_REPLACE_4) #,logfile='cmorLog.txt') +cmor.dataset_json(inputJson) +cmor.load_table(cmorTable) +#cmor.set_cur_dataset_attribute('history',f.history) ; # Force input file attribute as history +axes = [ {'table_entry': 'time', + 'units': time.units, # 'days since 1870-01-01', + }, + {'table_entry': 'latitude', + 'units': 'degrees_north', + 'coord_vals': lat[:], + 'cell_bounds': lat.getBounds()}, + {'table_entry': 'longitude', + 'units': 'degrees_east', + 'coord_vals': lon[:], + 'cell_bounds': lon.getBounds()}, + ] +axisIds = list() ; # Create list of axes +for axis in axes: + axisId = cmor.axis(**axis) + axisIds.append(axisId) + +#pdb.set_trace() ; # Debug statement + +d.units = outputUnits +varid = cmor.variable(outputVarName,d.units,axisIds,missing_value=d.missing) +values = np.array(d[:],np.float32) +cdm.setAutoBounds('on') # PJG - Caution, this attempts to automatically set coordinate bounds - please check outputs using this option + +cmor.set_deflate(varid,1,1,1) ; # shuffle=1,deflate=1,deflate_level=1 - Deflate options compress file data +cmor.write(varid,values,time_vals=time[:],time_bnds=time.getBounds()) ; # Write variable with time axis +f.close() +cmor.close() \ No newline at end of file diff --git a/demo/src/extractNcSubset.py b/demo/src/extractNcSubset.py deleted file mode 100644 index 92ba5a3..0000000 --- a/demo/src/extractNcSubset.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Mon Jul 18 14:32:30 2016 - -@author: durack1 -""" - -import cdms2 as cdm - -# Set nc classic as outputs -cdm.setCompressionWarnings(0) ; # Suppress warnings -cdm.setNetcdfShuffleFlag(0) -cdm.setNetcdfDeflateFlag(1) ; # was 0 130717 -cdm.setNetcdfDeflateLevelFlag(9) ; # was 0 130717 -cdm.setAutoBounds(1) ; # Ensure bounds on time and depth axes are generated - -#%% Set input file and extract -f = '/work/durack1/Shared/150219_AMIPForcingData/360x180_v1.1.0_san/amipobs_tos_360x180_v1.1.0_187001-201512.nc' -fH = cdm.open(f) -d = fH('tos',time=('1870','1872')) -fo = '/export/durack1/git/obs4MIPs-cmor-tables/demo/amipobs_tos_360x180_v1.1.0_187001-187112.nc' -foH = cdm.open(fo,'w') -foH.write(d) -foH.close() -fH.close() \ No newline at end of file diff --git a/demo1/README.txt b/demo1/README.txt deleted file mode 100644 index 7844641..0000000 --- a/demo1/README.txt +++ /dev/null @@ -1,38 +0,0 @@ - -This file describes how to run demo1 which uses CMOR3 to produce a sample obs4MIPs dataset. It builds on the original demo directory set up by PJD. - -PjG Last update 05012017 - - -Follow these steps to run demo1: - -1) Downloads: https://github.com/PCMDI/obs4MIPs-cmor-tables/blob/master/demo1/update_obs4mips_CMOR3_CV.py - by clicking on the link and then selecting the "raw" tab. - Repeat the process for: - https://github.com/PCMDI/obs4MIPs-cmor-tables/blob/master/demo1/generate_cmor3_tables.py - https://github.com/PCMDI/obs4MIPs-cmor-tables/blob/master/demo1/rss_prw_run_cmor_demo.py - https://github.com/PCMDI/obs4MIPs-cmor-tables/blob/master/demo1/rss_ssmi_pw_v06.6-demo.nc - -2) Make sure you are in a conda envirnment that includes CMOR3, then execute the following: - - >python generate_cmor3_tables.py - -This script downloads downloads from github the latest tables which continue to be modified slightly as the CMIP6 specifications are finalized. It is currently set up to generate one table at a time. - -3) Next, execute the following: - - >python update_obs4mips_CMOR3_CV.py - - This script retrieves the lastest obs4MIPs "Controlled Vocabulary" necessary to run CMOR in a single json file. - -4) With the obs4MIPs CMOR3 tables and CV's updated, execute demo1: - - > python rss_prw_run_cmor_demo.py - - -The user may need to change paths as desired, but this should produce some test data. - - - - - diff --git a/demo1/generate_cmor3_tables.py b/demo1/generate_cmor3_tables.py deleted file mode 100755 index 49c6706..0000000 --- a/demo1/generate_cmor3_tables.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -""" -Created on Mon Jul 18 13:49:08 2016 - -This script generates all json files required to run obs4MIPs data creation and -then calls cmor3 to generate two example files. - -The file is split into 3 sections: - 1 - creates controlled vocabulary (CV) json inputs for CMOR3 - 2 - creates an Omon (ocean monthly) json input for generating a 'tos' - variable from a CF-compliant input - 3 - creates an fx (fixed field) json input for generating an 'areacello' - variable from a CF-compliant input - -PJD 20 Jul 2016 - Removed source_id -PJD 20 Jul 2016 - Further tweaks to enhance readability - - TODO: - -@author: durack1 -""" - -execfile('read_json_fcns.py') - - -#%% Import statements -import cmor,gc,json,os,ssl,sys,urllib2 -import cdms2 as cdm -import numpy as np - -#%% Set local path -homePath = os.path.join('/','/'.join(os.path.realpath(__file__).split('/')[0:-1])) ; # Extract path from executing file -#homePath = '/export/durack1/git/obs4MIPs-cmor-tables/' ; # Hard code path -#homePath = '/sync/git/obs4MIPs-cmor-tables/demo' ; # Hard code path -os.chdir(homePath) - - -#%% SECTION 2 - Integrate Omon into master file - create obs4MIPs_Omon_composite.json -jsonOmon = 'obs4MIPs_Omon_composite.json' -jsonAmon = 'obs4MIPs_Amon.json' -buildList = [ - ['coordinate','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_coordinate.json'], -#['Omon','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/Tables/obs4MIPs_Omon.json'], - ['Amon','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/Tables/obs4MIPs_Amon.json'] - ] ; - -# Loop through buildList and create output tables -tmp = readJsonCreateDict(buildList) -for count,table in enumerate(tmp.keys()): - if table == 'coordinate': - vars()[table] = tmp[table].get(table) - else: - vars()[table] = tmp[table] -del(tmp,count,table) ; gc.collect() - -# Now cleanup Amon - These problems require fixes upstream -#Amon['variable_entry'].pop('mc') -#Amon['variable_entry'].pop('phalf') - -# Rebuild -table = {} -for count,CV in enumerate(buildList): - CVName1 = CV[0] - if CVName1 == 'coordinate': - table['axis_entry'] = eval(CVName1) - else: - keys = eval(CVName1).keys() - for count in range(len(keys)): - table[keys[count]] = eval(CVName1).get(keys[count]) - - - -outtable = jsonAmon - -try: - os.mkdir('obs4MIPs_CMOR_tables') -except: - pass - -outFile = 'obs4MIPs_CMOR_tables/' + outtable - -# Check file exists -if os.path.exists(outFile): - print 'File existing, purging:',outFile - os.remove(outFile) -fH = open(outFile,'w') -json.dump(table,fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") -fH.close() diff --git a/demo1/obs4MIPs_CMOR_tables/obs4MIPs_CV.json b/demo1/obs4MIPs_CMOR_tables/obs4MIPs_CV.json deleted file mode 100644 index 2a2e9b7..0000000 --- a/demo1/obs4MIPs_CMOR_tables/obs4MIPs_CV.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "CV":{ - "frequency":[ - "1hr", - "1hrClimMon", - "3hr", - "3hrClim", - "6hr", - "day", - "decadal", - "fx", - "mon", - "monClim", - "subhr", - "yr" - ], - "grid_label":[ - "gm", - "gn", - "gna", - "gng", - "gnz", - "gr", - "gr1", - "gr1a", - "gr1g", - "gr1z", - "gr2", - "gr2a", - "gr2g", - "gr2z", - "gr3", - "gr3a", - "gr3g", - "gr3z", - "gr4", - "gr4a", - "gr4g", - "gr4z", - "gr5", - "gr5a", - "gr5g", - "gr5z", - "gr6", - "gr6a", - "gr6g", - "gr6z", - "gr7", - "gr7a", - "gr7g", - "gr7z", - "gr8", - "gr8a", - "gr8g", - "gr8z", - "gr9", - "gr9a", - "gr9g", - "gr9z", - "gra", - "grg", - "grz" - ], - "institution_id":{ - "JPL":"Jet Propulsion Laboratory, Pasadena, CA 91109, USA", - "NOAA-NCEI":"NOAA's National Centers for Environmental Information, Asheville, NC 28801, USA", - "PCMDI":"Program for Climate Model Diagnosis and Intercomparison, Lawrence Livermore National Laboratory, Livermore, CA 94550, USA", - "RSS":"Remote Sensing Systems, Santa Rosa, CA 95401, USA" - }, - "mip_era":[ - "CMIP6" - ], - "nominal_resolution":[ - "0.5 km", - "1 km", - "10 km", - "100 km", - "1000 km", - "10000 km", - "1x1 degree", - "2.5 km", - "25 km", - "250 km", - "2500 km", - "5 km", - "50 km", - "500 km", - "5000 km" - ], - "product":[ - "composite", - "remote-sensed", - "satellite", - "surface-gridded-insitu", - "surface-radar" - ], - "realm":[ - "aerosol", - "atmos", - "atmosChem", - "land", - "landIce", - "ocean", - "ocnBgchem", - "seaIce" - ], - "required_global_attributes":[ - "activity_id", - "Conventions", - "creation_date", - "dataset_version_number", - "further_info_url", - "frequency", - "grid", - "grid_label", - "institution_id", - "license", - "mip_era", - "nominal_resolution", - "product", - "realm", - "region", - "source_id", - "table_id", - "tracking_id", - "variable_id" - ], - "table_id":[ - "Aday", - "Amon", - "Lmon", - "Omon", - "SImon", - "fx" - ] - } -} \ No newline at end of file diff --git a/demo1/prw_rss_mo_input.json b/demo1/prw_rss_mo_input.json deleted file mode 100644 index 5c64563..0000000 --- a/demo1/prw_rss_mo_input.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "_control_vocabulary_file": "obs4MIPs_CV.json", - "activity_id": "obs4MIPs", - "calendar": "gregorian", - - "data_structure": "grid", - "dataset_version_number": "1.1.0", - "frequency": "mon", - "grid": "2.5x2.5 degree latitude x longitude", - "grid_label": "gs1x1 gr", - "grid_resolution": "1x1 degree", - "product": "satellite", - "realm": "atm", - - "comment": "", - "contact": "PCMDI (pcmdi-cmip@llnl.gov) ", - "further_info_url": "http://www-pcmdi.llnl.gov/projects/amip/AMIP2EXPDSN/BCS/amip2bcs.php", - "institution_id": "RSS", - "institution": "Remote Sensing Systems", - "references": "", - "source": "Program for Climate Model Diagnosis and Intercomparison (PCMDI)", - "source_id": "PCMDI", - "title": "Dataset prepared for PCMDI Metrics Package (PMP) observational database PMPobsv1.1", - - "outpath": "./testout-demo1/", - "output_path_template": "", - "output_file_template": "
", - - "license": "Testing 123" -} diff --git a/demo1/read_json_fcns.py b/demo1/read_json_fcns.py deleted file mode 100755 index 07ab6b2..0000000 --- a/demo1/read_json_fcns.py +++ /dev/null @@ -1,49 +0,0 @@ -# Loop through input tables -def readJsonCreateDict(buildList): - ''' - Documentation for readJsonCreateDict(buildList): - ------- - The readJsonCreateDict() function reads web-based json files and writes - their contents to a dictionary in memory - - Author: Paul J. Durack : pauldurack@llnl.gov - - Usage: - ------ - >>> from runCMOR3 import readJsonCreateDict - >>> readJsonCreateDict(['Omon','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/Tables/obs4MIPs_Omon.json']) - - Notes: - ----- - ... - ''' - # Test for list input of length == 2 - if len(buildList[0]) != 2: - print 'Invalid inputs, exiting..' - sys.exit() - # Create urllib2 context to deal with lab/LLNL web certificates - ctx = ssl.create_default_context() - ctx.check_hostname = False - ctx.verify_mode = ssl.CERT_NONE - # Iterate through buildList and write results to jsonDict - jsonDict = {} - for count,table in enumerate(buildList): - print 'Processing:',table[0] - # Read web file - jsonOutput = urllib2.urlopen(table[1], context=ctx) - tmp = jsonOutput.read() - vars()[table[0]] = tmp - jsonOutput.close() - # Write local json - tmpFile = open('tmp.json','w') - tmpFile.write(eval(table[0])) - tmpFile.close() - # Read local json - vars()[table[0]] = json.load(open('tmp.json','r')) - os.remove('tmp.json') - jsonDict[table[0]] = eval(table[0]) ; # Write to dictionary - - return jsonDict - - - diff --git a/demo1/rss_prw_run_cmor_demo.py b/demo1/rss_prw_run_cmor_demo.py deleted file mode 100644 index a30804a..0000000 --- a/demo1/rss_prw_run_cmor_demo.py +++ /dev/null @@ -1,67 +0,0 @@ -import cmor -import cdms2 as cdm -import numpy as np -import pdb -import sys -import argparse -import MV2 - -inp = '../Tables' -#inp = '.' -input_json = './prw_rss_mo_input.json' -input_data_path = '/clim_obs/orig/data/RSS/rss_ssmi_pw_v06.6-demo.nc' -input_var_name = 'prw' -cmor_table = './obs4MIPs_CMOR_tables/obs4MIPs_Amon.json' -#cmor_table = 'obs4MIPs_Amon.json' -output_units = 'kg m-2' -output_var_name = 'prw' - -### BETTER IF THE USER DOES NOT HAVE TO CHANGE ANYTHING BELOW THIS LINE... - -#%% Process variable (with time axis) -cmor.setup(inpath=inp,netcdf_file_action=cmor.CMOR_REPLACE_4) -#cmor.dataset_json('./drive_obs4MIPs.json') ; # Update contents of this file to set your global_attributes -cmor.dataset_json(input_json) ; # Update contents of this file to set your global_attributes - -f = cdm.open(input_data_path) -d = f(input_var_name) -lat = d.getLatitude() -lon = d.getLongitude() -time = d.getTime() -time = d.getAxis(0) -time.axis = 'T' - -#cmor.set_cur_dataset_attribute('history',f.history) ; # Force local file attribute as history -#table = '../obs4MIPs_Omon_composite.json' ; # Amon,Lmon,Omon,SImon -table = cmor_table ; # Amon,Lmon,Omon,SImon - -obs4MIPsAmonID = cmor.load_table(table) ; # Load target table (above), axis info (coordinates, grid*) and CVs -axes = [ {'table_entry': 'time', - 'units': time.units, #'days since 1870-01-01', - }, - {'table_entry': 'latitude', - 'units': 'degrees_north', - 'coord_vals': lat[:], - 'cell_bounds': lat.getBounds()}, - {'table_entry': 'longitude', - 'units': 'degrees_east', - 'coord_vals': lon[:], - 'cell_bounds': lon.getBounds()}, - ] -axis_ids = list() -for axis in axes: - axis_id = cmor.axis(**axis) - axis_ids.append(axis_id) - -#pdb.set_trace() - -d.units = output_units -varid = cmor.variable(output_var_name,d.units,axis_ids,missing_value=d.missing) -values = np.array(d[:],np.float32) -cdm.setAutoBounds('on') # PJG CAUTION WITH THIS ONE! - -cmor.set_deflate(varid,1,1,1) ; # shuffle=1,deflate=1,deflate_level=1 ; CMOR 3.0.6+ -cmor.write(varid,values,time_vals=time[:],time_bnds=time.getBounds()) ; # Write variable with time axis -f.close() -cmor.close() - diff --git a/demo1/update_obs4mips_CMOR3_CV.py b/demo1/update_obs4mips_CMOR3_CV.py deleted file mode 100755 index af92606..0000000 --- a/demo1/update_obs4mips_CMOR3_CV.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -""" -Created on Mon Jul 18 13:49:08 2016 - -This script generates all json files required to run obs4MIPs data creation and -then calls cmor3 to generate two example files. - -The file is split into 3 sections: - 1 - creates controlled vocabulary (CV) json inputs for CMOR3 - 2 - creates an Omon (ocean monthly) json input for generating a 'tos' - variable from a CF-compliant input - 3 - creates an fx (fixed field) json input for generating an 'areacello' - variable from a CF-compliant input - -PJD 20 Jul 2016 - Removed source_id -PJD 20 Jul 2016 - Further tweaks to enhance readability - - TODO: - -@author: durack1 -""" - -#%% Import statements -import cmor,gc,json,os,ssl,sys,urllib2 -import cdms2 as cdm -import numpy as np - -#%% Set local path -homePath = os.path.join('/','/'.join(os.path.realpath(__file__).split('/')[0:-1])) ; # Extract path from executing file -#homePath = '/export/durack1/git/obs4MIPs-cmor-tables/' ; # Hard code path -#homePath = '/sync/git/obs4MIPs-cmor-tables/demo' ; # Hard code path -os.chdir(homePath) - -#%% Function definitions - -# Loop through input tables -def readJsonCreateDict(buildList): - ''' - Documentation for readJsonCreateDict(buildList): - ------- - The readJsonCreateDict() function reads web-based json files and writes - their contents to a dictionary in memory - - Author: Paul J. Durack : pauldurack@llnl.gov - - Usage: - ------ - >>> from runCMOR3 import readJsonCreateDict - >>> readJsonCreateDict(['Omon','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/Tables/obs4MIPs_Omon.json']) - - Notes: - ----- - ... - ''' - # Test for list input of length == 2 - if len(buildList[0]) != 2: - print 'Invalid inputs, exiting..' - sys.exit() - # Create urllib2 context to deal with lab/LLNL web certificates - ctx = ssl.create_default_context() - ctx.check_hostname = False - ctx.verify_mode = ssl.CERT_NONE - # Iterate through buildList and write results to jsonDict - jsonDict = {} - for count,table in enumerate(buildList): - print 'Processing:',table[0] - # Read web file - jsonOutput = urllib2.urlopen(table[1], context=ctx) - tmp = jsonOutput.read() - vars()[table[0]] = tmp - jsonOutput.close() - # Write local json - tmpFile = open('tmp.json','w') - tmpFile.write(eval(table[0])) - tmpFile.close() - # Read local json - vars()[table[0]] = json.load(open('tmp.json','r')) - os.remove('tmp.json') - jsonDict[table[0]] = eval(table[0]) ; # Write to dictionary - - return jsonDict - -#%% SECTION 1 - Integrate all controlled vocabularies (CVs) into master file - create obs4MIPs_CV.json -jsonCVs = 'obs4MIPs_CV.json' -buildList = [ - ['frequency','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_frequency.json'], - ['grid_label','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_grid_label.json'], - ['institution_id','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_institution_id.json'], - ['mip_era','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_mip_era.json'], - ['nominal_resolution','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_nominal_resolution.json'], - ['product','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_product.json'], - ['realm','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_realm.json'], - ['required_global_attributes','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_required_global_attributes.json'], - ['table_id','https://raw.githubusercontent.com/PCMDI/obs4MIPs-cmor-tables/master/obs4MIPs_table_id.json'], - ['coordinate','https://raw.githubusercontent.com/PCMDI/cmip6-cmor-tables/master/Tables/CMIP6_coordinate.json'], - ['formula_terms','https://raw.githubusercontent.com/PCMDI/cmip6-cmor-tables/master/Tables/CMIP6_formula_terms.json'] - ] ; - - - -# Loop through buildList and create output tables -tmp = readJsonCreateDict(buildList) -for count,table in enumerate(tmp.keys()): - vars()[table] = tmp[table].get(table) -# if table == 'coordinate': -# vars()[table] = tmp[table].get(table) -# else: -# vars()[table] = tmp[table] -del(tmp,count,table) ; gc.collect() - -# Rebuild dictionaries -obs4MIPs_CV = {} -obs4MIPs_CV['CV'] = {} -for count,CV in enumerate(buildList): - CVName1 = CV[0] - if CVName1 in ['coordinate','formula_terms','grids']: - continue - else: - obs4MIPs_CV['CV'][CVName1] = eval(CVName1) - -outFilePairs = {'obs4MIPs_CV':'obs4MIPs_CV.json', - 'coordinate':'CMIP6_coordinate.json', - 'formula_terms':'CMIP6_formula_terms.json'} - -try: - os.mkdir('obs4MIPs_CMOR_tables') -except: - pass - -outFile = 'obs4MIPs_CMOR_tables/obs4MIPs_CV.json' -# Check file exists -if os.path.exists(outFile): - print 'File existing, purging:',outFile - os.remove(outFile) -fH = open(outFile,'w') -json.dump(obs4MIPs_CV,fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") -fH.close() diff --git a/obs4MIPs_grids.json b/obs4MIPs_grids.json index df731f7..9bbf987 100644 --- a/obs4MIPs_grids.json +++ b/obs4MIPs_grids.json @@ -6,7 +6,7 @@ "missing_value":"1e20", "product":"observations", "table_date":"17 July 2017", - "table_id":"Table obs4MIPs_grids" + "table_id":"grids" }, "axis_entry":{ "grid_latitude":{ diff --git a/src/writeJson.py b/src/writeJson.py index e2810d7..1e3cd12 100755 --- a/src/writeJson.py +++ b/src/writeJson.py @@ -37,6 +37,7 @@ PJD 21 Jun 2017 - Updated PR #46 by Funkensieper/DWD to add new Amon variables https://github.com/PCMDI/obs4MIPs-cmor-tables/issues/48 PJD 28 Jun 2017 - Rerun to fix formula_terms to work with CMOR 3.2.4 https://github.com/PCMDI/cmor/issues/198 PJD 17 Jul 2017 - Implement new CVs in obs4MIPs Data Specifications (ODS) https://github.com/PCMDI/obs4MIPs-cmor-tables/issues/40 +PJD 17 Jul 2017 - Updated tableNames to deal with 3.2.5 hard codings - TODO: Create demo3 which simplifies user experience to downloading pre-packaged json zip archive, unzipping contents, tweaking user input json and running cmor @@ -44,7 +45,7 @@ """ #%% Import statements -import gc,json,os,ssl,time +import gc,json,os,shutil,ssl,subprocess,time from durolib import readJsonCreateDict #%% Determine path @@ -122,7 +123,10 @@ eval(tableName)['Header']['Conventions'] = 'CF-1.7 ODS-2.0' ; # Update "Conventions": "CF-1.7 CMIP-6.0" eval(tableName)['Header']['table_date'] = time.strftime('%d %B %Y') eval(tableName)['Header']['product'] = 'observations' - eval(tableName)['Header']['table_id'] = ''.join(['Table obs4MIPs_',tableName]) + #eval(tableName)['Header']['table_id'] = ''.join(['Table obs4MIPs_',tableName]) + eval(tableName)['Header']['table_id'] = tableName ; # Added as kludge for CMOR3.2.5 +# ! Valid values must match the regular expression: +# ! ["^Aday$" "^Amon$" "^Lmon$" "^Omon$" "^SImon$" "^fx$" ...] if 'baseURL' in eval(tableName)['Header'].keys(): del(eval(tableName)['Header']['baseURL']) ; # Remove spurious entry @@ -132,7 +136,8 @@ Omon['Header']['realm'] = 'ocean' SImon['Header']['realm'] = 'seaIce' fx['Header']['realm'] = 'fx' -Aday['Header']['table_id'] = 'Table obs4MIPs_Aday' ; # Cleanup from upstream +#Aday['Header']['table_id'] = 'Table obs4MIPs_Aday' ; # Cleanup from upstream +Aday['Header']['table_id'] = 'Aday' ; # Added as kludge for CMOR3.2.5 # Clean out modeling_realm for jsonName in ['Amon','Lmon','Omon','SImon']: #,'Aday']: @@ -598,3 +603,85 @@ del(jsonName,outFile) ; gc.collect() # Validate - only necessary if files are not written by json module + +#%% Generate files for download and use +demoPath = os.path.join('/','/'.join(os.path.realpath(__file__).split('/')[0:-2]),'demo') +outPath = os.path.join(demoPath,'Tables') +if os.path.exists(outPath): + shutil.rmtree(outPath) ; # Purge all existing + os.makedirs(outPath) +else: + os.makedirs(outPath) +os.chdir(demoPath) + +# Integrate all controlled vocabularies (CVs) into master file - create obs4MIPs_CV.json +# List all local files +inputJson = ['frequency','grid_label','institution_id','license','mip_era', + 'nominal_resolution','product','realm','region', + 'required_global_attributes','source_id','source_type','table_id', # These are controlled vocabs + 'coordinate','grids','formula_terms', # These are not controlled vocabs - rather lookup tables for CMOR + 'Aday','Amon','Lmon','Omon','SImon','fx' # Update/add if new tables are generated + ] +lookupList = ['coordinate','grids','formula_terms'] +tableList = ['Aday','Amon','Lmon','Omon','SImon','fx'] + +# Load dictionaries from local files +for count,CV in enumerate(inputJson): + if CV in tableList: + path = '../Tables/' + else: + path = '../' + vars()[CV] = json.load(open(''.join([path,'obs4MIPs_',CV,'.json']))) + +# Build CV master dictionary +obs4MIPs_CV = {} +obs4MIPs_CV['CV'] = {} +for count,CV in enumerate(inputJson): + #CVName1 = CV[0] + if CV not in tableList: + obs4MIPs_CV['CV'][CV] = eval(CV) + +# Write obs4MIPs_CV.json +if os.path.exists('obs4MIPs_CV.json'): + print 'File existing, purging:','obs4MIPs_CV.json' + os.remove('obs4MIPs_CV.json') +fH = open('obs4MIPs_CV.json','w') +json.dump(obs4MIPs_CV,fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") +fH.close() + +# Loop and write all other files +os.chdir('Tables') +tableList.extend(lookupList) +for count,CV in enumerate(tableList): + outFile = ''.join(['obs4MIPs_',CV,'.json']) + if os.path.exists(outFile): + print 'File existing, purging:',outFile + os.remove(outFile) + fH = open(outFile,'w') + json.dump(eval(CV),fH,ensure_ascii=True,sort_keys=True,indent=4,separators=(',',':'),encoding="utf-8") + fH.close() + +# Cleanup +del(coordinate,count,formula_terms,frequency,grid_label,homePath,institution_id, + mip_era,nominal_resolution,obs4MIPs_CV,product,realm,inputJson,lookupList, + tableList,required_global_attributes,table_id) + +#%% Generate zip archive +# Cleanup rogue files +os.chdir(demoPath) +if os.path.exists('.DS_Store'): + os.remove('.DS_Store') +if os.path.exists('demo.zip'): + os.remove('demo.zip') +if os.path.exists('demo/demo.zip'): + os.remove('demo/demo.zip') +# Jump up one directory +os.chdir(demoPath.replace('/demo','')) +# Zip demo dir +p = subprocess.Popen(['7za','a','demo.zip','demo','tzip'], + stdout=subprocess.PIPE,stderr=subprocess.PIPE, + cwd=os.getcwd()) +stdout = p.stdout.read() ; # Use persistent variables for tests below +stderr = p.stderr.read() +# Move to demo dir +shutil.move('demo.zip', 'demo/demo.zip') \ No newline at end of file