From 24f17a74c1254342abc24db7fd33296267706dd6 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Sat, 22 Nov 2025 19:22:33 +0000 Subject: [PATCH 01/11] From Qingfu-Liu: RRTMGP related changes to enable it working with nesting (moving-nesting) configurations, while reading in lw/sw_file_gas/clouds files. --- physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 | 6 ++++-- physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 | 8 +++++--- physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 | 6 ++++-- physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 | 6 ++++-- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 index 02757d9045..a56100ada2 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 @@ -50,7 +50,7 @@ module rrtmgp_lw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -63,7 +63,8 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -79,6 +80,7 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 index 38bb59d8de..31f94b0504 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 @@ -74,7 +74,7 @@ module rrtmgp_lw_gas_optics !> subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -86,8 +86,9 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank - + mpiroot1 !< Master MPI rank + integer :: mpiroot + ! Outputs character(len=*), intent(out) :: & errmsg !< CCPP error message @@ -104,6 +105,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml lw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_gas) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 index 67c5564f31..58fc7d430d 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 @@ -47,7 +47,7 @@ module rrtmgp_sw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -59,7 +59,8 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -75,6 +76,7 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml sw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 index 0decbc6e3c..1403c4732b 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 @@ -85,7 +85,7 @@ module rrtmgp_sw_gas_optics !! the full k-distribution data is read in, reduced by the "active gases" provided, and !! loaded into the RRTMGP DDT, ty_gas_optics_rrtmgp. subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -97,7 +97,8 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -115,6 +116,7 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the gfphysics_nml sw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_gas) From 462bf71806df1b7bd9dafe8022adbba6923f8017 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 11 Dec 2025 00:51:12 +0000 Subject: [PATCH 02/11] From @WeiguoWang-NOAA: Introduce two Thompson MP related namelist options of tc_rain and tc_snow for adjustments of max terminal fall speeds of rain and snow under TC conditions. --- physics/MP/Thompson/module_mp_thompson.F90 | 36 +++++++++++++++++++--- physics/MP/Thompson/mp_thompson.F90 | 13 ++++++-- physics/MP/Thompson/mp_thompson.meta | 16 ++++++++++ 3 files changed, 57 insertions(+), 8 deletions(-) diff --git a/physics/MP/Thompson/module_mp_thompson.F90 b/physics/MP/Thompson/module_mp_thompson.F90 index 358558e332..3857b668db 100644 --- a/physics/MP/Thompson/module_mp_thompson.F90 +++ b/physics/MP/Thompson/module_mp_thompson.F90 @@ -1045,7 +1045,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & tprr_rcs, tprv_rev, tten3, qvten3, & qrten3, qsten3, qgten3, qiten3, niten3, & nrten3, ncten3, qcten3, & - pfils, pflls) + pfils, pflls, & + tc_rain, tc_snow) implicit none @@ -1114,6 +1115,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & tprr_rcs, tprv_rev, tten3, qvten3, & qrten3, qsten3, qgten3, qiten3, niten3, & nrten3, ncten3, qcten3 + ! TC adjustment + real(wp), INTENT (IN) :: tc_rain, tc_snow !..Local variables real(wp), dimension(kts:kte):: & @@ -1483,7 +1486,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & tprr_rcs1, tprv_rev1, & tten1, qvten1, qrten1, qsten1, & qgten1, qiten1, niten1, nrten1, ncten1, qcten1, & - pfil1, pfll1) + pfil1, pfll1, & + tc_rain, tc_snow) pcp_ra(i,j) = pcp_ra(i,j) + pptrain pcp_sn(i,j) = pcp_sn(i,j) + pptsnow @@ -1903,7 +1907,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & tprr_rcs1, tprv_rev1, & tten1, qvten1, qrten1, qsten1, & qgten1, qiten1, niten1, nrten1, ncten1, qcten1, & - pfil1, pfll1) + pfil1, pfll1, & + tc_rain, tc_snow) #ifdef MPI use mpi_f08 @@ -1941,6 +1946,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & tprr_rcs1, tprv_rev1, tten1, qvten1, & qrten1, qsten1, qgten1, qiten1, niten1, & nrten1, ncten1, qcten1 + ! TC adjustment + real(wp), intent(in) :: tc_rain, tc_snow #if ( WRF_CHEM == 1 ) real(wp), dimension(kts:kte), intent(inout) :: & @@ -2035,6 +2042,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & logical :: debug_flag integer :: nu_c + real(wp) :: ymaxw, ytmp1 ! tc djustment tmp variable !+---+ debug_flag = .false. @@ -3773,6 +3781,15 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & enddo if (ANY(L_qr .eqv. .true.)) then + ymaxw=maxval(w1d) + ytmp1=tc_rain + ! if <0, tc adjustment is w-dependent + if (tc_rain < 0) then + ytmp1=1.0 + ! Linearly increase with max W, up to 0.1 for Maxw>=5m/s, only for +W + if (ymaxw >= 0.5) ytmp1=abs(tc_rain)+min((ymaxw-0.5)/(5.0-0.5),1.0)*0.1 + endif + do k = kte, kts, -1 vtr = 0. rhof(k) = SQRT(RHO_NOT/rho(k)) @@ -3781,7 +3798,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) & *((lamr+fv_r)**(-cre(6))) - vtrk(k) = vtr + vtrk(k) = vtr*ytmp1 ! First below is technically correct: ! vtr = rhof(k)*av_r*crg(5)*org2 * lamr**cre(2) & ! *((lamr+fv_r)**(-cre(5))) @@ -3789,7 +3806,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & ! Goal: less prominent size sorting vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) & *((lamr+fv_r)**(-cre(7))) - vtnrk(k) = vtr + vtnrk(k) = vtr*ytmp1 else vtrk(k) = vtrk(k+1) vtnrk(k) = vtnrk(k+1) @@ -3873,6 +3890,14 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & !+---+-----------------------------------------------------------------+ if (ANY(L_qs .eqv. .true.)) then + ymaxw=maxval(w1d) + ytmp1=tc_snow + ! if <0, tc adjustment is w-dependent + if (tc_snow < 0) then + ytmp1=1.0 + ! Linearly increase with max W, up to 0.1 for Maxw>=5m/s, only for +W + if (ymaxw >= 0.5) ytmp1= abs(tc_snow)+min((ymaxw-0.5)/(5.0-0.5),1.0)*0.1 + endif nstep = 0 do k = kte, kts, -1 vts = 0. @@ -3890,6 +3915,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & t3_vts = Kap0*csg(1)*ils1**cse(1) t4_vts = Kap1*Mrat**mu_s*csg(7)*ils2**cse(7) vts = rhof(k)*av_s * (t1_vts+t2_vts)/(t3_vts+t4_vts) + vts=vts*ytmp1 if (prr_sml(k) .gt. 0.0) then ! vtsk(k) = max(vts*vts_boost(k), & ! & vts*((vtrk(k)-vts*vts_boost(k))/(temp(k)-T_0))) diff --git a/physics/MP/Thompson/mp_thompson.F90 b/physics/MP/Thompson/mp_thompson.F90 index 666a8a53f2..e77e2592fc 100644 --- a/physics/MP/Thompson/mp_thompson.F90 +++ b/physics/MP/Thompson/mp_thompson.F90 @@ -383,6 +383,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & spp_prt_list, spp_var_list, & spp_stddev_cutoff, & cplchm, pfi_lsan, pfl_lsan, & + tc_rain, tc_snow, & is_initialized, errmsg, errflg) implicit none @@ -465,6 +466,9 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind=kind_phys), intent(inout), dimension(:,:), optional :: pfi_lsan real(kind=kind_phys), intent(inout), dimension(:,:), optional :: pfl_lsan + ! TC adjustment + real(kind_phys), intent(in) :: tc_rain, tc_snow + ! Local variables ! Reduced time step if subcycling is used @@ -776,7 +780,8 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & tprv_rev=tprv_rev, tten3=tten3, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & - qcten3=qcten3, pfils=pfils, pflls=pflls) + qcten3=qcten3, pfils=pfils, pflls=pflls, & + tc_rain=tc_rain, tc_snow=tc_snow) else if (merra2_aerosol_aware) then call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & nc=nc, nwfa=nwfa, nifa=nifa, & @@ -818,7 +823,8 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & tprv_rev=tprv_rev, tten3=tten3, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & - qcten3=qcten3, pfils=pfils, pflls=pflls) + qcten3=qcten3, pfils=pfils, pflls=pflls, & + tc_rain=tc_rain, tc_snow=tc_snow) else call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & @@ -858,7 +864,8 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & tprv_rev=tprv_rev, tten3=tten3, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & - qcten3=qcten3, pfils=pfils, pflls=pflls) + qcten3=qcten3, pfils=pfils, pflls=pflls, & + tc_rain=tc_rain, tc_snow=tc_snow) end if if (errflg/=0) return diff --git a/physics/MP/Thompson/mp_thompson.meta b/physics/MP/Thompson/mp_thompson.meta index 09e2926722..23ec7a9ada 100644 --- a/physics/MP/Thompson/mp_thompson.meta +++ b/physics/MP/Thompson/mp_thompson.meta @@ -943,6 +943,22 @@ dimensions = () type = logical intent = inout +[tc_rain] + standard_name = tc_adjustment_rain_fall_speed + long_name = tc adjustment rain fall speed + units = none + dimensions = () + type = real + kind = kind_phys + intent = in +[tc_snow] + standard_name = tc_adjustment_snow_fall_speed + long_name = tc adjustment snow fall speed + units = none + dimensions = () + type = real + kind = kind_phys + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 01898e49bdb19611932142b3abdb9d7674f4167f Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 14 Jan 2026 20:11:51 +0000 Subject: [PATCH 03/11] Remove local mpiroot --- physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 | 6 ++---- physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 | 6 ++---- physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 | 6 ++---- physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 | 6 ++---- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 index ea4d28d0e0..fd28b11b7d 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 @@ -48,7 +48,7 @@ module rrtmgp_lw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -61,8 +61,7 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot1 !< Master MPI rank - integer :: mpiroot + mpiroot !< Master MPI rank ! Outputs character(len=*), intent(out) :: & @@ -78,7 +77,6 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, errmsg = '' errflg = 0 - mpiroot = 0 ! Filenames are set in the physics_nml lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 index f8cbc5d5e1..ca0f2ccce3 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 @@ -72,7 +72,7 @@ module rrtmgp_lw_gas_optics !> subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -84,8 +84,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot1 !< Master MPI rank - integer :: mpiroot + mpiroot !< Master MPI rank ! Outputs character(len=*), intent(out) :: & @@ -103,7 +102,6 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, errmsg = '' errflg = 0 - mpiroot = 0 ! Filenames are set in the physics_nml lw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_gas) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 index 122478831c..402631b885 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 @@ -45,7 +45,7 @@ module rrtmgp_sw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -57,8 +57,7 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot1 !< Master MPI rank - integer :: mpiroot + mpiroot !< Master MPI rank ! Outputs character(len=*), intent(out) :: & @@ -74,7 +73,6 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, errmsg = '' errflg = 0 - mpiroot = 0 ! Filenames are set in the physics_nml sw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 index 2d2e3a1244..d5fb525f27 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 @@ -83,7 +83,7 @@ module rrtmgp_sw_gas_optics !! the full k-distribution data is read in, reduced by the "active gases" provided, and !! loaded into the RRTMGP DDT, ty_gas_optics_rrtmgp. subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -95,8 +95,7 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot1 !< Master MPI rank - integer :: mpiroot + mpiroot !< Master MPI rank ! Outputs character(len=*), intent(out) :: & @@ -114,7 +113,6 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, errmsg = '' errflg = 0 - mpiroot = 0 ! Filenames are set in the gfphysics_nml sw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_gas) From 2aa85baeb7b10e88e092384bacba5964918ade9f Mon Sep 17 00:00:00 2001 From: Dustin Swales Date: Wed, 14 Jan 2026 20:53:10 +0000 Subject: [PATCH 04/11] Add initialization flags. --- .../Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 | 14 ++++++++++---- physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 | 14 ++++++++++---- physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 | 13 ++++++++----- physics/Radiation/RRTMGP/rrtmgp_lw_main.meta | 14 ++++++++++++++ .../Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 | 12 +++++++++--- physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 | 12 +++++++++--- physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 | 13 ++++++++----- physics/Radiation/RRTMGP/rrtmgp_sw_main.meta | 14 ++++++++++++++ 8 files changed, 82 insertions(+), 24 deletions(-) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 index fd28b11b7d..950dfaee4b 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 @@ -48,7 +48,7 @@ module rrtmgp_lw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -64,9 +64,11 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, mpiroot !< Master MPI rank ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_initialized !< Initialization flag + character(len=*), intent( out) :: & errmsg !< Error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< Error code ! Local variables @@ -77,6 +79,8 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, errmsg = '' errflg = 0 + if (is_initialized) return + ! Filenames are set in the physics_nml lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds) @@ -240,6 +244,8 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, lut_exticeLW, lut_ssaiceLW, lut_asyiceLW)) call check_error_msg('lw_cloud_optics_init',lw_cloud_props%set_ice_roughness(nrghice)) - + + is_initialized = .true. + end subroutine rrtmgp_lw_cloud_optics_init end module rrtmgp_lw_cloud_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 index ca0f2ccce3..511d4116fe 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 @@ -72,7 +72,7 @@ module rrtmgp_lw_gas_optics !> subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -87,9 +87,11 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpiroot !< Master MPI rank ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_initialized !< Initialization flag. + character(len=*), intent( out) :: & errmsg !< CCPP error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< CCPP error code ! Local variables @@ -102,6 +104,8 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, errmsg = '' errflg = 0 + if (is_initialized) return + ! Filenames are set in the physics_nml lw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_gas) @@ -459,7 +463,9 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, scaling_gas_lowerLW, scaling_gas_upperLW, scale_by_complement_lowerLW, & scale_by_complement_upperLW, kminor_start_lowerLW, kminor_start_upperLW, totplnkLW,& planck_fracLW, rayl_lowerLW, rayl_upperLW, optimal_angle_fitLW)) - + + is_initialized = .true. + end subroutine rrtmgp_lw_gas_optics_init end module rrtmgp_lw_gas_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 index 7f86c6ca3a..ee295535d9 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 @@ -31,7 +31,7 @@ module rrtmgp_lw_main !! subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_file_clouds,& active_gases_array, nrghice, mpicomm, mpirank, mpiroot, nLay, rrtmgp_phys_blksz, & - errmsg, errflg) + is_init_gas_optics, is_init_cloud_optics, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -53,9 +53,12 @@ subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_fi nLay ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_init_gas_optics, & !< Initialization flag + is_init_cloud_optics !< Initialization flag + character(len=*), intent( out) :: & errmsg !< CCPP error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< CCPP error code ! Initialize CCPP error handling variables @@ -64,11 +67,11 @@ subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_fi ! RRTMGP longwave gas-optics (k-distribution) initialization call rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, is_init_gas_optics, errmsg, errflg) ! RRTMGP longwave cloud-optics initialization call rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, is_init_cloud_optics, errmsg, errflg) end subroutine rrtmgp_lw_main_init diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta b/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta index 9c7807c591..26f2ca8330 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta @@ -88,6 +88,20 @@ type = character kind = len=* intent = in +[is_init_gas_optics] + standard_name = flag_for_rrmtgp_lw_gas_optics_initialization + long_name = flag carrying scheme initialization status + units = flag + dimensions = () + type = logical + intent = inout +[is_init_cloud_optics] + standard_name = flag_for_rrmtgp_lw_cloud_optics_initialization + long_name = flag carrying scheme initialization status + units = flag + dimensions = () + type = logical + intent = inout [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 index 402631b885..56c599f9cf 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 @@ -45,7 +45,7 @@ module rrtmgp_sw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -60,9 +60,11 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, mpiroot !< Master MPI rank ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_initialized !< Initialization flag + character(len=*), intent( out) :: & errmsg !< CCPP error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< CCPP error code ! Local variables @@ -73,6 +75,8 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, errmsg = '' errflg = 0 + if (is_initialized) return + ! Filenames are set in the physics_nml sw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_clouds) @@ -251,5 +255,7 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, c0s = (/0.970, 0.970, 0.970, 0.970, 0.970, 0.970, 0.970, & 0.970, 0.970, 0.970, 0.700, 0.700, 0.700, 0.700/) + is_initialized = .true. + end subroutine rrtmgp_sw_cloud_optics_init end module rrtmgp_sw_cloud_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 index d5fb525f27..fb1787241f 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 @@ -83,7 +83,7 @@ module rrtmgp_sw_gas_optics !! the full k-distribution data is read in, reduced by the "active gases" provided, and !! loaded into the RRTMGP DDT, ty_gas_optics_rrtmgp. subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -98,9 +98,11 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, mpiroot !< Master MPI rank ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_initialized !< Initialization flag. + character(len=*), intent( out) :: & errmsg !< CCPP error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< CCPP error code ! Local variables @@ -113,6 +115,8 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, errmsg = '' errflg = 0 + if (is_initialized) return + ! Filenames are set in the gfphysics_nml sw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_gas) @@ -509,6 +513,8 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, solar_quietSW, solar_facularSW, solar_sunspotSW, tsi_defaultSW, mg_defaultSW, & sb_defaultSW, rayl_lowerSW, rayl_upperSW)) + is_initialized = .true. + end subroutine rrtmgp_sw_gas_optics_init end module rrtmgp_sw_gas_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 index 4ce051fe15..b083546f3a 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 @@ -31,7 +31,7 @@ module rrtmgp_sw_main !! subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_file_clouds,& active_gases_array, nrghice, mpicomm, mpirank, mpiroot, nLay, rrtmgp_phys_blksz, & - errmsg, errflg) + is_init_gas_optics, is_init_cloud_optics, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -50,9 +50,12 @@ subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_fi rrtmgp_phys_blksz, & !< Number of horizontal points to process at once. nLay ! Outputs - character(len=*), intent(out) :: & + logical, intent(inout) :: & + is_init_gas_optics, & !< Initialization flag + is_init_cloud_optics !< Initialization flag + character(len=*), intent( out) :: & errmsg !< CCPP error message - integer, intent(out) :: & + integer, intent( out) :: & errflg !< CCPP error code ! Initialize CCPP error handling variables @@ -61,11 +64,11 @@ subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_fi ! RRTMGP shortwave gas-optics (k-distribution) initialization call rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, active_gases_array,& - mpicomm, mpirank, mpiroot, errmsg, errflg) + mpicomm, mpirank, mpiroot, is_init_gas_optics, errmsg, errflg) ! RRTMGP shortwave cloud-optics initialization call rrtmgp_sw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, is_init_cloud_optics, errmsg, errflg) end subroutine rrtmgp_sw_main_init diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta b/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta index a0935d84cb..8c382cb1e2 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta @@ -87,6 +87,20 @@ type = character kind = len=* intent = in +[is_init_gas_optics] + standard_name = flag_for_rrmtgp_sw_gas_optics_initialization + long_name = flag carrying scheme initialization status + units = flag + dimensions = () + type = logical + intent = inout +[is_init_cloud_optics] + standard_name = flag_for_rrmtgp_sw_cloud_optics_initialization + long_name = flag carrying scheme initialization status + units = flag + dimensions = () + type = logical + intent = inout [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From d1772749a2cb1c9d79f0d00b52d48dbe47844ee2 Mon Sep 17 00:00:00 2001 From: Junghoon Shin Date: Wed, 31 Dec 2025 01:20:12 +0000 Subject: [PATCH 05/11] Modifying samfdeepcnv.f, samfdeepcnv.meta, samfshalcnv.f, samfshalcnv.meta so that convective adjustment time can be tunable, introducing two parameters cat_adj_deep and cat_adj_shal for this --- physics/CONV/SAMF/samfdeepcnv.f | 9 +++++++-- physics/CONV/SAMF/samfdeepcnv.meta | 8 ++++++++ physics/CONV/SAMF/samfshalcnv.f | 8 ++++++-- physics/CONV/SAMF/samfshalcnv.meta | 8 ++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/physics/CONV/SAMF/samfdeepcnv.f b/physics/CONV/SAMF/samfdeepcnv.f index 1ccff17e52..2b82d5c902 100644 --- a/physics/CONV/SAMF/samfdeepcnv.f +++ b/physics/CONV/SAMF/samfdeepcnv.f @@ -85,7 +85,8 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & & clam,c0s,c1,betal,betas,evef,pgcon,asolfac,cscale, & & do_ca, ca_closure, ca_entr, ca_trigger, nthresh,ca_deep, & & rainevap,sigmain,sigmaout,omegain,omegaout,betadcu,betamcu, & - & betascu,maxMF,do_mynnedmf,sigmab_coldstart,errmsg,errflg) + & betascu,maxMF,do_mynnedmf,sigmab_coldstart,cat_adj_deep, & + & errmsg,errflg) ! use machine , only : kind_phys @@ -139,6 +140,9 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & & evef, pgcon character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg + + ! for HAFS + real(kind_phys), intent(in) :: cat_adj_deep ! !------local variables integer i, indx, jmn, k, kk, km1, n @@ -2952,7 +2956,8 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & umean(i) = max(umean(i), 1.) tauadv = gdx(i) / umean(i) advfac(i) = tauadv / dtconv(i) - advfac(i) = min(advfac(i), 1.) + advfac(i) = min(cat_adj_deep*advfac(i), 1.) + !advfac(i) = min(0.85*advfac(i), 1.) !shin endif enddo diff --git a/physics/CONV/SAMF/samfdeepcnv.meta b/physics/CONV/SAMF/samfdeepcnv.meta index 1fc5fdf62c..079248dbe0 100644 --- a/physics/CONV/SAMF/samfdeepcnv.meta +++ b/physics/CONV/SAMF/samfdeepcnv.meta @@ -762,6 +762,14 @@ type = real kind = kind_phys intent = out +[cat_adj_deep] + standard_name = Adjustment_for_convective_advection_time_for_deep + long_name = Adjustment for convective advection time for deep + units = none + dimensions = () + type = real + kind = kind_phys + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/CONV/SAMF/samfshalcnv.f b/physics/CONV/SAMF/samfshalcnv.f index bc69f0ebb0..16bcca2f7f 100644 --- a/physics/CONV/SAMF/samfshalcnv.f +++ b/physics/CONV/SAMF/samfshalcnv.f @@ -59,7 +59,7 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & & dot,ncloud,hpbl,ud_mf,dt_mf,cnvw,cnvc, & & clam,c0s,c1,evef,pgcon,asolfac,hwrf_samfshal, & & sigmain,sigmaout,omegain,omegaout,betadcu,betamcu,betascu, & - & errmsg,errflg) + & cat_adj_shal,errmsg,errflg) ! use machine , only : kind_phys use funcphys , only : fpvs @@ -100,6 +100,9 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & & restart,progsigma,progomega character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg + + ! for HAFS + real(kind_phys), intent(in) :: cat_adj_shal ! ! local variables integer i,j,indx, k, kk, km1, n @@ -1992,7 +1995,8 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & umean(i) = max(umean(i), 1.) tauadv = gdx(i) / umean(i) advfac(i) = tauadv / dtconv(i) - advfac(i) = min(advfac(i), 1.) + advfac(i) = min(cat_adj_shal*advfac(i), 1.) + !advfac(i) = min(0.85*advfac(i), 1.) !shin endif enddo c diff --git a/physics/CONV/SAMF/samfshalcnv.meta b/physics/CONV/SAMF/samfshalcnv.meta index b96a742f2c..0373aaea2d 100644 --- a/physics/CONV/SAMF/samfshalcnv.meta +++ b/physics/CONV/SAMF/samfshalcnv.meta @@ -550,6 +550,14 @@ dimensions = () type = real intent = in +[cat_adj_shal] + standard_name = Adjustment_for_convective_advection_time_for_shallow + long_name = Adjustment for convective advection time for shallow + units = none + dimensions = () + type = real + kind = kind_phys + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From 1430d38d7c289311f4205374f82569610b97b74b Mon Sep 17 00:00:00 2001 From: Weiguo Wang Date: Fri, 16 Jan 2026 11:39:32 -0500 Subject: [PATCH 06/11] Updated variable names for optional tuning factors for fall speeds of rain and snow in Thompson MP scheme --- physics/MP/Thompson/module_mp_thompson.F90 | 41 ++++++++-------------- physics/MP/Thompson/mp_thompson.F90 | 12 +++---- physics/MP/Thompson/mp_thompson.meta | 14 ++++---- 3 files changed, 29 insertions(+), 38 deletions(-) diff --git a/physics/MP/Thompson/module_mp_thompson.F90 b/physics/MP/Thompson/module_mp_thompson.F90 index e5ec12a961..036985e774 100644 --- a/physics/MP/Thompson/module_mp_thompson.F90 +++ b/physics/MP/Thompson/module_mp_thompson.F90 @@ -1044,7 +1044,7 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & qrten3, qsten3, qgten3, qiten3, niten3, & nrten3, ncten3, qcten3, & pfils, pflls, & - tc_rain, tc_snow) + fs_fac_rain, fs_fac_snow) implicit none @@ -1113,8 +1113,8 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & tprr_rcs, tprv_rev, tten3, qvten3, & qrten3, qsten3, qgten3, qiten3, niten3, & nrten3, ncten3, qcten3 - ! TC adjustment - real(wp), INTENT (IN) :: tc_rain, tc_snow + ! Fall speed adjustment + real(wp), INTENT (IN), optional :: fs_fac_rain, fs_fac_snow !..Local variables real(wp), dimension(kts:kte):: & @@ -1485,7 +1485,7 @@ subroutine mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & tten1, qvten1, qrten1, qsten1, & qgten1, qiten1, niten1, nrten1, ncten1, qcten1, & pfil1, pfll1, & - tc_rain, tc_snow) + fs_fac_rain, fs_fac_snow) pcp_ra(i,j) = pcp_ra(i,j) + pptrain pcp_sn(i,j) = pcp_sn(i,j) + pptsnow @@ -1906,7 +1906,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & tten1, qvten1, qrten1, qsten1, & qgten1, qiten1, niten1, nrten1, ncten1, qcten1, & pfil1, pfll1, & - tc_rain, tc_snow) + fs_fac_rain, fs_fac_snow) use mpi_f08 @@ -1943,7 +1943,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & qrten1, qsten1, qgten1, qiten1, niten1, & nrten1, ncten1, qcten1 ! TC adjustment - real(wp), intent(in) :: tc_rain, tc_snow + real(wp), intent(in), optional :: fs_fac_rain, fs_fac_snow #if ( WRF_CHEM == 1 ) real(wp), dimension(kts:kte), intent(inout) :: & @@ -2038,7 +2038,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & logical :: debug_flag integer :: nu_c - real(wp) :: ymaxw, ytmp1 ! tc djustment tmp variable + real(wp) :: fallspeed_adjustment_factor !+---+ debug_flag = .false. @@ -3777,14 +3777,8 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & enddo if (ANY(L_qr .eqv. .true.)) then - ymaxw=maxval(w1d) - ytmp1=tc_rain - ! if <0, tc adjustment is w-dependent - if (tc_rain < 0) then - ytmp1=1.0 - ! Linearly increase with max W, up to 0.1 for Maxw>=5m/s, only for +W - if (ymaxw >= 0.5) ytmp1=abs(tc_rain)+min((ymaxw-0.5)/(5.0-0.5),1.0)*0.1 - endif + fallspeed_adjustment_factor=1.0 + if ( present(fs_fac_rain) ) fallspeed_adjustment_factor=fs_fac_rain do k = kte, kts, -1 vtr = 0. @@ -3794,7 +3788,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lamr = (am_r*crg(3)*org2*nr(k)/rr(k))**obmr vtr = rhof(k)*av_r*crg(6)*org3 * lamr**cre(3) & *((lamr+fv_r)**(-cre(6))) - vtrk(k) = vtr*ytmp1 + vtrk(k) = vtr*fallspeed_adjustment_factor ! First below is technically correct: ! vtr = rhof(k)*av_r*crg(5)*org2 * lamr**cre(2) & ! *((lamr+fv_r)**(-cre(5))) @@ -3802,7 +3796,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & ! Goal: less prominent size sorting vtr = rhof(k)*av_r*crg(7)/crg(12) * lamr**cre(12) & *((lamr+fv_r)**(-cre(7))) - vtnrk(k) = vtr*ytmp1 + vtnrk(k) = vtr*fallspeed_adjustment_factor else vtrk(k) = vtrk(k+1) vtnrk(k) = vtnrk(k+1) @@ -3886,14 +3880,9 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & !+---+-----------------------------------------------------------------+ if (ANY(L_qs .eqv. .true.)) then - ymaxw=maxval(w1d) - ytmp1=tc_snow - ! if <0, tc adjustment is w-dependent - if (tc_snow < 0) then - ytmp1=1.0 - ! Linearly increase with max W, up to 0.1 for Maxw>=5m/s, only for +W - if (ymaxw >= 0.5) ytmp1= abs(tc_snow)+min((ymaxw-0.5)/(5.0-0.5),1.0)*0.1 - endif + fallspeed_adjustment_factor=1.0 + if ( present(fs_fac_snow) ) fallspeed_adjustment_factor=fs_fac_snow + nstep = 0 do k = kte, kts, -1 vts = 0. @@ -3911,7 +3900,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & t3_vts = Kap0*csg(1)*ils1**cse(1) t4_vts = Kap1*Mrat**mu_s*csg(7)*ils2**cse(7) vts = rhof(k)*av_s * (t1_vts+t2_vts)/(t3_vts+t4_vts) - vts=vts*ytmp1 + vts=vts*fallspeed_adjustment_factor if (prr_sml(k) .gt. 0.0) then ! vtsk(k) = max(vts*vts_boost(k), & ! & vts*((vtrk(k)-vts*vts_boost(k))/(temp(k)-T_0))) diff --git a/physics/MP/Thompson/mp_thompson.F90 b/physics/MP/Thompson/mp_thompson.F90 index e77e2592fc..b3454c49ff 100644 --- a/physics/MP/Thompson/mp_thompson.F90 +++ b/physics/MP/Thompson/mp_thompson.F90 @@ -383,7 +383,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & spp_prt_list, spp_var_list, & spp_stddev_cutoff, & cplchm, pfi_lsan, pfl_lsan, & - tc_rain, tc_snow, & + fs_fac_rain, fs_fac_snow, & is_initialized, errmsg, errflg) implicit none @@ -466,8 +466,8 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind=kind_phys), intent(inout), dimension(:,:), optional :: pfi_lsan real(kind=kind_phys), intent(inout), dimension(:,:), optional :: pfl_lsan - ! TC adjustment - real(kind_phys), intent(in) :: tc_rain, tc_snow + ! fall speed adjustment + real(kind_phys), intent(in), optional :: fs_fac_rain, fs_fac_snow ! Local variables @@ -781,7 +781,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & qcten3=qcten3, pfils=pfils, pflls=pflls, & - tc_rain=tc_rain, tc_snow=tc_snow) + fs_fac_rain=fs_fac_rain, fs_fac_snow=fs_fac_snow) else if (merra2_aerosol_aware) then call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & nc=nc, nwfa=nwfa, nifa=nifa, & @@ -824,7 +824,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & qcten3=qcten3, pfils=pfils, pflls=pflls, & - tc_rain=tc_rain, tc_snow=tc_snow) + fs_fac_rain=fs_fac_rain, fs_fac_snow=fs_fac_snow) else call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & @@ -865,7 +865,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & qvten3=qvten3, qrten3=qrten3, qsten3=qsten3, qgten3=qgten3, & qiten3=qiten3, niten3=niten3, nrten3=nrten3, ncten3=ncten3, & qcten3=qcten3, pfils=pfils, pflls=pflls, & - tc_rain=tc_rain, tc_snow=tc_snow) + fs_fac_rain=fs_fac_rain, fs_fac_snow=fs_fac_snow) end if if (errflg/=0) return diff --git a/physics/MP/Thompson/mp_thompson.meta b/physics/MP/Thompson/mp_thompson.meta index 23ec7a9ada..b8ff37bd4f 100644 --- a/physics/MP/Thompson/mp_thompson.meta +++ b/physics/MP/Thompson/mp_thompson.meta @@ -943,22 +943,24 @@ dimensions = () type = logical intent = inout -[tc_rain] - standard_name = tc_adjustment_rain_fall_speed - long_name = tc adjustment rain fall speed +[fs_fac_rain] + standard_name = multiplicative_tuning_parameter_for_rain_fall_speed + long_name = multiplicative tuning parameter for rain fall speed units = none dimensions = () type = real kind = kind_phys intent = in -[tc_snow] - standard_name = tc_adjustment_snow_fall_speed - long_name = tc adjustment snow fall speed + optional = True +[fs_fac_snow] + standard_name = multiplicative_tuning_parameter_for_snow_fall_speed + long_name = multiplicative tuning parameter_for snow fall speed units = none dimensions = () type = real kind = kind_phys intent = in + optional = True [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From c67e8108b39d7b684c75b1fad90e2fabae0e2252 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Wed, 21 Jan 2026 20:30:26 +0000 Subject: [PATCH 07/11] cat_adj_deep/shal related format changes/cleanups in samfdeepcnv.f and samfshalcnv.f. --- physics/CONV/SAMF/samfdeepcnv.f | 5 +---- physics/CONV/SAMF/samfshalcnv.f | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/physics/CONV/SAMF/samfdeepcnv.f b/physics/CONV/SAMF/samfdeepcnv.f index 2b82d5c902..18be662f0f 100644 --- a/physics/CONV/SAMF/samfdeepcnv.f +++ b/physics/CONV/SAMF/samfdeepcnv.f @@ -138,11 +138,9 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & real(kind=kind_phys), intent(in) :: clam, c0s, c1, & & betal, betas, asolfac, & & evef, pgcon + real(kind_phys), intent(in) :: cat_adj_deep character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - - ! for HAFS - real(kind_phys), intent(in) :: cat_adj_deep ! !------local variables integer i, indx, jmn, k, kk, km1, n @@ -2957,7 +2955,6 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & tauadv = gdx(i) / umean(i) advfac(i) = tauadv / dtconv(i) advfac(i) = min(cat_adj_deep*advfac(i), 1.) - !advfac(i) = min(0.85*advfac(i), 1.) !shin endif enddo diff --git a/physics/CONV/SAMF/samfshalcnv.f b/physics/CONV/SAMF/samfshalcnv.f index 16bcca2f7f..1ec8747f01 100644 --- a/physics/CONV/SAMF/samfshalcnv.f +++ b/physics/CONV/SAMF/samfshalcnv.f @@ -98,11 +98,10 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & & asolfac, evef, pgcon logical, intent(in) :: hwrf_samfshal,first_time_step, & & restart,progsigma,progomega + real(kind_phys), intent(in) :: cat_adj_shal character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - ! for HAFS - real(kind_phys), intent(in) :: cat_adj_shal ! ! local variables integer i,j,indx, k, kk, km1, n @@ -1996,7 +1995,6 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & tauadv = gdx(i) / umean(i) advfac(i) = tauadv / dtconv(i) advfac(i) = min(cat_adj_shal*advfac(i), 1.) - !advfac(i) = min(0.85*advfac(i), 1.) !shin endif enddo c From 2c90394a518517819c15b78889e712b82d1d08b8 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Thu, 22 Jan 2026 21:54:38 +0000 Subject: [PATCH 08/11] Update cat_adj_deep/shal names to only use lowercase letters in samfdeepcnv.meta and samfshalcnv.meta. --- physics/CONV/SAMF/samfdeepcnv.meta | 4 ++-- physics/CONV/SAMF/samfshalcnv.meta | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/physics/CONV/SAMF/samfdeepcnv.meta b/physics/CONV/SAMF/samfdeepcnv.meta index 079248dbe0..76d5def418 100644 --- a/physics/CONV/SAMF/samfdeepcnv.meta +++ b/physics/CONV/SAMF/samfdeepcnv.meta @@ -763,8 +763,8 @@ kind = kind_phys intent = out [cat_adj_deep] - standard_name = Adjustment_for_convective_advection_time_for_deep - long_name = Adjustment for convective advection time for deep + standard_name = adjustment_for_convective_advection_time_for_deep + long_name = adjustment for convective advection time for deep units = none dimensions = () type = real diff --git a/physics/CONV/SAMF/samfshalcnv.meta b/physics/CONV/SAMF/samfshalcnv.meta index 0373aaea2d..6fc9c5d0fc 100644 --- a/physics/CONV/SAMF/samfshalcnv.meta +++ b/physics/CONV/SAMF/samfshalcnv.meta @@ -551,8 +551,8 @@ type = real intent = in [cat_adj_shal] - standard_name = Adjustment_for_convective_advection_time_for_shallow - long_name = Adjustment for convective advection time for shallow + standard_name = adjustment_for_convective_advection_time_for_shallow + long_name = adjustment for convective advection time for shallow units = none dimensions = () type = real From 5c430f9ee3ab9fff6a1b983edac6b78312072c94 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Tue, 3 Feb 2026 23:30:43 +0000 Subject: [PATCH 09/11] Revert "Add initialization flags." This reverts commit 2aa85baeb7b10e88e092384bacba5964918ade9f. --- .../Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 | 14 ++++---------- physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 | 14 ++++---------- physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 | 13 +++++-------- physics/Radiation/RRTMGP/rrtmgp_lw_main.meta | 14 -------------- .../Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 | 12 +++--------- physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 | 12 +++--------- physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 | 13 +++++-------- physics/Radiation/RRTMGP/rrtmgp_sw_main.meta | 14 -------------- 8 files changed, 24 insertions(+), 82 deletions(-) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 index 950dfaee4b..fd28b11b7d 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 @@ -48,7 +48,7 @@ module rrtmgp_lw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -64,11 +64,9 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, mpiroot !< Master MPI rank ! Outputs - logical, intent(inout) :: & - is_initialized !< Initialization flag - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< Error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< Error code ! Local variables @@ -79,8 +77,6 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, errmsg = '' errflg = 0 - if (is_initialized) return - ! Filenames are set in the physics_nml lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds) @@ -244,8 +240,6 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, lut_exticeLW, lut_ssaiceLW, lut_asyiceLW)) call check_error_msg('lw_cloud_optics_init',lw_cloud_props%set_ice_roughness(nrghice)) - - is_initialized = .true. - + end subroutine rrtmgp_lw_cloud_optics_init end module rrtmgp_lw_cloud_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 index 511d4116fe..ca0f2ccce3 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 @@ -72,7 +72,7 @@ module rrtmgp_lw_gas_optics !> subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -87,11 +87,9 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpiroot !< Master MPI rank ! Outputs - logical, intent(inout) :: & - is_initialized !< Initialization flag. - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< CCPP error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< CCPP error code ! Local variables @@ -104,8 +102,6 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, errmsg = '' errflg = 0 - if (is_initialized) return - ! Filenames are set in the physics_nml lw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_gas) @@ -463,9 +459,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, scaling_gas_lowerLW, scaling_gas_upperLW, scale_by_complement_lowerLW, & scale_by_complement_upperLW, kminor_start_lowerLW, kminor_start_upperLW, totplnkLW,& planck_fracLW, rayl_lowerLW, rayl_upperLW, optimal_angle_fitLW)) - - is_initialized = .true. - + end subroutine rrtmgp_lw_gas_optics_init end module rrtmgp_lw_gas_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 index ee295535d9..7f86c6ca3a 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 @@ -31,7 +31,7 @@ module rrtmgp_lw_main !! subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_file_clouds,& active_gases_array, nrghice, mpicomm, mpirank, mpiroot, nLay, rrtmgp_phys_blksz, & - is_init_gas_optics, is_init_cloud_optics, errmsg, errflg) + errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -53,12 +53,9 @@ subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_fi nLay ! Outputs - logical, intent(inout) :: & - is_init_gas_optics, & !< Initialization flag - is_init_cloud_optics !< Initialization flag - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< CCPP error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< CCPP error code ! Initialize CCPP error handling variables @@ -67,11 +64,11 @@ subroutine rrtmgp_lw_main_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, rrtmgp_lw_fi ! RRTMGP longwave gas-optics (k-distribution) initialization call rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, is_init_gas_optics, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) ! RRTMGP longwave cloud-optics initialization call rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, is_init_cloud_optics, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) end subroutine rrtmgp_lw_main_init diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta b/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta index 26f2ca8330..9c7807c591 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_main.meta @@ -88,20 +88,6 @@ type = character kind = len=* intent = in -[is_init_gas_optics] - standard_name = flag_for_rrmtgp_lw_gas_optics_initialization - long_name = flag carrying scheme initialization status - units = flag - dimensions = () - type = logical - intent = inout -[is_init_cloud_optics] - standard_name = flag_for_rrmtgp_lw_cloud_optics_initialization - long_name = flag carrying scheme initialization status - units = flag - dimensions = () - type = logical - intent = inout [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 index 56c599f9cf..402631b885 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 @@ -45,7 +45,7 @@ module rrtmgp_sw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -60,11 +60,9 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, mpiroot !< Master MPI rank ! Outputs - logical, intent(inout) :: & - is_initialized !< Initialization flag - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< CCPP error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< CCPP error code ! Local variables @@ -75,8 +73,6 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, errmsg = '' errflg = 0 - if (is_initialized) return - ! Filenames are set in the physics_nml sw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_clouds) @@ -255,7 +251,5 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, c0s = (/0.970, 0.970, 0.970, 0.970, 0.970, 0.970, 0.970, & 0.970, 0.970, 0.970, 0.700, 0.700, 0.700, 0.700/) - is_initialized = .true. - end subroutine rrtmgp_sw_cloud_optics_init end module rrtmgp_sw_cloud_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 index fb1787241f..d5fb525f27 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 @@ -83,7 +83,7 @@ module rrtmgp_sw_gas_optics !! the full k-distribution data is read in, reduced by the "active gases" provided, and !! loaded into the RRTMGP DDT, ty_gas_optics_rrtmgp. subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, is_initialized, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -98,11 +98,9 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, mpiroot !< Master MPI rank ! Outputs - logical, intent(inout) :: & - is_initialized !< Initialization flag. - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< CCPP error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< CCPP error code ! Local variables @@ -115,8 +113,6 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, errmsg = '' errflg = 0 - if (is_initialized) return - ! Filenames are set in the gfphysics_nml sw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_gas) @@ -513,8 +509,6 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, solar_quietSW, solar_facularSW, solar_sunspotSW, tsi_defaultSW, mg_defaultSW, & sb_defaultSW, rayl_lowerSW, rayl_upperSW)) - is_initialized = .true. - end subroutine rrtmgp_sw_gas_optics_init end module rrtmgp_sw_gas_optics diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 index b083546f3a..4ce051fe15 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 @@ -31,7 +31,7 @@ module rrtmgp_sw_main !! subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_file_clouds,& active_gases_array, nrghice, mpicomm, mpirank, mpiroot, nLay, rrtmgp_phys_blksz, & - is_init_gas_optics, is_init_cloud_optics, errmsg, errflg) + errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -50,12 +50,9 @@ subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_fi rrtmgp_phys_blksz, & !< Number of horizontal points to process at once. nLay ! Outputs - logical, intent(inout) :: & - is_init_gas_optics, & !< Initialization flag - is_init_cloud_optics !< Initialization flag - character(len=*), intent( out) :: & + character(len=*), intent(out) :: & errmsg !< CCPP error message - integer, intent( out) :: & + integer, intent(out) :: & errflg !< CCPP error code ! Initialize CCPP error handling variables @@ -64,11 +61,11 @@ subroutine rrtmgp_sw_main_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, rrtmgp_sw_fi ! RRTMGP shortwave gas-optics (k-distribution) initialization call rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, active_gases_array,& - mpicomm, mpirank, mpiroot, is_init_gas_optics, errmsg, errflg) + mpicomm, mpirank, mpiroot, errmsg, errflg) ! RRTMGP shortwave cloud-optics initialization call rrtmgp_sw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, is_init_cloud_optics, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) end subroutine rrtmgp_sw_main_init diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta b/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta index 8c382cb1e2..a0935d84cb 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_main.meta @@ -87,20 +87,6 @@ type = character kind = len=* intent = in -[is_init_gas_optics] - standard_name = flag_for_rrmtgp_sw_gas_optics_initialization - long_name = flag carrying scheme initialization status - units = flag - dimensions = () - type = logical - intent = inout -[is_init_cloud_optics] - standard_name = flag_for_rrmtgp_sw_cloud_optics_initialization - long_name = flag carrying scheme initialization status - units = flag - dimensions = () - type = logical - intent = inout [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP From a4793b841b91c8baaadd1e4492b42baa4915b91e Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Tue, 3 Feb 2026 23:31:10 +0000 Subject: [PATCH 10/11] Revert "Remove local mpiroot" This reverts commit 01898e49bdb19611932142b3abdb9d7674f4167f. --- physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 | 6 ++++-- physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 | 6 ++++-- physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 | 6 ++++-- physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 index fd28b11b7d..ea4d28d0e0 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_cloud_optics.F90 @@ -48,7 +48,7 @@ module rrtmgp_lw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -61,7 +61,8 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -77,6 +78,7 @@ subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 index ca0f2ccce3..f8cbc5d5e1 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_gas_optics.F90 @@ -72,7 +72,7 @@ module rrtmgp_lw_gas_optics !> subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -84,7 +84,8 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -102,6 +103,7 @@ subroutine rrtmgp_lw_gas_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_gas, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml lw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_gas) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 index 402631b885..122478831c 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_cloud_optics.F90 @@ -45,7 +45,7 @@ module rrtmgp_sw_cloud_optics ! ###################################################################################### !> subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, & - nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg) + nrghice, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -57,7 +57,8 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, mpicomm !< MPI communicator integer, intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -73,6 +74,7 @@ subroutine rrtmgp_sw_cloud_optics_init( rrtmgp_root_dir, rrtmgp_sw_file_clouds, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the physics_nml sw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_clouds) diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 index d5fb525f27..2d2e3a1244 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_gas_optics.F90 @@ -83,7 +83,7 @@ module rrtmgp_sw_gas_optics !! the full k-distribution data is read in, reduced by the "active gases" provided, and !! loaded into the RRTMGP DDT, ty_gas_optics_rrtmgp. subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, & - active_gases_array, mpicomm, mpirank, mpiroot, errmsg, errflg) + active_gases_array, mpicomm, mpirank, mpiroot1, errmsg, errflg) ! Inputs character(len=128),intent(in) :: & @@ -95,7 +95,8 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, mpicomm !< MPI communicator integer,intent(in) :: & mpirank, & !< Current MPI rank - mpiroot !< Master MPI rank + mpiroot1 !< Master MPI rank + integer :: mpiroot ! Outputs character(len=*), intent(out) :: & @@ -113,6 +114,7 @@ subroutine rrtmgp_sw_gas_optics_init(rrtmgp_root_dir, rrtmgp_sw_file_gas, errmsg = '' errflg = 0 + mpiroot = 0 ! Filenames are set in the gfphysics_nml sw_gas_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_sw_file_gas) From 605d486b0ed4eb8ba2e8853b964b767e4b1b1a09 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Fri, 6 Feb 2026 17:28:43 +0000 Subject: [PATCH 11/11] Update the comment related to fall speed adjustment in module_mp_thompson.F90. --- physics/MP/Thompson/module_mp_thompson.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/MP/Thompson/module_mp_thompson.F90 b/physics/MP/Thompson/module_mp_thompson.F90 index 036985e774..b01bf41dd5 100644 --- a/physics/MP/Thompson/module_mp_thompson.F90 +++ b/physics/MP/Thompson/module_mp_thompson.F90 @@ -1942,7 +1942,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & tprr_rcs1, tprv_rev1, tten1, qvten1, & qrten1, qsten1, qgten1, qiten1, niten1, & nrten1, ncten1, qcten1 - ! TC adjustment + ! Fall speed adjustment real(wp), intent(in), optional :: fs_fac_rain, fs_fac_snow #if ( WRF_CHEM == 1 )