diff --git a/Metadata-standard-names.md b/Metadata-standard-names.md index c8f1c7a..e77ba1e 100644 --- a/Metadata-standard-names.md +++ b/Metadata-standard-names.md @@ -7,7 +7,9 @@ * [diagnostics](#diagnostics) * [atmospheric_composition](#atmospheric_composition) * [atmospheric_composition: GOCART aerosols](#atmospheric_composition-gocart-aerosols) -* [standard_variables](#standard_variables) +* [required framework-provided variables](#required-framework-provided-variables) +* [optional framework-provided variables](#optional-framework-provided-variables) +* [system variables](#system-variables) * [GFS_typedefs_GFS_control_type](#gfs_typedefs_gfs_control_type) * [GFS_typedefs_GFS_interstitial_type](#gfs_typedefs_gfs_interstitial_type) * [GFS_typedefs_GFS_tbd_type](#gfs_typedefs_gfs_tbd_type) @@ -132,6 +134,8 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `logical(kind=)`: units = flag * `lagrangian_tendency_of_air_pressure`: Vertical pressure velocity * `real(kind=kind_phys)`: units = Pa s-1 +* `dry_air_density`: Density of dry air + * `real(kind=kind_phys)`: units = kg m-3 * `air_pressure`: Midpoint air pressure * `real(kind=kind_phys)`: units = Pa * `air_pressure_of_dry_air`: Dry midpoint pressure @@ -154,6 +158,8 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = m * `geopotential_height_wrt_surface`: geopotential height w.r.t. local surface * `real(kind=kind_phys)`: units = m +* `geopotential_height_wrt_surface_at_interface`: geopotential height w.r.t. local surface at interface + * `real(kind=kind_phys)`: units = m * `potentially_advected_quantities`: Potentially advected quantities * `real(kind=kind_phys)`: units = various * `air_pressure_at_interface`: Air pressure at interface @@ -172,6 +178,8 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `logical(kind=kind_phys)`: units = flag * `is_initialized_physics_grid`: Flag to indicate if physics grid is initialized * `logical(kind=kind_phys)`: units = flag +* `control_for_negative_constituent_warning`: Logging setting for negative constituent mass fixer + * `character(kind=len=*)`: units = 1 * `geopotential_height_at_interface`: Geopotential height at interface * `real(kind=kind_phys)`: units = m * `vertically_integrated_total_energy_of_initial_state`: Vertically integrated total energy of initial state @@ -182,9 +190,11 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = kg m-2 * `vertically_integrated_total_water_of_current_state`: Vertically integrated total water of current state * `real(kind=kind_phys)`: units = kg m-2 +* `tendency_of_dry_air_enthalpy_at_constant_pressure`: Tendency of dry air enthalpy at constant pressure + * `real(kind=kind_phys)`: units = J kg-1 s-1 * `tendency_of_air_temperature`: Change in temperature from a parameterization * `real(kind=kind_phys)`: units = K s-1 -* `tendency_of_air_temperature_due_to_model_physics`: Total change in temperature from a physics suite +* `tendency_of_air_temperature_due_to_model_physics`: Total change in air temperature from a physics suite * `real(kind=kind_phys)`: units = K s-1 * `tendency_of_air_potential_temperature`: Change in potential temperature from a parameterization * `real(kind=kind_phys)`: units = K s-1 @@ -198,6 +208,14 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = m s-2 * `tendency_of_y_wind_due_to_model_physics`: Tendency of y wind due to model physics * `real(kind=kind_phys)`: units = m s-2 +* `tendency_of_eastward_wind`: Change in eastward wind from a parameterization + * `real(kind=kind_phys)`: units = m s-2 +* `tendency_of_eastward_wind_due_to_model_physics`: Total change in eastward wind from a physics suite + * `real(kind=kind_phys)`: units = m s-2 +* `tendency_of_northward_wind`: Change in northward wind from a parameterization + * `real(kind=kind_phys)`: units = m s-2 +* `tendency_of_northward_wind_due_to_model_physics`: Total change in northward wind from a physics suite + * `real(kind=kind_phys)`: units = m s-2 * `surface_upward_heat_flux_in_air`: Surface upward heat flux in air * `real(kind=kind_phys)`: units = W m-2 * `cumulative_boundary_flux_of_total_energy`: Cumulative boundary flux of total energy @@ -206,12 +224,14 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = W m-2 * `us_standard_air_pressure_at_sea_level`: US Standard Atmospheric pressure at sea level * `real(kind=kind_phys)`: units = Pa -* `reference_pressure`: reference pressure used in definition of potential temperature, Exner function, etc. +* `surface_reference_pressure`: Reference pressure used in definition of potential temperature, Exner function, etc. * `real(kind=kind_phys)`: units = Pa * `reference_pressure_in_atmosphere_layer`: reference pressure in atmosphere layer * `real(kind=kind_phys)`: units = Pa * `reference_air_pressure_normalized_by_surface_air_pressure`: reference pressure normalized by surface pressure * `real(kind=kind_phys)`: units = 1 +* `reference_pressure_in_atmosphere_layer_normalized_by_surface_reference_pressure`: Reference pressure in atmosphere layer normalized by surface reference pressure + * `real(kind=kind_phys)`: units = 1 * `dimensionless_exner_function`: exner function * `real(kind=kind_phys)`: units = 1 * `air_potential_temperature`: air potential temperature @@ -222,6 +242,10 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = K * `composition_dependent_gas_constant_of_dry_air`: Composition dependent gas constant of dry air * `real(kind=kind_phys)`: units = J kg-1 K-1 +* `composition_dependent_specific_heat_of_dry_air_at_constant_pressure`: composition dependent specific heat of dry air at constant pressure + * `real(kind=kind_phys)`: units = J kg-1 K-1 +* `composition_dependent_ratio_of_dry_air_gas_constant_to_specific_heat_of_dry_air_at_constant_pressure`: composition dependent ratio of dry air gas constant to specific heat of dry air at constant pressure + * `real(kind=kind_phys)`: units = 1 * `ratio_of_water_vapor_gas_constant_to_composition_dependent_dry_air_gas_constant_minus_one`: (Rwv / Rdair) - 1.0 * `real(kind=kind_phys)`: units = 1 * `mass_content_of_cloud_ice_in_atmosphere_layer`: Mass content of cloud ice in atmosphere layer @@ -250,14 +274,20 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = mol mol-1 * `water_vapor_mixing_ratio_wrt_dry_air`: Ratio of the mass of water vapor to the mass of dry air * `real(kind=kind_phys)`: units = kg kg-1 +* `cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water`: Ratio of the mass of liquid water to the mass of moist air and condensed water + * `real(kind=kind_phys)`: units = kg kg-1 * `cloud_liquid_water_mixing_ratio_wrt_moist_air`: Ratio of the mass of liquid water to the mass of moist air * `real(kind=kind_phys)`: units = kg kg-1 * `cloud_liquid_water_mixing_ratio_wrt_dry_air`: Ratio of the mass of liquid water to the mass of dry air * `real(kind=kind_phys)`: units = kg kg-1 * `cloud_ice_mixing_ratio_wrt_dry_air`: Ratio of the mass of ice to the mass of dry air * `real(kind=kind_phys)`: units = kg kg-1 +* `rain_mixing_ratio_wrt_moist_air_and_condensed_water`: ratio of the mass of rain to the mass of moist air and condensed water + * `real(kind=kind_phys)`: units = kg kg-1 * `rain_mixing_ratio_wrt_moist_air`: ratio of the mass of rain to the mass of moist air * `real(kind=kind_phys)`: units = kg kg-1 +* `rain_mixing_ratio_wrt_dry_air`: ratio of the mass of rain to the mass of dry air + * `real(kind=kind_phys)`: units = kg kg-1 * `mole_fraction_of_ozone_in_air`: Mole fraction of ozone in air * `real(kind=kind_phys)`: units = mol mol-1 * `mole_fraction_of_carbon_dioxide_in_air`: Mole fraction of carbon dioxide in air @@ -337,12 +367,30 @@ Note that appending '_on_previous_timestep' to standard_names in this section yi * `real(kind=kind_phys)`: units = m-1 * `volume_extinction_in_air_due_to_aerosol_particles_lambda3`: Aerosol extinction at wavelength3 * `real(kind=kind_phys)`: units = m-1 -## standard_variables -Standard / required CCPP variables +## required framework-provided variables +Required CCPP framework-provided variables * `ccpp_error_message`: Error message for error handling in CCPP * `character(kind=len=512)`: units = none * `ccpp_error_code`: Error code for error handling in CCPP * `integer(kind=)`: units = 1 +## optional framework-provided variables +Optional CCPP framework-provided variables +* `scheme_name`: CCPP physics scheme name + * `character(kind=len=64)`: units = none +* `ccpp_constituent_properties`: CCPP Constituent Properties + * `ccpp_constituent_prop_ptr_t(kind=)`: units = none +* `ccpp_constituents`: Array of constituents managed by CCPP Framework + * `real(kind=kind_phys)`: units = none +* `ccpp_constituent_minimum_values`: CCPP constituent minimum values + * `real(kind=kind_phys)`: units = none +* `number_of_ccpp_constituents`: Number of constituents managed by CCPP Framework + * `integer(kind=)`: units = count +## system variables +Variables related to the compute environment +* `flag_for_mpi_root`: Flag for MPI root + * `logical(kind=)`: units = flag +* `log_output_unit`: Log output unit + * `integer(kind=)`: units = 1 ## GFS_typedefs_GFS_control_type * `sigma_pressure_hybrid_coordinate_a_coefficient`: Sigma pressure hybrid coordinate a coefficient * `real(kind=kind_phys)`: units = Pa diff --git a/StandardNamesRules.rst b/StandardNamesRules.rst index e912a12..6d0f7b9 100644 --- a/StandardNamesRules.rst +++ b/StandardNamesRules.rst @@ -107,6 +107,10 @@ CCPP Standard Name Rules use flag_for ``_X``. If it is any other data type, use control_for ``_X``. All flags should be Fortran logicals. +#. Standard names that start with ``ccpp_`` represent CCPP framework-provided variables. + All other standard names should avoid the use of ``ccpp`` in their name in order + to avoid any confusion. + #. No punctuation should appear in standard names except for underscores (_). #. Standard names are case insensitive, i.e. example = EXAMPLE. diff --git a/standard_names.xml b/standard_names.xml index ffa6b61..242c52e 100644 --- a/standard_names.xml +++ b/standard_names.xml @@ -197,6 +197,10 @@ long_name="Vertical pressure velocity"> real + + real + real @@ -235,6 +239,10 @@ long_name="geopotential height w.r.t. local surface"> real + + real + real @@ -263,6 +271,10 @@ long_name="Flag to indicate if physics grid is initialized"> logical + + character + real @@ -278,13 +290,16 @@ real + + real + real + long_name="Total change in air temperature from a physics suite"> real real + + real + + + real + + + real + + + real + real @@ -321,8 +352,8 @@ long_name="US Standard Atmospheric pressure at sea level"> real - + real real + + real + real @@ -352,6 +387,14 @@ real + + real + + + real + @@ -402,6 +445,10 @@ long_name="Ratio of the mass of water vapor to the mass of dry air"> real + + real + real @@ -414,10 +461,18 @@ long_name="Ratio of the mass of ice to the mass of dry air"> real + + real + real + + real + real @@ -575,8 +630,8 @@ real -
+
character @@ -586,6 +641,40 @@ integer
+
+ + character + + + ccpp_constituent_prop_ptr_t + + + real + + + real + + + integer + +
+
+ + logical + + + integer + +
real diff --git a/tools/meta_stdname_check.py b/tools/meta_stdname_check.py index afcb066..d343027 100755 --- a/tools/meta_stdname_check.py +++ b/tools/meta_stdname_check.py @@ -34,6 +34,7 @@ import os import os.path import datetime +from collections import OrderedDict ################################################ #Add CCPP framework (lib) modules to python path @@ -198,8 +199,8 @@ def missing_metafile_names(metafile, stdname_set): #Create set of all standard names not in dictionary set: missing_stdname_set = meta_stdname_set.difference(stdname_set) - #Return list of missing standard names: - return list(missing_stdname_set) + #Return sorted list of missing standard names: + return sorted(missing_stdname_set) #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #Function to find the paths to all metadata files within @@ -297,7 +298,7 @@ def print_missing_names(missing_names_dict): std_names = get_dict_stdnames(stdname_dict_root) #Create new meta file/missing names dictionary: -meta_miss_names_dict = {} +meta_miss_names_dict = OrderedDict() #Check if user passed in single metadata file: if os.path.isfile(metafile_loc):