From eaab2e00fb46fc2bfa8ac2b28de2dac6ae932b17 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Thu, 4 Jun 2026 12:16:34 -0400 Subject: [PATCH 1/2] Complete CCPPization of CAM7 hb_free_atm --- .../vertical_diffusion/diffusion_stubs.F90 | 43 ++++++- .../suite_vdiff_holtslag_boville_free_atm.xml | 113 ++++++++++++++++++ 2 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 test/test_suites/suite_vdiff_holtslag_boville_free_atm.xml diff --git a/schemes/vertical_diffusion/diffusion_stubs.F90 b/schemes/vertical_diffusion/diffusion_stubs.F90 index 611514daa..e30f3173f 100644 --- a/schemes/vertical_diffusion/diffusion_stubs.F90 +++ b/schemes/vertical_diffusion/diffusion_stubs.F90 @@ -13,8 +13,9 @@ module diffusion_stubs ! CCPP-compliant subroutines public :: zero_upper_boundary_condition_init - public :: tms_beljaars_zero_stub_run - public :: beljaars_zero_stub_run + public :: tms_beljaars_zero_stub_run ! Stub out both TMS and Beljaars (do_beljaars set to false) + public :: beljaars_zero_stub_run ! Stub out Beljaars only and allows TMS to be read from snapshot (do_beljaars set to false) + public :: tms_zero_stub_run ! Stub out TMS only and allow Beljaars to be read from snapshot (do_beljaars set to true) public :: turbulent_mountain_stress_add_drag_coefficient_run public :: beljaars_add_wind_damping_rate_run @@ -158,6 +159,44 @@ subroutine beljaars_zero_stub_run( & end subroutine beljaars_zero_stub_run + ! Stub for TMS to be set to zero while not implemented + ! but allow CAM7 Beljaars to be tested from snapshot. +!> \section arg_table_tms_zero_stub_run Argument Table +!! \htmlinclude tms_zero_stub_run.html + subroutine tms_zero_stub_run( & + ncol, pver, & + ksrftms, & + tautmsx, tautmsy, & + do_beljaars, & + errmsg, errflg) + + ! Input arguments + integer, intent(in) :: ncol + integer, intent(in) :: pver + + ! Output arguments + real(kind_phys), intent(out) :: ksrftms(:) ! Surface drag coefficient for turbulent mountain stress. > 0. [kg m-2 s-1] + real(kind_phys), intent(out) :: tautmsx(:) ! Eastward turbulent mountain surface stress [N m-2] + real(kind_phys), intent(out) :: tautmsy(:) ! Northward turbulent mountain surface stress [N m-2] + logical, intent(out) :: do_beljaars + character(len=512), intent(out) :: errmsg ! Error message + integer, intent(out) :: errflg ! Error flag + + errmsg = '' + errflg = 0 + + ! Set TMS drag coefficient to zero (stub implementation) + ksrftms(:ncol) = 0._kind_phys + + ! Set all TMS and Beljaars stresses to zero (stub implementation) + tautmsx(:ncol) = 0._kind_phys + tautmsy(:ncol) = 0._kind_phys + + ! Set do_beljaars flag to true as it is being read from snapshot. + do_beljaars = .true. + + end subroutine tms_zero_stub_run + ! Add turbulent mountain stress to the total surface drag coefficient !> \section arg_table_turbulent_mountain_stress_add_drag_coefficient_run Argument Table !! \htmlinclude arg_table_turbulent_mountain_stress_add_drag_coefficient_run.html diff --git a/test/test_suites/suite_vdiff_holtslag_boville_free_atm.xml b/test/test_suites/suite_vdiff_holtslag_boville_free_atm.xml new file mode 100644 index 000000000..77cc0fd32 --- /dev/null +++ b/test/test_suites/suite_vdiff_holtslag_boville_free_atm.xml @@ -0,0 +1,113 @@ + + + + + initialize_constituents + to_be_ccppized_temporary + + + holtslag_boville_diff_options + vertical_diffusion_options + + + zero_upper_boundary_condition + + + hb_diff_set_vertical_diffusion_top + + + tms_beljaars_zero_stub + + + vertical_diffusion_prepare_inputs + + + hb_free_atm_diff_prepare_vertical_diffusion_inputs + + + + vertical_diffusion_not_use_rairv + vertical_diffusion_set_temperature_at_toa_default + vertical_diffusion_interpolate_to_interfaces + + + vertical_diffusion_set_total_surface_stress + + + holtslag_boville_diff + + + hb_pbl_independent_coefficients + compute_kinematic_fluxes_and_obklen + hb_diff_free_atm_exchange_coefficients + + + vertical_diffusion_sponge_layer + + + + + implicit_surface_stress_add_drag_coefficient + + + vertical_diffusion_wind_damping_rate + beljaars_add_wind_damping_rate + + + vertical_diffusion_diffuse_horizontal_momentum + + + vertical_diffusion_set_dry_static_energy_at_toa_zero + + + vertical_diffusion_diffuse_dry_static_energy + + + vertical_diffusion_diffuse_tracers + + + vertical_diffusion_tendencies + + + vertical_diffusion_tendencies_diagnostics + + + apply_tendency_of_northward_wind + apply_tendency_of_eastward_wind + apply_constituent_tendencies + apply_heating_rate + qneg + geopotential_temp + update_dry_static_energy + + From 8993b739088b3e621dddc1a2307e1f0b36327bb8 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Tue, 21 Jul 2026 13:30:51 -0400 Subject: [PATCH 2/2] Change len=512 to len=* for errmsg. --- schemes/vertical_diffusion/diffusion_stubs.F90 | 16 ++++++++-------- schemes/vertical_diffusion/diffusion_stubs.meta | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/schemes/vertical_diffusion/diffusion_stubs.F90 b/schemes/vertical_diffusion/diffusion_stubs.F90 index caa43e614..197fb33b3 100644 --- a/schemes/vertical_diffusion/diffusion_stubs.F90 +++ b/schemes/vertical_diffusion/diffusion_stubs.F90 @@ -50,7 +50,7 @@ subroutine zero_upper_boundary_condition_init( & ! Output arguments real(kind_phys), intent(out) :: ubc_mmr(:,:) ! Upper boundary condition mass mixing ratios [none] logical, intent(out) :: cnst_fixed_ubc(:) ! Flag for fixed upper boundary condition of constituents [flag] - character(len=512), intent(out) :: errmsg ! Error message + character(len=*) , intent(out) :: errmsg ! Error message integer, intent(out) :: errflg ! Error flag errmsg = '' @@ -88,7 +88,7 @@ subroutine tms_beljaars_zero_stub_run( & real(kind_phys), intent(out) :: dragblj(:,:)! Drag profile from Beljaars SGO form drag > 0. [s-1] real(kind_phys), intent(out) :: taubljx(:) ! Eastward Beljaars surface stress [N m-2] real(kind_phys), intent(out) :: taubljy(:) ! Northward Beljaars surface stress [N m-2] - character(len=512), intent(out) :: errmsg ! Error message + character(len=*) , intent(out) :: errmsg ! Error message integer, intent(out) :: errflg ! Error flag errmsg = '' @@ -134,7 +134,7 @@ subroutine beljaars_zero_stub_run( & real(kind_phys), intent(out) :: dragblj(:,:)! Drag profile from Beljaars SGO form drag > 0. [s-1] real(kind_phys), intent(out) :: taubljx(:) ! Eastward Beljaars surface stress [N m-2] real(kind_phys), intent(out) :: taubljy(:) ! Northward Beljaars surface stress [N m-2] - character(len=512), intent(out) :: errmsg ! Error message + character(len=*) , intent(out) :: errmsg ! Error message integer, intent(out) :: errflg ! Error flag errmsg = '' @@ -176,7 +176,7 @@ subroutine tms_zero_stub_run( & real(kind_phys), intent(out) :: tautmsx(:) ! Eastward turbulent mountain surface stress [N m-2] real(kind_phys), intent(out) :: tautmsy(:) ! Northward turbulent mountain surface stress [N m-2] logical, intent(out) :: do_beljaars - character(len=512), intent(out) :: errmsg ! Error message + character(len=*) , intent(out) :: errmsg ! Error message integer, intent(out) :: errflg ! Error flag errmsg = '' @@ -212,7 +212,7 @@ subroutine turbulent_mountain_stress_add_drag_coefficient_run( & real(kind_phys), intent(inout) :: ksrf(:) ! total surface drag coefficient [kg m-2 s-1] ! Output arguments - character(len=512), intent(out) :: errmsg ! error message + character(len=*) , intent(out) :: errmsg ! error message integer, intent(out) :: errflg ! error flag errmsg = '' @@ -256,7 +256,7 @@ subroutine turbulent_mountain_stress_add_updated_surface_stress_run( & ! Output arguments real(kind_phys), intent(out) :: tautmsx(:) ! Implicit zonal turbulent mountain surface stress [N m-2] real(kind_phys), intent(out) :: tautmsy(:) ! Implicit meridional turbulent mountain surface stress [N m-2] - character(len=512), intent(out) :: errmsg ! error message + character(len=*) , intent(out) :: errmsg ! error message integer, intent(out) :: errflg ! error flag errmsg = '' @@ -297,7 +297,7 @@ subroutine vertical_diffusion_not_use_rairv_init( & ! Output arguments logical, intent(out) :: use_rairv ! Flag for constituent-dependent gas constant [flag] - character(len=512), intent(out) :: errmsg + character(len=*) , intent(out) :: errmsg integer, intent(out) :: errflg errmsg = '' @@ -342,7 +342,7 @@ subroutine dropmixnuc_apply_surface_fluxes_run( & real(kind_phys), intent(inout) :: q1(:, :, :) ! Constituent array after "vertical diffusion" [kg kg-1] ! Output arguments - character(len=512), intent(out) :: errmsg + character(len=*) , intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables diff --git a/schemes/vertical_diffusion/diffusion_stubs.meta b/schemes/vertical_diffusion/diffusion_stubs.meta index 109c1cc1e..c4010dfb6 100644 --- a/schemes/vertical_diffusion/diffusion_stubs.meta +++ b/schemes/vertical_diffusion/diffusion_stubs.meta @@ -33,7 +33,7 @@ standard_name = ccpp_error_message units = none dimensions = () - type = character | kind = len=512 + type = character | kind = len=* intent = out [ errflg ] standard_name = ccpp_error_code @@ -107,7 +107,7 @@ standard_name = ccpp_error_message units = none dimensions = () - type = character | kind = len=512 + type = character | kind = len=* intent = out [ errflg ] standard_name = ccpp_error_code @@ -164,7 +164,7 @@ standard_name = ccpp_error_message units = none dimensions = () - type = character | kind = len=512 + type = character | kind = len=* intent = out [ errflg ] standard_name = ccpp_error_code @@ -208,7 +208,7 @@ standard_name = ccpp_error_message units = none dimensions = () - type = character | kind = len=512 + type = character | kind = len=* intent = out [ errflg ] standard_name = ccpp_error_code @@ -305,7 +305,7 @@ [ errmsg ] standard_name = ccpp_error_message units = none - type = character | kind = len=512 + type = character | kind = len=* dimensions = () intent = out [ errflg ] @@ -331,7 +331,7 @@ [ errmsg ] standard_name = ccpp_error_message units = none - type = character | kind = len=512 + type = character | kind = len=* dimensions = () intent = out [ errflg ] @@ -407,7 +407,7 @@ [ errmsg ] standard_name = ccpp_error_message units = none - type = character | kind = len=512 + type = character | kind = len=* dimensions = () intent = out [ errflg ]