From 951ae998d5550a8b58552d6041eca38f376d71e0 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Fri, 10 Apr 2026 12:02:04 -0400 Subject: [PATCH 01/10] draft for removing rice - needs atmos_phys update --- src/physics/cam/cam_snapshot.F90 | 10 +------ src/physics/cam/convect_deep.F90 | 6 ++--- src/physics/cam/physpkg.F90 | 45 +++++++++++++++---------------- src/physics/cam/zm_conv_intr.F90 | 11 +++----- src/physics/cam7/cam_snapshot.F90 | 7 +---- src/physics/cam7/physpkg.F90 | 15 +++++------ 6 files changed, 34 insertions(+), 60 deletions(-) diff --git a/src/physics/cam/cam_snapshot.F90 b/src/physics/cam/cam_snapshot.F90 index 8c6367af21..37cf062a32 100644 --- a/src/physics/cam/cam_snapshot.F90 +++ b/src/physics/cam/cam_snapshot.F90 @@ -76,7 +76,7 @@ subroutine cam_snapshot_init(cam_in_arr, cam_out_arr, pbuf, index) end subroutine cam_snapshot_init subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_out, pbuf, flx_heat, cmfmc, cmfcme, & - zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) use time_manager, only: is_first_step, is_first_restart_step @@ -97,7 +97,6 @@ subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_ou real(r8), intent(in) :: cmfcme(:,:) ! cmf condensation - evaporation real(r8), intent(in) :: zdu(:,:) ! detraining mass flux from deep convection real(r8), intent(in) :: rliq(:) ! vertical integral of liquid not yet in q(ixcldliq) - real(r8), intent(in) :: rice(:) ! vertical integral of ice not yet in q(ixcldice) real(r8), intent(in) :: dlf(:,:) ! local copy of DLFZM (copy so need to output) real(r8), intent(in) :: dlf2(:,:) ! Detraining cld H20 from shallow convections real(r8), intent(in) :: rliq2(:) ! vertical integral of liquid from shallow scheme @@ -135,10 +134,6 @@ subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_ou call outfld('tphysbc_rliq', rliq, pcols, lchnk) call cam_history_snapshot_deactivate('tphysbc_rliq') - call cam_history_snapshot_activate('tphysbc_rice', file_num) - call outfld('tphysbc_rice', rice, pcols, lchnk) - call cam_history_snapshot_deactivate('tphysbc_rice') - call cam_history_snapshot_activate('tphysbc_dlf', file_num) call outfld('tphysbc_dlf', dlf, pcols, lchnk) call cam_history_snapshot_deactivate('tphysbc_dlf') @@ -250,9 +245,6 @@ subroutine cam_tphysbc_snapshot_init(cam_snapshot_before_num, cam_snapshot_after call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & 'rliq', 'tphysbc_rliq', 'unset', horiz_only) - call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & - 'rice', 'tphysbc_rice', 'unset', horiz_only) - call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & 'dlf', 'tphysbc_dlf', 'unset', 'lev') diff --git a/src/physics/cam/convect_deep.F90 b/src/physics/cam/convect_deep.F90 index 920200b8b4..166d5e5693 100644 --- a/src/physics/cam/convect_deep.F90 +++ b/src/physics/cam/convect_deep.F90 @@ -165,7 +165,7 @@ end subroutine convect_deep_init subroutine convect_deep_tend( & mcon ,cme , & zdu , & - rliq ,rice , & + rliq , & ztodt , & state ,ptend ,landfrac ,pbuf) @@ -194,7 +194,6 @@ subroutine convect_deep_tend( & real(r8), intent(out) :: zdu(pcols,pver) ! detraining mass flux real(r8), intent(out) :: rliq(pcols) ! reserved liquid (not yet in cldliq) for energy integrals - real(r8), intent(out) :: rice(pcols) ! reserved ice (not yet in cldice) for energy integrals real(r8), pointer :: prec(:) ! total precipitation real(r8), pointer :: snow(:) ! snow from ZM convection @@ -229,7 +228,6 @@ subroutine convect_deep_tend( & cme = 0 zdu = 0 rliq = 0 - rice = 0 call physics_ptend_init(ptend, state%psetcols, 'convect_deep') @@ -261,7 +259,7 @@ subroutine convect_deep_tend( & call zm_conv_tend( pblh ,mcon ,cme , & tpert ,zdu , & - rliq ,rice , & + rliq , & ztodt , & jctop, jcbot , & state ,ptend ,landfrac, pbuf) diff --git a/src/physics/cam/physpkg.F90 b/src/physics/cam/physpkg.F90 index 3b2ff302fe..a9a2379857 100644 --- a/src/physics/cam/physpkg.F90 +++ b/src/physics/cam/physpkg.F90 @@ -2289,7 +2289,6 @@ subroutine tphysbc (ztodt, state, & real(r8) :: zero(pcols) ! array of zeros real(r8) :: zero_sc(pcols*psubcols) ! array of zeros real(r8) :: rliq(pcols) ! vertical integral of liquid not yet in q(ixcldliq) - real(r8) :: rice(pcols) ! vertical integral of ice not yet in q(ixcldice) real(r8) :: rliq2(pcols) ! vertical integral of liquid from shallow scheme real(r8) :: det_s (pcols) ! vertical integral of detrained static energy from ice real(r8) :: det_ice(pcols) ! vertical integral of detrained ice @@ -2461,7 +2460,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "dadadj_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call dadadj_tend(ztodt, state, ptend) @@ -2474,7 +2473,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "dadadj_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call t_stopf('dry_adjustment') @@ -2488,13 +2487,13 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "convect_deep_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call convect_deep_tend( & cmfmc, cmfcme, & zdu, & - rliq, rice, & + rliq, & ztodt, & state, ptend, cam_in%landfrac, pbuf) @@ -2513,7 +2512,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "convect_deep_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call t_stopf('convect_deep_tend') @@ -2536,9 +2535,7 @@ subroutine tphysbc (ztodt, state, & ! Check energy integrals, including "reserved liquid" flx_cnd(:ncol) = prec_dp(:ncol) + rliq(:ncol) - snow_dp(:ncol) = snow_dp(:ncol) + rice(:ncol) call check_energy_cam_chng(state, tend, "convect_deep", nstep, ztodt, zero, flx_cnd, snow_dp, zero) - snow_dp(:ncol) = snow_dp(:ncol) - rice(:ncol) ! ! Call Hack (1994) convection scheme to deal with shallow/mid-level convection @@ -2554,7 +2551,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "convect_shallow_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call convect_shallow_tend (ztodt , cmfmc, & @@ -2578,7 +2575,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "convect_shallow_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if flx_cnd(:ncol) = prec_sh(:ncol) + rliq2(:ncol) @@ -2633,7 +2630,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "rk_stratiform_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call rk_stratiform_cam_tend(state, ptend, pbuf, ztodt, & @@ -2653,7 +2650,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "rk_stratiform_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call check_energy_cam_chng(state, tend, "cldwat_tend", nstep, ztodt, zero, prec_str, snow_str, zero) @@ -2694,7 +2691,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "macrop_driver_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call macrop_driver_tend( & @@ -2725,7 +2722,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "macrop_driver_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call check_energy_cam_chng(state, tend, "macrop_tend", nstep, ztodt, & @@ -2741,7 +2738,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "clubb_tend_cam") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call clubb_tend_cam(state, ptend, pbuf, cld_macmic_ztodt,& @@ -2771,7 +2768,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "clubb_tend_cam") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if ! Use actual qflux (not lhf/latvap) for consistency with surface fluxes and revised code @@ -2808,7 +2805,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "microp_section") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call carma_diags_obj%update(cam_in, state, pbuf) @@ -2823,7 +2820,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "microp_driver_tend_subcol") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state_sc, tend_sc, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call microp_driver_tend(state_sc, ptend_sc, cld_macmic_ztodt, pbuf) @@ -2875,7 +2872,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "microp_driver_tend_subcol") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state_sc, tend_sc, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call check_energy_cam_chng(state_sc, tend_sc, "microp_tend_subcol", & @@ -2912,7 +2909,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "microp_section") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call check_energy_cam_chng(state, tend, "microp_tend", nstep, ztodt, & @@ -2988,7 +2985,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "aero_model_wetdep") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call carma_diags_obj%update(cam_in, state, pbuf) @@ -3003,7 +3000,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "aero_model_wetdep") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if if (carma_do_wetdep) then @@ -3060,7 +3057,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "radiation_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call radiation_tend( & @@ -3079,7 +3076,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "radiation_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - flx_heat, cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, det_s, det_ice, net_flx) + flx_heat, cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, det_s, det_ice, net_flx) end if call check_energy_cam_chng(state, tend, "radheat", nstep, ztodt, zero, zero, zero, net_flx) diff --git a/src/physics/cam/zm_conv_intr.F90 b/src/physics/cam/zm_conv_intr.F90 index 75ac9714fe..4a7ee15f76 100644 --- a/src/physics/cam/zm_conv_intr.F90 +++ b/src/physics/cam/zm_conv_intr.F90 @@ -362,7 +362,7 @@ end subroutine zm_conv_init subroutine zm_conv_tend(pblh ,mcon ,cme , & tpert ,zdu , & - rliq ,rice ,ztodt , & + rliq ,ztodt , & jctop ,jcbot , & state ,ptend_all ,landfrac, pbuf) @@ -398,7 +398,6 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , & real(r8), intent(out) :: zdu(pcols,pver) ! detraining mass flux real(r8), intent(out) :: rliq(pcols) ! reserved liquid (not yet in cldliq) for energy integrals - real(r8), intent(out) :: rice(pcols) ! reserved ice (not yet in cldice) for energy integrals ! Local variables @@ -463,8 +462,6 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , & real(r8) :: cape(pcols) ! w convective available potential energy. real(r8) :: mu_out(pcols,pver) real(r8) :: md_out(pcols,pver) - real(r8) :: dif(pcols,pver) - ! used in momentum transport calculation real(r8) :: pguallu(pcols, pver) real(r8) :: pguallv(pcols, pver) @@ -539,7 +536,6 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , & !REMOVECAM - no longer need these when CAM is retired and pcols no longer exists ptend_loc%q(:,:,1) = 0._r8 ptend_loc%s(:,:) = 0._r8 - dif(:,:) = 0._r8 mcon(:,:) = 0._r8 dlf(:,:) = 0._r8 cme(:,:) = 0._r8 @@ -557,7 +553,6 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , & jcbot(:) = 0._r8 prec(:) = 0._r8 rliq(:) = 0._r8 - rice(:) = 0._r8 ideep(:) = 0._r8 !REMOVECAM_END @@ -572,11 +567,11 @@ subroutine zm_conv_tend(pblh ,mcon ,cme , & pblh(:ncol), state%zm(:ncol,:), state%phis(:ncol), state%zi(:ncol,:), ptend_loc%q(:ncol,:,1), & ptend_loc%s(:ncol,:), state%pmid(:ncol,:), state%pint(:ncol,:), state%pdel(:ncol,:), & ztodt, mcon(:ncol,:), cme(:ncol,:), cape(:ncol), & - tpert(:ncol), dlf(:ncol,:), dif(:ncol,:), zdu(:ncol,:), rprd(:ncol,:), & + tpert(:ncol), dlf(:ncol,:), zdu(:ncol,:), rprd(:ncol,:), & mu(:ncol,:), md(:ncol,:), du(:ncol,:), eu(:ncol,:), ed(:ncol,:), & dp(:ncol,:), dsubcld(:ncol), jt(:ncol), maxg(:ncol), ideep(:ncol), & ql(:ncol,:), rliq(:ncol), landfrac(:ncol), & - rice(:ncol), lengath, scheme_name, errmsg, errflg) + lengath, scheme_name, errmsg, errflg) if (errflg /= 0) then write(str,*) 'From zm_convr_run: at chunk ',lchnk, ' : ' diff --git a/src/physics/cam7/cam_snapshot.F90 b/src/physics/cam7/cam_snapshot.F90 index 679a1b2dd6..814fd20cd3 100644 --- a/src/physics/cam7/cam_snapshot.F90 +++ b/src/physics/cam7/cam_snapshot.F90 @@ -76,7 +76,7 @@ subroutine cam_snapshot_init(cam_in_arr, cam_out_arr, pbuf, index) end subroutine cam_snapshot_init subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_out, pbuf, cmfmc, cmfcme, & - zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + zdu, rliq, dlf, dlf2, rliq2, net_flx) use time_manager, only: is_first_step, is_first_restart_step @@ -96,7 +96,6 @@ subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_ou real(r8), intent(in) :: cmfcme(:,:) ! cmf condensation - evaporation real(r8), intent(in) :: zdu(:,:) ! detraining mass flux from deep convection real(r8), intent(in) :: rliq(:) ! vertical integral of liquid not yet in q(ixcldliq) - real(r8), intent(in) :: rice(:) ! vertical integral of ice not yet in q(ixcldice) real(r8), intent(in) :: dlf(:,:) ! local copy of DLFZM (copy so need to output) real(r8), intent(in) :: dlf2(:,:) ! Detraining cld H20 from shallow convections real(r8), intent(in) :: rliq2(:) ! vertical integral of liquid from shallow scheme @@ -116,7 +115,6 @@ subroutine cam_snapshot_all_outfld_tphysbc(file_num, state, tend, cam_in, cam_ou call outfld('tphysbc_cmfcme', cmfcme, pcols, lchnk) call outfld('tphysbc_zdu', zdu, pcols, lchnk) call outfld('tphysbc_rliq', rliq, pcols, lchnk) - call outfld('tphysbc_rice', rice, pcols, lchnk) call outfld('tphysbc_dlf', dlf, pcols, lchnk) call outfld('tphysbc_dlf2', dlf2, pcols, lchnk) call outfld('tphysbc_rliq2', rliq2, pcols, lchnk) @@ -208,9 +206,6 @@ subroutine cam_tphysbc_snapshot_init(cam_snapshot_before_num, cam_snapshot_after call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & 'rliq', 'tphysbc_rliq', 'unset', horiz_only) - call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & - 'rice', 'tphysbc_rice', 'unset', horiz_only) - call snapshot_addfld( ntphysbc_var, tphysbc_snapshot, cam_snapshot_before_num, cam_snapshot_after_num, & 'dlf', 'tphysbc_dlf', 'unset', 'lev') diff --git a/src/physics/cam7/physpkg.F90 b/src/physics/cam7/physpkg.F90 index f34bf20773..b82d85ba57 100644 --- a/src/physics/cam7/physpkg.F90 +++ b/src/physics/cam7/physpkg.F90 @@ -2753,7 +2753,6 @@ subroutine tphysbc (ztodt, state, & real(r8) :: zero(pcols) ! array of zeros real(r8) :: zero_sc(pcols*psubcols) ! array of zeros real(r8) :: rliq(pcols) ! vertical integral of liquid not yet in q(ixcldliq) - real(r8) :: rice(pcols) ! vertical integral of ice not yet in q(ixcldice) real(r8) :: rliq2(pcols) ! vertical integral of liquid from shallow scheme real(r8) :: flx_cnd(pcols) real(r8) :: flx_heat(pcols) @@ -2918,7 +2917,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "dadadj_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, net_flx) end if call dadadj_tend(ztodt, state, ptend) @@ -2931,7 +2930,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "dadadj_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, net_flx) end if call t_stopf('dry_adjustment') @@ -2945,13 +2944,13 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "convect_deep_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, net_flx) end if call convect_deep_tend( & cmfmc, cmfcme, & zdu, & - rliq, rice, & + rliq, & ztodt, & state, ptend, cam_in%landfrac, pbuf) @@ -2970,7 +2969,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_after) == "convect_deep_tend") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_after_num, state, tend, cam_in, cam_out, pbuf, & - cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, net_flx) end if call t_stopf('convect_deep_tend') @@ -2994,9 +2993,7 @@ subroutine tphysbc (ztodt, state, & ! Check energy integrals, including "reserved liquid" flx_cnd(:ncol) = prec_dp(:ncol) + rliq(:ncol) - snow_dp(:ncol) = snow_dp(:ncol) + rice(:ncol) call check_energy_cam_chng(state, tend, "convect_deep", nstep, ztodt, zero, flx_cnd, snow_dp, zero) - snow_dp(:ncol) = snow_dp(:ncol) - rice(:ncol) !=================================================== ! Compute convect diagnostics @@ -3011,7 +3008,7 @@ subroutine tphysbc (ztodt, state, & if (trim(cam_take_snapshot_before) == "convect_diagnostics_calc") then call cam_snapshot_all_outfld_tphysbc(cam_snapshot_before_num, state, tend, cam_in, cam_out, pbuf, & - cmfmc, cmfcme, zdu, rliq, rice, dlf, dlf2, rliq2, net_flx) + cmfmc, cmfcme, zdu, rliq, dlf, dlf2, rliq2, net_flx) end if call convect_diagnostics_calc (ztodt , cmfmc, & dlf , dlf2 , rliq , rliq2, & From 92ebb573ab6950a8b5840ae9ffa44eafe0b5e7cb Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Wed, 15 Apr 2026 12:56:05 -0400 Subject: [PATCH 02/10] Correct spelling of Tiedtke in zmconv_tiedtke_add --- bld/build-namelist | 2 +- bld/namelist_files/namelist_defaults_cam.xml | 2 +- bld/namelist_files/namelist_definition.xml | 2 +- src/physics/cam/zm_conv_intr.F90 | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index f6a87f4047..3a38cdd46c 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3776,7 +3776,7 @@ if (!$simple_phys) { add_default($nl, 'zmconv_ke_lnd'); add_default($nl, 'zmconv_num_cin'); add_default($nl, 'zmconv_dmpdz'); - add_default($nl, 'zmconv_tiedke_add'); + add_default($nl, 'zmconv_tiedtke_add'); add_default($nl, 'zmconv_capelmt'); add_default($nl, 'zmconv_tau'); add_default($nl, 'zmconv_parcel_hscale'); diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index b5c48835fb..6cf4bb363a 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2889,7 +2889,7 @@ 1 -1.0E-3 - 0.5 + 0.5 70.0 3600.0 diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 3aefcd0ddc..87f637097b 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -3206,7 +3206,7 @@ Tunable entrainment rate in ZM deep convection scheme in units of (m-1). Default: -1.0e-3 m-1 - Tunable parcel temperature perturbation in ZM deep convection scheme in units of (K). Default: 0.5K perturbation diff --git a/src/physics/cam/zm_conv_intr.F90 b/src/physics/cam/zm_conv_intr.F90 index 4a7ee15f76..2c9abe5b76 100644 --- a/src/physics/cam/zm_conv_intr.F90 +++ b/src/physics/cam/zm_conv_intr.F90 @@ -70,7 +70,7 @@ module zm_conv_intr integer :: zmconv_num_cin ! Number of negative buoyancy regions that are allowed ! before the convection top and CAPE calculations are completed. real(r8) :: zmconv_dmpdz = unset_r8 ! Parcel fractional mass entrainment rate - real(r8) :: zmconv_tiedke_add = unset_r8 ! Convective parcel temperature perturbation + real(r8) :: zmconv_tiedtke_add = unset_r8 ! Convective parcel temperature perturbation real(r8) :: zmconv_capelmt = unset_r8 ! Triggering thereshold for ZM convection logical :: zmconv_parcel_pbl = .false. ! switch for parcel pbl calculation real(r8) :: zmconv_parcel_hscale = unset_r8 ! Fraction of PBL depth over which to mix initial parcel @@ -161,7 +161,7 @@ subroutine zm_conv_readnl(nlfile) namelist /zmconv_nl/ zmconv_c0_lnd, zmconv_c0_ocn, zmconv_num_cin, & zmconv_ke, zmconv_ke_lnd, & zmconv_momcu, zmconv_momcd, & - zmconv_dmpdz, zmconv_tiedke_add, zmconv_capelmt, & + zmconv_dmpdz, zmconv_tiedtke_add, zmconv_capelmt, & zmconv_parcel_pbl, zmconv_parcel_hscale, zmconv_tau !----------------------------------------------------------------------------- @@ -195,8 +195,8 @@ subroutine zm_conv_readnl(nlfile) if (ierr /= 0) call endrun("zm_conv_readnl: FATAL: mpi_bcast: zmconv_momcd") call mpi_bcast(zmconv_dmpdz, 1, mpi_real8, masterprocid, mpicom, ierr) if (ierr /= 0) call endrun("zm_conv_readnl: FATAL: mpi_bcast: zmconv_dmpdz") - call mpi_bcast(zmconv_tiedke_add, 1, mpi_real8, masterprocid, mpicom, ierr) - if (ierr /= 0) call endrun("zm_conv_readnl: FATAL: mpi_bcast: zmconv_tiedke_add") + call mpi_bcast(zmconv_tiedtke_add, 1, mpi_real8, masterprocid, mpicom, ierr) + if (ierr /= 0) call endrun("zm_conv_readnl: FATAL: mpi_bcast: zmconv_tiedtke_add") call mpi_bcast(zmconv_capelmt, 1, mpi_real8, masterprocid, mpicom, ierr) if (ierr /= 0) call endrun("zm_conv_readnl: FATAL: mpi_bcast: zmconv_capelmt") call mpi_bcast(zmconv_parcel_pbl, 1, mpi_logical, masterprocid, mpicom, ierr) @@ -345,7 +345,7 @@ subroutine zm_conv_init(pref_edge) call zm_convr_init(plev, plevp, cpair, epsilo, gravit, latvap, tmelt, rair, & pref_edge,zmconv_c0_lnd, zmconv_c0_ocn, zmconv_ke, zmconv_ke_lnd, & zmconv_momcu, zmconv_momcd, zmconv_num_cin, & - no_deep_pbl, zmconv_tiedke_add, & + no_deep_pbl, zmconv_tiedtke_add, & zmconv_capelmt, zmconv_dmpdz,zmconv_parcel_pbl, zmconv_parcel_hscale, zmconv_tau, & masterproc, iulog, errmsg, errflg) From a68808b4f5dd74e0f3a24ea75b93a4e62a6b5f60 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Wed, 15 Apr 2026 12:58:50 -0400 Subject: [PATCH 03/10] update hemco_cesm to hemco-cesm2_3_0_hemco3_10_3 --- .gitmodules | 2 +- src/hemco | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 2c43f24fb1..a0218f6366 100644 --- a/.gitmodules +++ b/.gitmodules @@ -72,7 +72,7 @@ [submodule "hemco"] path = src/hemco url = https://github.com/ESCOMP/HEMCO_CESM.git - fxtag = hemco-cesm2_2_0_hemco3_10_3 + fxtag = hemco-cesm2_3_0_hemco3_10_3 fxrequired = AlwaysRequired fxDONOTUSEurl = https://github.com/ESCOMP/HEMCO_CESM.git diff --git a/src/hemco b/src/hemco index 52d7b1dd69..fce4bb79f1 160000 --- a/src/hemco +++ b/src/hemco @@ -1 +1 @@ -Subproject commit 52d7b1dd6915ab4aef82e2cbd37cc998fe65f5f5 +Subproject commit fce4bb79f1843890503baf2d71ce1cec61e1c720 From d071951dd59a41fe18fe6bb8b09f45b8f41bfaab Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Wed, 15 Apr 2026 12:59:53 -0400 Subject: [PATCH 04/10] Remove rice from physpkg --- src/physics/cam/physpkg.F90 | 1 - src/physics/cam7/physpkg.F90 | 1 - 2 files changed, 2 deletions(-) diff --git a/src/physics/cam/physpkg.F90 b/src/physics/cam/physpkg.F90 index a9a2379857..d8ce321f8d 100644 --- a/src/physics/cam/physpkg.F90 +++ b/src/physics/cam/physpkg.F90 @@ -2386,7 +2386,6 @@ subroutine tphysbc (ztodt, state, & cmfcme(:,:) = 0._r8 zdu(:,:) = 0._r8 rliq(:) = 0._r8 - rice(:) = 0._r8 dlf(:,:) = 0._r8 dlf2(:,:) = 0._r8 rliq2(:) = 0._r8 diff --git a/src/physics/cam7/physpkg.F90 b/src/physics/cam7/physpkg.F90 index b82d85ba57..2fcfb8304c 100644 --- a/src/physics/cam7/physpkg.F90 +++ b/src/physics/cam7/physpkg.F90 @@ -2845,7 +2845,6 @@ subroutine tphysbc (ztodt, state, & cmfcme(:,:) = 0._r8 zdu(:,:) = 0._r8 rliq(:) = 0._r8 - rice(:) = 0._r8 dlf(:,:) = 0._r8 dlf2(:,:) = 0._r8 rliq2(:) = 0._r8 From 90cd6758ef238876ddf064de2d88f8d0c28715a8 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Tue, 21 Apr 2026 15:35:08 -0400 Subject: [PATCH 05/10] Update ccpp_constituent_prop_mod.F90 stub --- src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 b/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 index acd98c8c2c..2390118cb1 100644 --- a/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 +++ b/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 @@ -284,7 +284,7 @@ end subroutine ccpp_const_props_init !+++++++++++++++++++++++++++++++++++++++++++++++++++++++ !CAM-equivalent stub so dynamic constituents register routines can build !+++++++++++++++++++++++++++++++++++++++++++++++++++++++ -subroutine instantiate(this, std_name, long_name, units, vertical_dim, & +subroutine instantiate(this, std_name, long_name, diag_name, units, vertical_dim, & advected, default_value, min_value, molar_mass, water_species, & mixing_ratio_type, errcode, errmsg) use ccpp_kinds, only: kind_phys @@ -293,6 +293,7 @@ subroutine instantiate(this, std_name, long_name, units, vertical_dim, & class(ccpp_constituent_properties_t), intent(inout) :: this character(len=*), intent(in) :: std_name character(len=*), intent(in) :: long_name + character(len=*), intent(in) :: diag_name character(len=*), intent(in) :: units character(len=*), intent(in) :: vertical_dim logical, optional, intent(in) :: advected From c89887ad9feb9da5bf851bb2bf5389cb05df7e9d Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Tue, 21 Apr 2026 21:26:08 -0400 Subject: [PATCH 06/10] Update ccpp_scheme_utils stub; allow numliq/numice/cldliq/cldice and chem species lookup --- .../cam_ccpp/ccpp_constituent_prop_mod.F90 | 86 ++++++++++++++++++- src/utils/cam_ccpp/ccpp_scheme_utils.F90 | 70 ++++++++++++++- 2 files changed, 148 insertions(+), 8 deletions(-) diff --git a/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 b/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 index 2390118cb1..9aa7e932bd 100644 --- a/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 +++ b/src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 @@ -9,6 +9,7 @@ module ccpp_constituent_prop_mod logical, private :: thermo_active = .false. logical, private :: water_species = .false. logical, private :: species_is_dry + logical, private :: species_is_wet character(len=256) :: std_name = '' contains @@ -20,6 +21,8 @@ module ccpp_constituent_prop_mod procedure :: set_water_species => ccp_set_water_species procedure :: is_dry => ccp_is_dry procedure :: set_dry => ccp_set_dry + procedure :: is_wet => ccp_is_wet + procedure :: set_wet => ccp_set_wet end type ccpp_constituent_prop_ptr_t @@ -228,6 +231,46 @@ subroutine ccp_set_dry(this, dry_flag, errcode, errmsg) end subroutine ccp_set_dry + subroutine ccp_is_wet(this, val_out, errcode, errmsg) + + ! Dummy arguments + class(ccpp_constituent_prop_ptr_t), intent(in) :: this + logical, intent(out) :: val_out + integer, optional, intent(out) :: errcode + character(len=*), optional, intent(out) :: errmsg + + val_out = this%species_is_wet + + if(present(errcode)) then + errcode = 0 + end if + if(present(errmsg)) then + errmsg = '' + end if + + end subroutine ccp_is_wet + + !------ + + subroutine ccp_set_wet(this, wet_flag, errcode, errmsg) + + ! Dummy arguments + class(ccpp_constituent_prop_ptr_t), intent(inout) :: this + logical, intent(in) :: wet_flag + integer, optional, intent(out) :: errcode + character(len=*), optional, intent(out) :: errmsg + + this%species_is_wet = wet_flag + + if(present(errcode)) then + errcode = 0 + end if + if(present(errmsg)) then + errmsg = '' + end if + + end subroutine ccp_set_wet + !+++++++++++++++++++++++++++++++++++++++++++++++++++++++ !CAM-equivalent CCPP constituents initialization routine !+++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -235,7 +278,7 @@ end subroutine ccp_set_dry subroutine ccpp_const_props_init(ix_qv) ! Use statements: - use constituents, only: pcnst, cnst_get_type_byind + use constituents, only: pcnst, cnst_name, cnst_get_ind, cnst_get_type_byind use cam_abortutils, only: handle_allocate_error use air_composition, only: dry_air_species_num use air_composition, only: thermodynamic_active_species_idx @@ -244,6 +287,7 @@ subroutine ccpp_const_props_init(ix_qv) ! Local variables: integer :: ierr integer :: m + integer :: ix_cldliq, ix_cldice, ix_numliq, ix_numice character(len=*), parameter :: subname = 'ccpp_const_prop_init:' @@ -267,17 +311,51 @@ subroutine ccpp_const_props_init(ix_qv) end if end do - ! Set "set_dry" property: + ! Set dry/wet properties: do m=1,pcnst if (cnst_get_type_byind(m).eq.'dry') then call ccpp_const_props(m)%set_dry(.true.) + call ccpp_const_props(m)%set_wet(.false.) else call ccpp_const_props(m)%set_dry(.false.) + call ccpp_const_props(m)%set_wet(.true.) end if end do - ! Set "std_name" property: - call ccpp_const_props(ix_qv)%set_standard_name('water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water') + ! Set "std_name" for all constituents using cnst_name as baseline. + ! This allows chemistry species (O3, NO, NO2, ...) to be looked up + ! via ccpp_constituent_index using their constituent name directly. + do m=1,pcnst + call ccpp_const_props(m)%set_standard_name(trim(cnst_name(m))) + end do + + ! Override with proper CCPP standard names for known species: + call ccpp_const_props(ix_qv)%set_standard_name( & + 'water_vapor_mixing_ratio_wrt_moist_air_and_condensed_water') + + call cnst_get_ind('CLDLIQ', ix_cldliq, abort=.false.) + if (ix_cldliq > 0) then + call ccpp_const_props(ix_cldliq)%set_standard_name( & + 'cloud_liquid_water_mixing_ratio_wrt_moist_air_and_condensed_water') + end if + + call cnst_get_ind('CLDICE', ix_cldice, abort=.false.) + if (ix_cldice > 0) then + call ccpp_const_props(ix_cldice)%set_standard_name( & + 'cloud_ice_mixing_ratio_wrt_moist_air_and_condensed_water') + end if + + call cnst_get_ind('NUMLIQ', ix_numliq, abort=.false.) + if (ix_numliq > 0) then + call ccpp_const_props(ix_numliq)%set_standard_name( & + 'mass_number_concentration_of_cloud_liquid_wrt_moist_air_and_condensed_water') + end if + + call cnst_get_ind('NUMICE', ix_numice, abort=.false.) + if (ix_numice > 0) then + call ccpp_const_props(ix_numice)%set_standard_name( & + 'mass_number_concentration_of_ice_wrt_moist_air_and_condensed_water') + end if end subroutine ccpp_const_props_init diff --git a/src/utils/cam_ccpp/ccpp_scheme_utils.F90 b/src/utils/cam_ccpp/ccpp_scheme_utils.F90 index df7c21841b..d4298756c6 100644 --- a/src/utils/cam_ccpp/ccpp_scheme_utils.F90 +++ b/src/utils/cam_ccpp/ccpp_scheme_utils.F90 @@ -1,6 +1,9 @@ module ccpp_scheme_utils - ! Module of utilities available to CCPP schemes; CAM stubs to enable CCPPized schemes to build + ! Module of utilities available to CCPP schemes. + ! CAM implementation using ccpp_const_props from ccpp_constituent_prop_mod. + + use ccpp_constituent_prop_mod, only: ccpp_const_props, int_unassigned implicit none private @@ -17,10 +20,39 @@ subroutine ccpp_constituent_index(standard_name, const_index, errcode, errmsg) integer, optional, intent(out) :: errcode character(len=*), optional, intent(out) :: errmsg - ! Local variable + ! Local variables character(len=*), parameter :: subname = 'ccpp_constituent_index' + character(len=256) :: t_const_name + integer :: idx, ierr + character(len=512) :: local_errmsg + + const_index = int_unassigned + + if (.not. allocated(ccpp_const_props)) then + if (present(errcode)) errcode = 1 + if (present(errmsg)) errmsg = subname//': constituent properties not initialized' + return + end if + + do idx = lbound(ccpp_const_props, 1), ubound(ccpp_const_props, 1) + call ccpp_const_props(idx)%standard_name(t_const_name, ierr, & + local_errmsg) + if (ierr /= 0) then + if (present(errcode)) errcode = ierr + if (present(errmsg)) errmsg = trim(local_errmsg) + return + end if + if (trim(t_const_name) == trim(standard_name)) then + const_index = idx + if (present(errcode)) errcode = 0 + if (present(errmsg)) errmsg = '' + return + end if + end do - ! STUB DOES NOTHING + if (present(errcode)) errcode = 1 + if (present(errmsg)) errmsg = trim(subname) // ': constituent "' // & + trim(standard_name) // '" not found' end subroutine ccpp_constituent_index @@ -33,9 +65,39 @@ subroutine ccpp_constituent_indices(standard_names, const_inds, errcode, errmsg) ! Local variables integer :: indx + integer :: local_errcode + character(len=512) :: local_errmsg character(len=*), parameter :: subname = 'ccpp_constituent_indices' - ! STUB DOES NOTHING + const_inds = int_unassigned + + if (.not. allocated(ccpp_const_props)) then + if (present(errcode)) errcode = 1 + if (present(errmsg)) errmsg = subname//': constituent properties not initialized' + return + end if + + if (size(const_inds) < size(standard_names)) then + if (present(errcode)) errcode = 1 + if (present(errmsg)) then + write(errmsg, '(3a)') subname, ': const_inds array too small. ', & + 'Must be >= size of standard_names' + end if + return + end if + + do indx = 1, size(standard_names) + call ccpp_constituent_index(standard_names(indx), & + const_inds(indx), local_errcode, local_errmsg) + if (local_errcode /= 0) then + if (present(errcode)) errcode = local_errcode + if (present(errmsg)) errmsg = trim(local_errmsg) + return + end if + end do + + if (present(errcode)) errcode = 0 + if (present(errmsg)) errmsg = '' end subroutine ccpp_constituent_indices From 4d4034931d3b16ab87f83ac1826fc6ade0c3ce13 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Wed, 22 Apr 2026 12:51:35 -0400 Subject: [PATCH 07/10] GPU ERS restart fix (closes #1540) Co-authored-by: Jian Sun --- src/physics/cam/clubb_intr.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90 index 5a9a1e34fb..cbebae4323 100644 --- a/src/physics/cam/clubb_intr.F90 +++ b/src/physics/cam/clubb_intr.F90 @@ -2809,6 +2809,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & !$acc copyout( clubb_s, clubbtop_pbuf, & !$acc qclvar, wprcp, rcm_in_layer, rcm, cloud_frac, thlm, rtm, & !$acc um, vm, wm_zt, exner, zt_g, zi_g, invrs_cpairv, & + !$acc rho_zm, rho_zt, & !$acc pdf_params_chnk(lchnk)%rt_1, pdf_params_chnk(lchnk)%rt_2, & !$acc pdf_params_chnk(lchnk)%varnce_rt_1, pdf_params_chnk(lchnk)%varnce_rt_2, & !$acc pdf_params_chnk(lchnk)%mixt_frac ) & @@ -2824,7 +2825,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & !$acc vm_forcing, wprtp_forcing, wpthlp_forcing, rtp2_forcing, thlp2_forcing, & !$acc rtpthlp_forcing, wm_zm, wpthlp_sfc, wprtp_sfc, upwp_sfc, vpwp_sfc, invrs_dz_g, & !$acc p_sfc, upwp_sfc_pert, vpwp_sfc_pert, rtm_ref, thlm_ref, um_ref, vm_ref, & - !$acc ug, vg, p_in_Pa, rho_zm, rho_zt, rho_ds_zm, rho_ds_zt, invrs_rho_ds_zm, & + !$acc ug, vg, p_in_Pa, rho_ds_zm, rho_ds_zt, invrs_rho_ds_zm, & !$acc invrs_rho_ds_zt, thv_ds_zm, thv_ds_zt, rfrzm, clubb_params, deltaz, err_info%err_code, & !$acc pdf_params_chnk(lchnk)%w_1, pdf_params_chnk(lchnk)%w_2, & !$acc pdf_params_chnk(lchnk)%varnce_w_1, pdf_params_chnk(lchnk)%varnce_w_2, & From 64d48543f5cb19a47d0c892216b0ddb6d2e8f777 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Wed, 22 Apr 2026 23:02:33 -0400 Subject: [PATCH 08/10] Update atmos_phys to atmos_phys0_21_002 --- .gitmodules | 2 +- src/atmos_phys | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index afcffd757b..43ca2f80db 100644 --- a/.gitmodules +++ b/.gitmodules @@ -29,7 +29,7 @@ [submodule "atmos_phys"] path = src/atmos_phys url = https://github.com/ESCOMP/atmospheric_physics - fxtag = atmos_phys0_21_000 + fxtag = atmos_phys0_21_002 fxrequired = AlwaysRequired fxDONOTUSEurl = https://github.com/ESCOMP/atmospheric_physics diff --git a/src/atmos_phys b/src/atmos_phys index b3abf21d92..8279090056 160000 --- a/src/atmos_phys +++ b/src/atmos_phys @@ -1 +1 @@ -Subproject commit b3abf21d92b101a899dec719c436e0cc046f1251 +Subproject commit 827909005618d2e7806d0c910b8125f4ddaa0029 From 0d12ef60b2069e34ed682fa8a084e614cfd9e27b Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Fri, 24 Apr 2026 07:52:26 -0600 Subject: [PATCH 09/10] Update SILHS testmods for CLUBB Co-authored-by: Cheryl Craig --- .../testmods_dirs/cam/outfrq9s_mg3/user_nl_cam | 12 ++++++------ .../testdefs/testmods_dirs/cam/silhs/user_nl_cam | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_mg3/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_mg3/user_nl_cam index a8572b28a8..26c82d7734 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_mg3/user_nl_cam +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_mg3/user_nl_cam @@ -32,15 +32,15 @@ fincl1 = 'Q', 'RHW', 'QRS', 'QRL', 'HR', 'FDL', 'vp2_bt', 'vp2_ma', 'vp2_ta', 'vp2_tp', 'vp2_dp1', 'vp2_dp2', 'vp2_pr1', 'vp2_pr2', 'vp2_cl', 'vp2_pd', 'vp2_sf', 'up2_bt', 'up2_ma', 'up2_ta', 'up2_tp', 'up2_dp1', 'up2_dp2', 'up2_pr1', 'up2_pr2', 'up2_cl', 'up2_pd', 'up2_sf', 'wprtp_bt', 'wprtp_ma', 'wprtp_ta', 'wprtp_tp', 'wprtp_ac', 'wprtp_bp', 'wprtp_pr1', -'wprtp_pr2', 'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', 'wprtp_sicl', 'wprtp_pd', 'wprtp_forcing', +'wprtp_pr2', 'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', -'wpthlp_pr2', 'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_sicl', 'wpthlp_forcing', +'wpthlp_pr2', 'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', 'rtp2_dp2', 'rtp2_cl', 'rtp2_pd', 'rtp2_sf', 'rtp2_forcing', 'rtp2_mc', 'thlp2_bt', 'thlp2_ma', 'thlp2_ta', 'thlp2_tp', 'thlp2_dp1', 'thlp2_dp2', 'thlp2_cl', 'thlp2_pd', 'thlp2_sf', 'thlp2_forcing', 'thlp2_mc', 'rtpthlp_bt', 'rtpthlp_ma', 'rtpthlp_ta', 'rtpthlp_tp1', 'rtpthlp_tp2', 'rtpthlp_dp1', 'rtpthlp_dp2', 'rtpthlp_cl', 'rtpthlp_sf', 'rtpthlp_forcing', 'rtpthlp_mc', 'wpthlp_enter_mfl', 'wpthlp_exit_mfl', 'wprtp_enter_mfl', 'wprtp_exit_mfl', -'wpthlp_mfl_min', 'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max', 'shear_sqd' +'wpthlp_mfl_min', 'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max' clubb_vars_zt ='thlm', 'thvm', 'rtm', 'rcm', 'rvm', 'um', 'vm', 'um_ref','vm_ref','ug', 'vg', 'cloud_frac', 'cloud_cover', 'rcm_in_layer', 'rcm_in_cloud', 'p_in_Pa', 'exner', 'rho_ds_zt', 'thv_ds_zt', 'Lscale', @@ -71,13 +71,13 @@ clubb_vars_zm= 'wp2', 'rtp2', 'thlp2', 'rtpthlp', 'wprtp', 'wpthlp', 'wp4', 'up2 'wp2_ac', 'wp2_bp', 'wp2_pr1', 'wp2_pr2', 'wp2_pr3', 'wp2_dp1', 'wp2_dp2', 'wp2_cl', 'wp2_pd', 'wp2_sf', 'vp2_bt', 'vp2_ma', 'vp2_ta', 'vp2_tp', 'vp2_dp1', 'vp2_dp2', 'vp2_pr1', 'vp2_pr2', 'vp2_cl', 'vp2_pd', 'vp2_sf', 'up2_bt', 'up2_ma', 'up2_ta', 'up2_tp', 'up2_dp1', 'up2_dp2', 'up2_pr1', 'up2_pr2', 'up2_cl', 'up2_pd', 'up2_sf', 'wprtp_bt', 'wprtp_ma', 'wprtp_ta', 'wprtp_tp', 'wprtp_ac', 'wprtp_bp', 'wprtp_pr1', 'wprtp_pr2', -'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', 'wprtp_sicl', 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', +'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', 'wpthlp_pr2', -'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_sicl', 'wpthlp_forcing', 'wpthlp_mc', +'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', 'rtp2_dp2', 'rtp2_cl', 'rtp2_pd', 'rtp2_sf', 'rtp2_forcing', 'rtp2_mc', 'thlp2_bt', 'thlp2_ma', 'thlp2_ta', 'thlp2_tp', 'thlp2_dp1', 'thlp2_dp2', 'thlp2_cl', 'thlp2_pd', 'thlp2_sf', 'thlp2_forcing', 'thlp2_mc', 'rtpthlp_bt', 'rtpthlp_ma', 'rtpthlp_ta', 'rtpthlp_tp1', 'rtpthlp_tp2', 'rtpthlp_dp1', 'rtpthlp_dp2', 'rtpthlp_cl', 'rtpthlp_sf', 'rtpthlp_forcing', 'rtpthlp_mc', 'wpthlp_enter_mfl', 'wpthlp_exit_mfl', 'wprtp_enter_mfl', 'wprtp_exit_mfl', 'wpthlp_mfl_min', -'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max', 'shear_sqd' +'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max' diff --git a/cime_config/testdefs/testmods_dirs/cam/silhs/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/silhs/user_nl_cam index 9ad54d9904..013d03a86d 100644 --- a/cime_config/testdefs/testmods_dirs/cam/silhs/user_nl_cam +++ b/cime_config/testdefs/testmods_dirs/cam/silhs/user_nl_cam @@ -41,12 +41,12 @@ fincl1 = 'U:A','PS:A','T:A','V:A','OMEGA:A','Z3:A','PRECT:A', 'wp2_bp', 'wp2_pr1', 'wp2_pr2', 'wp2_pr3', 'wp2_dp1', 'wp2_dp2', 'wp2_cl', 'wp2_pd', 'wp2_sf', 'vp2_bt', 'vp2_ma', 'vp2_ta', 'vp2_tp', 'vp2_dp1', 'vp2_dp2', 'vp2_pr1', 'vp2_pr2', 'vp2_cl', 'vp2_pd', 'vp2_sf', 'up2_bt', 'up2_ma', 'up2_ta', 'up2_tp', 'up2_dp1', 'up2_dp2', 'up2_pr1', 'up2_pr2', 'up2_cl', 'up2_pd', 'up2_sf', 'wprtp_bt', 'wprtp_ma', 'wprtp_ta', 'wprtp_tp', 'wprtp_ac', 'wprtp_bp', 'wprtp_pr1', 'wprtp_pr2', 'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', -'wprtp_sicl', 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', 'wpthlp_pr2', -'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_sicl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', + 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', 'wpthlp_pr2', +'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', 'rtp2_dp2', 'rtp2_cl', 'rtp2_pd', 'rtp2_sf', 'rtp2_forcing', 'rtp2_mc', 'thlp2_bt', 'thlp2_ma', 'thlp2_ta', 'thlp2_tp', 'thlp2_dp1', 'thlp2_dp2', 'thlp2_cl', 'thlp2_pd', 'thlp2_sf', 'thlp2_forcing', 'thlp2_mc', 'rtpthlp_bt', 'rtpthlp_ma', 'rtpthlp_ta', 'rtpthlp_tp1', 'rtpthlp_tp2', 'rtpthlp_dp1', 'rtpthlp_dp2', 'rtpthlp_cl', 'rtpthlp_sf', 'rtpthlp_forcing', 'rtpthlp_mc', 'wpthlp_enter_mfl', 'wpthlp_exit_mfl', 'wprtp_enter_mfl', 'wprtp_exit_mfl', 'wpthlp_mfl_min', -'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max', 'shear_sqd' +'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max' fincl2 = 'CLDTOT', 'CLDST','CDNUMC','CLDLIQ','CLDICE','FLUT', 'LWCF','SWCF','PRECT' clubb_history = .true. @@ -72,9 +72,9 @@ clubb_vars_zm= 'wp2', 'rtp2', 'thlp2', 'rtpthlp', 'wprtp', 'wpthlp', 'wp4', 'up2 'wp2_bp', 'wp2_pr1', 'wp2_pr2', 'wp2_pr3', 'wp2_dp1', 'wp2_dp2', 'wp2_cl', 'wp2_pd', 'wp2_sf', 'vp2_bt', 'vp2_ma', 'vp2_ta', 'vp2_tp', 'vp2_dp1', 'vp2_dp2', 'vp2_pr1', 'vp2_pr2', 'vp2_cl', 'vp2_pd', 'vp2_sf', 'up2_bt', 'up2_ma', 'up2_ta', 'up2_tp', 'up2_dp1', 'up2_dp2', 'up2_pr1', 'up2_pr2', 'up2_cl', 'up2_pd', 'up2_sf', 'wprtp_bt', 'wprtp_ma', 'wprtp_ta', 'wprtp_tp', 'wprtp_ac', 'wprtp_bp', 'wprtp_pr1', 'wprtp_pr2', 'wprtp_pr3', 'wprtp_dp1', 'wprtp_mfl', 'wprtp_cl', -'wprtp_sicl', 'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', 'wpthlp_pr2', -'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_sicl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', +'wprtp_pd', 'wprtp_forcing', 'wprtp_mc', 'wpthlp_bt', 'wpthlp_ma', 'wpthlp_ta', 'wpthlp_tp', 'wpthlp_ac', 'wpthlp_bp', 'wpthlp_pr1', 'wpthlp_pr2', +'wpthlp_pr3', 'wpthlp_dp1', 'wpthlp_mfl', 'wpthlp_cl', 'wpthlp_forcing', 'wpthlp_mc', 'rtp2_bt', 'rtp2_ma', 'rtp2_ta', 'rtp2_tp', 'rtp2_dp1', 'rtp2_dp2', 'rtp2_cl', 'rtp2_pd', 'rtp2_sf', 'rtp2_forcing', 'rtp2_mc', 'thlp2_bt', 'thlp2_ma', 'thlp2_ta', 'thlp2_tp', 'thlp2_dp1', 'thlp2_dp2', 'thlp2_cl', 'thlp2_pd', 'thlp2_sf', 'thlp2_forcing', 'thlp2_mc', 'rtpthlp_bt', 'rtpthlp_ma', 'rtpthlp_ta', 'rtpthlp_tp1', 'rtpthlp_tp2', 'rtpthlp_dp1', 'rtpthlp_dp2', 'rtpthlp_cl', 'rtpthlp_sf', 'rtpthlp_forcing', 'rtpthlp_mc', 'wpthlp_enter_mfl', 'wpthlp_exit_mfl', 'wprtp_enter_mfl', 'wprtp_exit_mfl', 'wpthlp_mfl_min', -'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max', 'shear_sqd' +'wpthlp_mfl_max', 'wprtp_mfl_min', 'wprtp_mfl_max' From c969f7aaa60a4713209db6f3c427b860adfcf019 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Fri, 24 Apr 2026 13:05:46 -0400 Subject: [PATCH 10/10] Finalize ChangeLog for cam6_4_168. --- doc/ChangeLog | 193 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8c95de1e3c..29df8fff67 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,198 @@ =============================================================== +Tag name: cam6_4_168 +Originator(s): jimmielin, cacraig, sjsprecious +Date: April 24, 2026 +One-line Summary: Misc tag: ZM reserved ice cleanup; zmconv_tiedtke_add typo; HEMCO_CESM external update; ccpp_scheme_utils stub update +Github PR URL: https://github.com/ESCOMP/CAM/pull/1536 + +Purpose of changes (include the issue number and title text for each relevant GitHub issue): +- Closes #1472 (remove reserved ice from ZM) +- Closes ESCOMP/atmospheric_physics#376 (zmconv_tiedtke_add was misspelled) +- Closes #1533 (update HEMCO_CESM external) +- Closes #1541 (ccpp_scheme_utils update) +- Closes #1540 (Failing GPU ERS test) +- Fixes failing SILHS test in CLUBB + +Describe any changes made to build system: N/A + +Describe any changes made to the namelist: +- Fixed spelling of zmconv_tiedtke_add + +List any changes to the defaults for the boundary datasets: N/A + +Describe any substantial timing or memory changes: N/A + +Code reviewed by: nusbaume, cacraig (atmos_phys) + +List all files eliminated: N/A + +List all files added and what they do: N/A + +List all existing files that have been modified, and describe the changes: +M .gitmodules +M src/atmos_phys + - update to atmos_phys0_21_002 + +M src/hemco + - update to hemco-cesm2_3_0_hemco3_10_3 + +M bld/build-namelist +M bld/namelist_files/namelist_defaults_cam.xml +M bld/namelist_files/namelist_definition.xml +M src/physics/cam/zm_conv_intr.F90 + - fix spelling of zmconv_tiedtke_add + +M cime_config/testdefs/testmods_dirs/cam/outfrq9s_mg3/user_nl_cam +M cime_config/testdefs/testmods_dirs/cam/silhs/user_nl_cam + - fix failing SILHS test in CLUBB + +M src/physics/cam/clubb_intr.F90 + - fix restart comparison test for nvhpc in CLUBB + +M src/physics/cam/cam_snapshot.F90 +M src/physics/cam/convect_deep.F90 +M src/physics/cam/physpkg.F90 +M src/physics/cam/zm_conv_intr.F90 +M src/physics/cam7/cam_snapshot.F90 +M src/physics/cam7/physpkg.F90 + - remove rice, dif from ZM (unused) + +M src/utils/cam_ccpp/ccpp_constituent_prop_mod.F90 + - add is_wet to shim support + - add cldliq, cldice, numliq, numice to shim standard names + +M src/utils/cam_ccpp/ccpp_scheme_utils.F90 + - implement ccpp_constituent_index shim + +If there were any failures reported from running test_driver.sh on any test +platform, and checkin with these failures has been OK'd by the gatekeeper, +then copy the lines from the td.*.status files for the failed tests to the +appropriate machine below. All failed tests must be justified. + +derecho/intel/aux_cam: + ERC_D_Ln9.f09_f09_mt232.FHIST_BDRD.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERC_D_Ln9.f19_f19_mg17.QPMOZ.derecho_intel.cam-outfrq3s (Overall: NLFAIL) details: + ERC_D_Ln9.f19_f19_mt232.QPC6.derecho_intel.cam-outfrq3s_cosp (Overall: NLFAIL) details: + ERC_D_Ln9.mpasa120_mpasa120.F2000climo.derecho_intel.cam-outfrq9s_mpasa120 (Overall: NLFAIL) details: + ERC_D_Ln9.mpasa120_mpasa120.FHISTC_LTso.derecho_intel.cam-outfrq9s_mpasa120 (Overall: NLFAIL) details: + ERC_D_Ln9.mpasa120_mpasa120.QPC7.derecho_intel.cam-outfrq9s_mpasa120 (Overall: NLFAIL) details: + ERC_D_Ln9.ne30pg2_ne30pg2_mt232.QPC7.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERC_D_Ln9.ne30pg3_ne30pg3_mt232.F1850C_LTso.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERC_Ln9.C96_C96_mt232.F2000climo.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERI_D_Ln18.f09_f09_mt232.FHIST.derecho_intel.cam-outfrq3s_eri (Overall: NLFAIL) details: + ERI_D_Ln18.f19_f19_mt232.FHIST_C5.derecho_intel.cam-outfrq3s_eri (Overall: NLFAIL) details: + ERI_D_Ln18.ne16pg3_ne16pg3_mt232.FHIST_C4.derecho_intel.cam-outfrq3s_eri (Overall: NLFAIL) details: + ERI_D_Ln18.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_intel.cam-outfrq3s_eri (Overall: NLFAIL) details: + ERP_D_Ln9.ne30pg3_ne30pg3_mt232.F1850C_MTso.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_D_Ln9_P64x2.f09_f09_mg17.QSC6.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ld3.ne16pg3_ne16pg3_mg17.FHISTC_WAt1ma.derecho_intel.cam-reduced_hist1d (Overall: NLFAIL) details: + ERP_Ld3.ne30pg3_ne30pg3_mt232.FHISTC_MTt4s.derecho_intel.cam-outfrq1d_aoa (Overall: NLFAIL) details: + ERP_Lh12.f19_f19_mg17.FW4madSD.derecho_intel.cam-outfrq3h (Overall: NLFAIL) details: + ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9.f19_f19_mg17.FWsc1850.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9.ne30pg3_ne30pg3_mg17.FCnudged.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9.ne30pg3_ne30pg3_mg17.FHISTC_WAma.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERR_Ln9.ne16pg3_ne16pg3_mt232.FHISTC_LTso.derecho_intel.cam-outfrq9s_bwic (Overall: NLFAIL) details: + ERS_Ln9.f09_f09_mg17.FX2000.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERS_Ln9.f19_f19_mg17.FXSD.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERS_Ln9.ne30pg3_ne30pg3_mg17.FHISTC_WXma.derecho_intel.cam-outfrq9s_ctem (Overall: NLFAIL) details: + SCT_D_Ln7.ne3_ne3_mg37.QPC5.derecho_intel.cam-scm_prep (Overall: NLFAIL) details: + SMS_C2_D_Ln9.ne16pg3_ne16pg3_mg17.FHISTC_WXma.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ld5.f09_f09_mt232.PC6.derecho_intel.cam-cam6_port_f09 (Overall: NLFAIL) details: + SMS_D_Ld5.f19_f19_mt232.PC4.derecho_intel.cam-cam4_port5d (Overall: NLFAIL) details: + SMS_D_Ln9.f09_f09_mg17.FCts2nudged.derecho_intel.cam-outfrq9s_leapday (Overall: NLFAIL) details: + SMS_D_Ln9.f09_f09_mg17.FCvbsxHIST.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.f09_f09_mg17.FSD.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mg17.FCARMA2000climo.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mg17.FCHIST_SLH.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mg17.FWma2000climo.derecho_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mt232.FHIST_C5.derecho_intel.cam-mam7 (Overall: NLFAIL) details: + SMS_D_Ln9.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s_amie (Overall: NLFAIL) details: + SMS_D_Ln9.ne30pg3_ne30pg3_mt232.1850C_CAM70%MT%CT4S2_CLM60%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_MTso.derecho_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mt232.FHISTC_MTt1s.derecho_intel.cam-outfrq9s_Leung_dust (Overall: NLFAIL) details: + SMS_Ld1.f09_f09_mg17.FCHIST_GC.derecho_intel.cam-outfrq1d (Overall: NLFAIL) details: + SMS_Ld1.f09_f09_mg17.FW2000climo.derecho_intel.cam-outfrq1d (Overall: NLFAIL) details: + SMS_Ld1.ne30pg3_ne30pg3_mg17.FC2010climo.derecho_intel.cam-outfrq1d (Overall: NLFAIL) details: + SMS_Lh12.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq3h (Overall: NLFAIL) details: + SMS_Ln9.f09_f09_mg17.F2010climo.derecho_intel.cam-nudging (Overall: NLFAIL) details: + SMS_Ln9.f09_f09_mg17.FW1850.derecho_intel.cam-reduced_hist3s (Overall: NLFAIL) details: + SMS_Ln9.f19_f19_mt232.F2000climo.derecho_intel.cam-silhs (Overall: FAIL) details: + SMS_Ln9.ne30pg3_ne30pg3_mg17.FW2000climo.derecho_intel.cam-outfrq9s_rrtmgp (Overall: NLFAIL) details: + - Differences in namelist 'zmconv_nl': + missing variable: 'zmconv_tiedke_add' + found extra variable: 'zmconv_tiedtke_add' + - NLFAIL due to fixed spelling + +derecho/nvhpc/aux_cam: + ERS_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_nvhpc.cam-outfrq9s_gpu_default (Overall: DIFF) details: + FAIL ERS_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_nvhpc.cam-outfrq9s_gpu_default NLCOMP + FAIL ERS_Ln9.ne30pg3_ne30pg3_mt232.FHISTC_LTso.derecho_nvhpc.cam-outfrq9s_gpu_default BASELINE /glade/campaign/cesm/community/amwg/cam_baselines/cam6_4_167_nvhpc: DIFF + - restart issue fixed; baseline difference compared to last tag is expected + +izumi/nag/aux_cam: + ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + ERC_D_Ln9.f10_f10_mt232.FHIST.izumi_nag.cam-outfrq3s_cospsathist (Overall: NLFAIL) details: + ERC_D_Ln9.mpasa480_mpasa480_mt232.QPC7.izumi_nag.cam-outfrq9s_mpasa480 (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_nag.cam-cosp_rad_diags (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_nag.cam-outfrq9s_nochem (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.QPC4.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ld2.f45_f45_mg37.PC5.izumi_nag.cam-outfrq24h_port (Overall: NLFAIL) details: + SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem (Overall: NLFAIL) details: + SMS_D_Ln9.f10_f10_mt232.F1850.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details: + TMC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-mc_ttrac (Overall: NLFAIL) details: + - Differences in namelist 'zmconv_nl': + missing variable: 'zmconv_tiedke_add' + found extra variable: 'zmconv_tiedtke_add' + - NLFAIL due to fixed spelling + + ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-outfrq3s_subcol (Overall: FAIL) details: + FAIL ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-outfrq3s_subcol NLCOMP + FAIL ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-outfrq3s_subcol COMPARE_base_rest + - pre-existing failure -- see https://github.com/ESCOMP/CAM/issues/1514 + +izumi/gnu/aux_cam: + ERC_D_Ln9.C48_C48_mg17.QPC6.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + ERC_D_Ln9.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags (Overall: NLFAIL) details: + ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-rad_diag (Overall: NLFAIL) details: + ERC_D_Ln9.f19_f19_mt232.FHIST.izumi_gnu.cam-lonlat_fv_diags (Overall: NLFAIL) details: + ERC_D_Ln9.mpasa480_mpasa480_mt232.FHISTC_LTso.izumi_gnu.cam-outfrq9s_mpasa480 (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.F1850_C4.izumi_gnu.cam-co2rmp (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHIST_C5.izumi_gnu.cam-carma_cosp_rad_diag_mam (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHISTC_LTso.izumi_gnu.cam-sat_lcltod (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.FHIST.izumi_gnu.cam-nochem_clubbmf (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.QPC5.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + ERC_D_Ln9.ne3pg3_ne3pg3_mt232.QPC7.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + ERC_D_Ln9.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26 (Overall: NLFAIL) details: + ERS_Ln9_P24x1.mpasa480_mpasa480.F2000climo.izumi_gnu.cam-outfrq9s_mpasa480 (Overall: NLFAIL) details: + PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal0 (Overall: NLFAIL) details: + PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal1 (Overall: NLFAIL) details: + PLB_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_gnu.cam-ttrac_loadbal3 (Overall: NLFAIL) details: + SCT_D_Ln7.ne3_ne3_mg37.QPC6.izumi_gnu.cam-scm_prep_c6 (Overall: NLFAIL) details: + SMS_D_Ln3.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc (Overall: NLFAIL) details: + SMS_D_Ln3.ne3pg3_ne3pg3_mt232.PC7.izumi_gnu.cam-pc7_ne3pg3 (Overall: NLFAIL) details: + SMS_D_Ln9.f10_f10_mg37.FWmaHIST.izumi_gnu.cam-outfrq9s_mee_fluxes (Overall: NLFAIL) details: + SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee (Overall: NLFAIL) details: + SMS_D_Ln9.f19_f19_mt232.FW4madSD.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + SUB_D_Ln9.ne3pg3_ne3pg3_mt232.FHIST.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + - Differences in namelist 'zmconv_nl': + missing variable: 'zmconv_tiedke_add' + found extra variable: 'zmconv_tiedtke_add' + - NLFAIL due to fixed spelling + +CAM tag used for the baseline comparison tests if different than previous +tag: + +Summarize any changes to answers: All B4B - NLFAIL due to namelist rename. + +=============================================================== + + Tag name: cam6_4_167 Originator(s): fvitt Date: 23 Apr 2026