diff --git a/schemes/rrtmgp/objects/ccpp_gas_optics_rrtmgp.meta b/schemes/rrtmgp/objects/ccpp_gas_optics_rrtmgp.meta index f7e2ad0c..68eecacc 100644 --- a/schemes/rrtmgp/objects/ccpp_gas_optics_rrtmgp.meta +++ b/schemes/rrtmgp/objects/ccpp_gas_optics_rrtmgp.meta @@ -1,7 +1,13 @@ [ccpp-table-properties] name = ty_gas_optics_rrtmgp_ccpp type = ddt - dependencies = ../ext/rrtmgp-frontend/mo_gas_optics_rrtmgp.F90,../ext/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90 + dependencies = ../ext/rrtmgp-frontend/mo_gas_optics_rrtmgp.F90 + # Host model must choose the appropriate module to build + # IF CPUS: + dependencies = ../ext/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90 + # ELSE IF GPUS: + dependencies = ../ext/rrtmgp-kernels/accel/mo_gas_optics_rrtmgp_kernels.F90 + # END IF dependencies = ../ext/gas-optics/mo_gas_optics_constants.F90,../ext/gas-optics/mo_gas_optics_util_string.F90 dependencies = ../ext/gas-optics/mo_gas_optics.F90 dependencies = ../ext/rte-kernels/mo_rte_kind.F90 diff --git a/schemes/rrtmgp/rrtmgp_constituents.F90 b/schemes/rrtmgp/rrtmgp_constituents.F90 index 7d3166fd..e858972b 100644 --- a/schemes/rrtmgp/rrtmgp_constituents.F90 +++ b/schemes/rrtmgp/rrtmgp_constituents.F90 @@ -81,6 +81,7 @@ subroutine rrtmgp_constituents_register(rad_climate, rrtmgp_dyn_consts, errmsg, units = 'kg kg-1', & vertical_dim = 'vertical_layer_dimension', & min_value = 0.0_kind_phys, & + diag_name = stdname, & advected = .true., & water_species = .false., & mixing_ratio_type = 'dry', & @@ -95,6 +96,7 @@ subroutine rrtmgp_constituents_register(rad_climate, rrtmgp_dyn_consts, errmsg, vertical_dim = 'vertical_layer_dimension', & min_value = 0.0_kind_phys, & advected = .false., & + diag_name = stdname, & water_species = .false., & mixing_ratio_type = 'dry', & errcode = errflg, & @@ -109,6 +111,7 @@ subroutine rrtmgp_constituents_register(rad_climate, rrtmgp_dyn_consts, errmsg, min_value = 0.0_kind_phys, & default_value = 0.0_kind_phys, & advected = .false., & + diag_name = stdname, & water_species = .false., & mixing_ratio_type = 'dry', & errcode = errflg, & diff --git a/schemes/rrtmgp/rrtmgp_lw_cloud_optics.meta b/schemes/rrtmgp/rrtmgp_lw_cloud_optics.meta index 5e62ae1c..44133482 100644 --- a/schemes/rrtmgp/rrtmgp_lw_cloud_optics.meta +++ b/schemes/rrtmgp/rrtmgp_lw_cloud_optics.meta @@ -1,7 +1,12 @@ [ccpp-table-properties] name = rrtmgp_lw_cloud_optics type = scheme + # Host model must choose the appropriate module to build + # IF CPUS: dependencies = ext/rte-kernels/mo_optical_props_kernels.F90 + # ELSE IF GPUS: + dependencies = ext/rte-kernels/accel/mo_optical_props_kernels.F90 + # END IF [ccpp-arg-table] name = rrtmgp_lw_cloud_optics_run diff --git a/schemes/rrtmgp/rrtmgp_lw_gas_optics.meta b/schemes/rrtmgp/rrtmgp_lw_gas_optics.meta index 1c90d3bd..7df76095 100644 --- a/schemes/rrtmgp/rrtmgp_lw_gas_optics.meta +++ b/schemes/rrtmgp/rrtmgp_lw_gas_optics.meta @@ -3,8 +3,14 @@ type = scheme dependencies = ext/rte-kernels/mo_rte_kind.F90 dependencies = objects/ccpp_gas_concentrations.F90 + # Host model must choose the appropriate module to build + # IF CPUS: + dependencies = ext/rte-kernels/mo_optical_props_kernels.F90 + dependencies = ext/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90 + # ELSE IF GPUS: dependencies = ext/rte-kernels/accel/mo_optical_props_kernels.F90 dependencies = ext/rrtmgp-kernels/accel/mo_gas_optics_rrtmgp_kernels.F90 + # END IF [ccpp-arg-table] name = rrtmgp_lw_gas_optics_init diff --git a/schemes/rrtmgp/rrtmgp_lw_rte.meta b/schemes/rrtmgp/rrtmgp_lw_rte.meta index 7baf0978..4d775c63 100644 --- a/schemes/rrtmgp/rrtmgp_lw_rte.meta +++ b/schemes/rrtmgp/rrtmgp_lw_rte.meta @@ -5,9 +5,13 @@ dependencies = ext/rte-frontend/mo_rte_config.F90 dependencies = ext/rte-kernels/mo_rte_util_array.F90 dependencies = ext/rte-frontend/mo_rte_util_array_validation.F90 - dependencies = ext/rte-kernels/mo_rte_solver_kernels.F90 dependencies = ext/rte-kernels/mo_fluxes_broadband_kernels.F90 + # Host model must choose the appropriate module to build + # IF CPUS: + dependencies = ext/rte-kernels/mo_rte_solver_kernels.F90 + # ELSE IF GPUS: dependencies = ext/rte-kernels/accel/mo_rte_solver_kernels.F90 + # END IF dependencies = utils/radiation_tools.F90 dependencies = objects/ccpp_source_functions.F90,objects/ccpp_gas_optics_rrtmgp.F90 dependencies = objects/ccpp_optical_props.F90 diff --git a/schemes/rrtmgp/rrtmgp_sw_gas_optics.meta b/schemes/rrtmgp/rrtmgp_sw_gas_optics.meta index e81e833e..03771c44 100644 --- a/schemes/rrtmgp/rrtmgp_sw_gas_optics.meta +++ b/schemes/rrtmgp/rrtmgp_sw_gas_optics.meta @@ -1,8 +1,14 @@ [ccpp-table-properties] name = rrtmgp_sw_gas_optics type = scheme + # Host model must choose the appropriate module to build + # IF CPUS: + dependencies = ext/rte-kernels/mo_optical_props_kernels.F90 + dependencies = ext/rrtmgp-kernels/mo_gas_optics_rrtmgp_kernels.F90 + # ELSE IF GPUS: dependencies = ext/rte-kernels/accel/mo_optical_props_kernels.F90 dependencies = ext/rrtmgp-kernels/accel/mo_gas_optics_rrtmgp_kernels.F90 + # END IF [ccpp-arg-table] name = rrtmgp_sw_gas_optics_init diff --git a/schemes/rrtmgp/rrtmgp_sw_rte.meta b/schemes/rrtmgp/rrtmgp_sw_rte.meta index e85c3d59..118fe9d0 100644 --- a/schemes/rrtmgp/rrtmgp_sw_rte.meta +++ b/schemes/rrtmgp/rrtmgp_sw_rte.meta @@ -5,9 +5,13 @@ dependencies = ext/rte-frontend/mo_rte_config.F90 dependencies = ext/rte-kernels/mo_rte_util_array.F90 dependencies = ext/rte-frontend/mo_rte_util_array_validation.F90 - dependencies = ext/rte-kernels/mo_rte_solver_kernels.F90 dependencies = ext/rte-kernels/mo_fluxes_broadband_kernels.F90 + # Host model must choose the appropriate module to build + # IF CPUS: + dependencies = ext/rte-kernels/mo_rte_solver_kernels.F90 + # ELSE IF GPUS: dependencies = ext/rte-kernels/accel/mo_rte_solver_kernels.F90 + # END IF dependencies = utils/radiation_tools.F90 dependencies = objects/ccpp_source_functions.F90,objects/ccpp_gas_optics_rrtmgp.F90 dependencies = objects/ccpp_optical_props.F90 diff --git a/test/test_schemes/initialize_constituents.F90 b/test/test_schemes/initialize_constituents.F90 index e9cc3fae..2dd847b8 100644 --- a/test/test_schemes/initialize_constituents.F90 +++ b/test/test_schemes/initialize_constituents.F90 @@ -24,6 +24,7 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) integer :: num_variables integer :: ierr integer :: var_index + integer :: split_index integer :: constituent_index integer :: known_const_index integer :: found_const_count @@ -31,6 +32,7 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) character(len=256) :: variable_name character(len=512) :: alloc_err_msg character(len=256), allocatable :: constituent_names(:) + character(len=256), allocatable :: const_diag_names(:) character(len=65), parameter :: water_species_std_names(6) = & (/'water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water ', & 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water', & @@ -66,14 +68,22 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) write(errmsg,*) 'Failed to allocate "constituent_names" in initialize_constituents_register: ', trim(alloc_err_msg) return end if + allocate(const_diag_names(num_variables), stat=ierr, errmsg=alloc_err_msg) + if (ierr /= 0) then + errcode = 1 + write(errmsg,*) 'Failed to allocate "const_diag_names" in initialize_constituents_register: ', trim(alloc_err_msg) + return + end if ! Loop over all variables in the file and add each constituent to the ! dynamic constituent array do var_index = 1, num_variables ierr = pio_inq_varname(ncdata, var_index, variable_name) known_constituent = .false. - if (index(variable_name, 'cnst_') > 0) then + split_index = index(variable_name, 'cnst_') + if (split_index > 0) then constituent_index = constituent_index + 1 + const_diag_names(constituent_index) = variable_name(split_index:) ! Replace with standard name if known, to avoid duplicates if (found_const_count < size(water_species_std_names)) then do known_const_index = 1, size(const_file_names) @@ -107,6 +117,7 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) vertical_dim = 'vertical_layer_dimension', & min_value = 0.0_kind_phys, & advected = .true., & + diag_name = const_diag_names(var_index), & water_species = .true., & mixing_ratio_type = 'wet', & errcode = errcode, & @@ -122,6 +133,7 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) vertical_dim = 'vertical_layer_dimension', & min_value = 0.0_kind_phys, & advected = .true., & + diag_name = const_diag_names(var_index), & mixing_ratio_type = 'wet', & errcode = errcode, & errmsg = errmsg) @@ -133,6 +145,7 @@ subroutine initialize_constituents_register(constituents, errmsg, errcode) vertical_dim = 'vertical_layer_dimension', & min_value = 0.0_kind_phys, & advected = .true., & + diag_name = const_diag_names(var_index), & errcode = errcode, & errmsg = errmsg) end if