diff --git a/schemes/utilities/co2_diagnostic_export.F90 b/schemes/utilities/co2_diagnostic_export.F90 new file mode 100644 index 00000000..75103500 --- /dev/null +++ b/schemes/utilities/co2_diagnostic_export.F90 @@ -0,0 +1,31 @@ +! Export the diagnostic CO2 concentration to the surface coupler. +module co2_diagnostic_export + + implicit none + private + + ! Public interfaces + public :: co2_diagnostic_export_run +contains +!> \section arg_table_co2_diagnostic_export_run Argument Table +!! \htmlinclude co2_diagnostic_export_run.html +subroutine co2_diagnostic_export_run(co2_vmr, co2diag, errmsg, errcode) + use ccpp_kinds, only: kind_phys + + ! Input arguments + real(kind_phys), intent(in) :: co2_vmr ! Prescribed CO2 volume mixing ratio [mol mol-1] + + ! Output arguments + real(kind_phys), intent(out) :: co2diag(:) ! Diagnostic CO2 concentration for coupler [ppmv] + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errcode + + errmsg = '' + errcode = 0 + + ! mol/mol -> ppmv expected by the coupler. (chem_surfvals sets CO2VMR * 1e6) + co2diag(:) = co2_vmr * 1.0e6_kind_phys + +end subroutine co2_diagnostic_export_run + +end module co2_diagnostic_export diff --git a/schemes/utilities/co2_diagnostic_export.meta b/schemes/utilities/co2_diagnostic_export.meta new file mode 100644 index 00000000..20e577a6 --- /dev/null +++ b/schemes/utilities/co2_diagnostic_export.meta @@ -0,0 +1,31 @@ +[ccpp-table-properties] + name = co2_diagnostic_export + type = scheme + +[ccpp-arg-table] + name = co2_diagnostic_export_run + type = scheme +[ co2_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_co2 + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ co2diag ] + standard_name = diagnostic_volume_mixing_ratio_of_co2_to_coupler + units = ppmv + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=* + dimensions = () + intent = out +[ errcode ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/suites/suite_cam4.xml b/suites/suite_cam4.xml index 06c89ac7..e953b1b2 100644 --- a/suites/suite_cam4.xml +++ b/suites/suite_cam4.xml @@ -278,6 +278,7 @@ of the "before_coupler" group. --> calc_dry_air_ideal_gas_density set_surface_coupling_vars + co2_diagnostic_export diff --git a/suites/suite_cam5.xml b/suites/suite_cam5.xml index d5e6b3fa..53d13fba 100644 --- a/suites/suite_cam5.xml +++ b/suites/suite_cam5.xml @@ -160,6 +160,8 @@ of the "before_coupler" group. --> calc_dry_air_ideal_gas_density set_surface_coupling_vars + + co2_diagnostic_export diff --git a/suites/suite_cam7.xml b/suites/suite_cam7.xml index aa091ebb..5e5cfac3 100644 --- a/suites/suite_cam7.xml +++ b/suites/suite_cam7.xml @@ -81,7 +81,8 @@ of the "before_coupler" group. --> + set_surface_coupling_vars + co2_diagnostic_export -->