From bbbbd9f128ed1bfb132049c4345c2eaf6e64e987 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 4 Feb 2025 17:00:29 -0500 Subject: [PATCH 1/8] add changes from fv3atm PR#866 --- ccpp/config/ccpp_prebuild_config.py | 7 +++ ccpp/physics | 2 +- scm/src/GFS_typedefs.F90 | 69 ++++++++++++++++++++++++++++- scm/src/GFS_typedefs.meta | 20 ++++++++- 4 files changed, 95 insertions(+), 3 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index c6365038..3b58a4bf 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -21,6 +21,7 @@ 'ccpp/physics/physics/Radiation/RRTMG/radlw_param.f', 'ccpp/physics/physics/photochem/module_ozphys.F90', 'ccpp/physics/physics/photochem/module_h2ophys.F90', + 'ccpp/physics/physics/SFC_Models/Land/Noahmp/lnd_iau_mod.F90', 'ccpp/physics/physics/Interstitials/UFS_SCM_NEPTUNE/module_ccpp_suite_simulator.F90', 'scm/src/CCPP_typedefs.F90', 'scm/src/GFS_typedefs.F90', @@ -53,6 +54,12 @@ 'module_h2ophys' : '', 'ty_h2ophys' : '', }, + 'land_iau_mod' : { + 'land_iau_mod' : '', + 'land_iau_external_data_type' : '', + 'land_iau_state_type' : '', + 'land_iau_control_type' : '', + }, 'CCPP_typedefs' : { 'GFS_interstitial_type' : 'physics%Interstitial(cdata%thrd_no)', 'CCPP_typedefs' : '', diff --git a/ccpp/physics b/ccpp/physics index 4532e838..74a0a5d5 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 4532e838e81593ca40235aaba06612cc594f9c87 +Subproject commit 74a0a5d5167821c79759fce756a12bef0b08df80 diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index cb717e69..ba3e5d3b 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -8,6 +8,8 @@ module GFS_typedefs use module_ozphys, only: ty_ozphys use module_h2ophys, only: ty_h2ophys use module_ccpp_suite_simulator, only: base_physics_process + use land_iau_mod, only: land_iau_external_data_type, land_iau_control_type, & + land_iau_state_type, land_iau_mod_set_control implicit none @@ -475,6 +477,11 @@ module GFS_typedefs !--- For smoke and dust auxiliary inputs real (kind=kind_phys), pointer :: fire_in (:,:) => null() !< fire auxiliary inputs + !--- Land IAU DDTs + type(land_iau_external_data_type) :: land_iau_data + type(land_iau_control_type) :: land_iau_control + type(land_iau_state_type) :: land_iau_state + contains procedure :: create => sfcprop_create !< allocate array data end type GFS_sfcprop_type @@ -1640,6 +1647,19 @@ module GFS_typedefs integer :: levh2o !< Number of vertical layers in stratospheric h2o data. integer :: h2o_coeff !< Number of coefficients in stratospheric h2o data. +! !--- Land IAU +! !> land iau setting read from namelist +! logical :: do_land_iau +! real(kind=kind_phys) :: land_iau_delthrs +! character(len=240) :: land_iau_inc_files(7) +! real(kind=kind_phys) :: land_iau_fhrs(7) +! logical :: land_iau_filter_increments +! integer :: lsoil_incr +! logical :: land_iau_upd_stc +! logical :: land_iau_upd_slc +! logical :: land_iau_do_stcsmc_adjustment +! real(kind=kind_phys) :: land_iau_min_T_increment + !--- CCPP suite simulator logical :: do_ccpp_suite_sim ! integer :: nphys_proc ! @@ -2304,6 +2324,9 @@ subroutine sfcprop_create (Sfcprop, Model) class(GFS_sfcprop_type) :: Sfcprop type(GFS_control_type), intent(in) :: Model integer :: IM + + character(len=512) :: errmsg + integer :: errflg IM = Model%ncols @@ -2872,7 +2895,21 @@ subroutine sfcprop_create (Sfcprop, Model) Sfcprop%evap_fire = zero Sfcprop%smoke_fire = zero endif - + + ! land iau control setting + call land_iau_mod_set_control(Sfcprop%land_iau_control, & + Model%fn_nml, Model%input_nml_file, Model%me, Model%master, & + Model%isc, Model%jsc, Model%nx, Model%ny, Model%tile_num, Model%nblks, Model%blksz, & + Model%lsoil, Model%lsnow_lsm, Model%dtp, Model%fhour, errmsg, errflg) + + if (errflg/=0) then + if (Model%me==Model%master) then + write(0,'(a)') "Error inside sfcprop_create" + write(0,'(a)') trim(errmsg) + stop + endif + endif + end subroutine sfcprop_create @@ -4011,6 +4048,18 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: radar_tten_limits(2) = (/ limit_unspecified, limit_unspecified /) integer :: itime +! !> land iau setting read from namelist + ! logical :: do_land_iau = .false. + ! real(kind=kind_phys) :: land_iau_delthrs = 0 + ! character(len=240) :: land_iau_inc_files(7) = '' + ! real(kind=kind_phys) :: land_iau_fhrs(7) = -1 + ! logical :: land_iau_filter_increments = .false. + ! integer :: lsoil_incr = 4 + ! logical :: land_iau_upd_stc = .false. + ! logical :: land_iau_upd_slc = .false. + ! logical :: land_iau_do_stcsmc_adjustment = .false. + ! real(kind=kind_phys) :: land_iau_min_T_increment = 0.0001 + !--- END NAMELIST VARIABLES NAMELIST /gfs_physics_nml/ & @@ -4170,6 +4219,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & lightning_threat, & !--- CCPP suite simulator do_ccpp_suite_sim + ! !--- land_iau_nml + ! do_land_iau, land_iau_delthrs, land_iau_inc_files, & + ! land_iau_fhrs, land_iau_filter_increments, lsoil_incr, & + ! land_iau_upd_stc, land_iau_upd_slc, & + ! land_iau_do_stcsmc_adjustment, land_iau_min_T_increment + !--- other parameters integer :: nctp = 0 !< number of cloud types in CS scheme @@ -6333,6 +6388,18 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & endif !--- END CODE FROM GLOOPB +! !---Land IAU Settings +! Model%do_land_iau = do_land_iau +! Model%iau_delthrs = land_iau_delthrs +! Model%iau_inc_files = land_iau_inc_files +! Model%iaufhrs = land_iau_fhrs +! Model%iau_filter_increments = land_iau_filter_increments +! Model%lsoil_incr = lsoil_incr +! Model%upd_stc = land_iau_upd_stc +! Model%upd_slc = land_iau_upd_slc +! Model%do_stcsmc_adjustment = land_iau_do_stcsmc_adjustment +! Model%min_T_increment = land_iau_min_T_increment + call Model%print () end subroutine control_initialize diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 5249257f..9bee127e 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2403,6 +2403,24 @@ type = real kind = kind_phys active = (do_fire_coupling) +[land_iau_data] + standard_name = land_data_assimilation_data + long_name = land data assimilation data + units = mixed + dimensions = () + type = land_iau_external_data_type +[land_iau_control] + standard_name = land_data_assimilation_control + long_name = land data assimilation control + units = mixed + dimensions = () + type = land_iau_control_type +[land_iau_state] + standard_name = land_data_assimilation_interpolated_data + long_name = land data assimilation space- and time-interpolated + units = mixed + dimensions = () + type = land_iau_state_type ######################################################################## [ccpp-table-properties] @@ -10163,7 +10181,7 @@ dependencies = hooks/machine.F,hooks/physcons.F90 dependencies = Radiation/RRTMG/radlw_param.f,Radiation/RRTMG/radsw_param.f dependencies = photochem/module_ozphys.F90,photochem/module_h2ophys.F90 - dependencies = MP/GFDL/GFDL_parse_tracers.F90 + dependencies = SFC_Models/Land/Noahmp/lnd_iau_mod.F90,MP/GFDL/GFDL_parse_tracers.F90 dependencies = Interstitials/UFS_SCM_NEPTUNE/GFS_ccpp_suite_sim_pre.F90 [ccpp-arg-table] From 9c0b33cec3c3f121970aed4f79846bdaf205831b Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 5 Feb 2025 10:23:06 -0500 Subject: [PATCH 2/8] add physical constants to be passed to Thompson MP --- ccpp/physics | 2 +- scm/src/scm_physical_constants.F90 | 6 +++++- scm/src/scm_physical_constants.meta | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 74a0a5d5..22a9d526 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 74a0a5d5167821c79759fce756a12bef0b08df80 +Subproject commit 22a9d526b3f850cc5ab9ca4ba3c580ce07328288 diff --git a/scm/src/scm_physical_constants.F90 b/scm/src/scm_physical_constants.F90 index 5e4c6eda..9a795a84 100644 --- a/scm/src/scm_physical_constants.F90 +++ b/scm/src/scm_physical_constants.F90 @@ -16,6 +16,7 @@ module scm_physical_constants real(kind=dp),parameter:: con_omega =7.2921e-5 real(kind=dp),parameter:: con_p0 =1.01325e+5 + real(kind=dp),parameter:: con_rgas =8.314472_dp real(kind=dp),parameter:: con_rd =2.8705e+2 real(kind=dp),parameter:: con_rv =4.6150e+2 real(kind=dp),parameter:: con_cp =1.0046e+3 @@ -37,7 +38,10 @@ module scm_physical_constants real(kind=dp),parameter:: con_epsm1 =con_rd/con_rv - 1._dp real(kind=dp),parameter:: con_1ovg =1._dp/con_g - real(kind=dp),parameter:: karman = 0.4_dp + real(kind=dp),parameter:: con_avgd =6.0221415e23_dp + real(kind=dp),parameter:: con_amd =28.9644_dp !< molecular wght of dry air (\f$g/mol\f$) + real(kind=dp),parameter:: con_amw =18.0154_dp + real(kind=dp),parameter:: karman =0.4_dp real(kind=dp),parameter:: cimin =0.15 !> minimum rain amount diff --git a/scm/src/scm_physical_constants.meta b/scm/src/scm_physical_constants.meta index b54eaf0c..7a7c2cd2 100644 --- a/scm/src/scm_physical_constants.meta +++ b/scm/src/scm_physical_constants.meta @@ -285,4 +285,32 @@ units = K dimensions = () type = real + kind = kind_phys +[con_rgas] + standard_name = molar_gas_constant + long_name = universal ideal molar gas constant + units = J K-1 mol-1 + dimensions = () + type = real + kind = kind_phys +[con_avgd] + standard_name = avogadro_consant + long_name = Avogadro constant + units = mol-1 + dimensions = () + type = real + kind = kind_phys +[con_amd] + standard_name = molecular_weight_of_dry_air + long_name = molecular weight of dry air + units = g mol-1 + dimensions = () + type = real + kind = kind_phys +[con_amw] + standard_name = molecular_weight_of_water_vapor + long_name = molecular weight of water vapor + units = g mol-1 + dimensions = () + type = real kind = kind_phys \ No newline at end of file From 75186ee2c623304c2c4a75ac028de51cca7ef850 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 5 Feb 2025 11:19:49 -0500 Subject: [PATCH 3/8] updates corresponding to fv3atm PR#883 --- ccpp/physics | 2 +- scm/src/GFS_typedefs.F90 | 183 +++++++++++++++++++++----------------- scm/src/GFS_typedefs.meta | 35 +++++++- 3 files changed, 132 insertions(+), 88 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 22a9d526..137dea01 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 22a9d526b3f850cc5ab9ca4ba3c580ce07328288 +Subproject commit 137dea015e408e5b09974b7e101776f3d65ba28f diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index ba3e5d3b..eaa64534 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -656,6 +656,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: max_fplume (:) => null() !< maximum plume rise level real (kind=kind_phys), pointer :: uspdavg (:) => null() !< BL average wind speed real (kind=kind_phys), pointer :: hpbl_thetav (:) => null() !< BL depth parcel method + real (kind=kind_phys), pointer :: rho_dry (:,:) => null() !< dry air density 3D array !--- hourly fire potential index real (kind=kind_phys), pointer :: rrfs_hwp (:) => null() !< hourly fire potential index real (kind=kind_phys), pointer :: rrfs_hwp_ave (:) => null() !< *Average* hourly fire potential index @@ -1215,6 +1216,9 @@ module GFS_typedefs integer :: ichoice = 0 !< flag for closure of C3/GF deep convection integer :: ichoicem = 13!< flag for closure of C3/GF mid convection integer :: ichoice_s = 3 !< flag for closure of C3/GF shallow convection + integer :: conv_cf_opt !< option for convection scheme cloud fraction computation + !< 0: Chaboureau-Bechtold + !< 1: Xu-Randall integer :: nmtvr !< number of topographic variables such as variance etc !< used in the GWD parameterization - 10 more added if @@ -1559,6 +1563,7 @@ module GFS_typedefs real(kind=kind_phys) :: dust_alpha !< alpha parameter for fengsha dust scheme real(kind=kind_phys) :: dust_gamma !< gamma parameter for fengsha dust scheme real(kind=kind_phys) :: wetdep_ls_alpha !< alpha parameter for wet deposition + real(kind=kind_phys) :: plume_alpha !< alpha parameter for plumerise scheme integer :: ebb_dcycle !< 1:retro; 2:forecast of fire emission integer :: seas_opt integer :: dust_opt @@ -1572,6 +1577,7 @@ module GFS_typedefs integer :: plumerisefire_frq integer :: n_dbg_lines integer :: smoke_forecast + logical :: add_fire_moist_flux ! Flag to add moisture fluxes based on PM2.5 emissions logical :: aero_ind_fdb ! WFA/IFA indirect logical :: aero_dir_fdb ! smoke/dust direct logical :: rrfs_smoke_debug @@ -2324,7 +2330,7 @@ subroutine sfcprop_create (Sfcprop, Model) class(GFS_sfcprop_type) :: Sfcprop type(GFS_control_type), intent(in) :: Model integer :: IM - + character(len=512) :: errmsg integer :: errflg @@ -2379,12 +2385,12 @@ subroutine sfcprop_create (Sfcprop, Model) allocate (Sfcprop%hprime (IM,Model%nmtvr)) allocate (Sfcprop%dust12m_in (IM,12,5)) allocate (Sfcprop%smoke_RRFS(IM,24,2)) - allocate (Sfcprop%smoke2d_RRFS(IM,4)) + allocate (Sfcprop%smoke2d_RRFS(IM,5)) allocate (Sfcprop%emi_in (IM,1)) - allocate(Sfcprop%albdirvis_lnd (IM)) - allocate(Sfcprop%albdirnir_lnd (IM)) - allocate(Sfcprop%albdifvis_lnd (IM)) - allocate(Sfcprop%albdifnir_lnd (IM)) + allocate (Sfcprop%albdirvis_lnd (IM)) + allocate (Sfcprop%albdirnir_lnd (IM)) + allocate (Sfcprop%albdifvis_lnd (IM)) + allocate (Sfcprop%albdifnir_lnd (IM)) allocate (Sfcprop%emis_lnd (IM)) allocate (Sfcprop%emis_ice (IM)) allocate (Sfcprop%emis_wat (IM)) @@ -2618,14 +2624,14 @@ subroutine sfcprop_create (Sfcprop, Model) end if if (Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noahmp .or. & (Model%lkm>0 .and. Model%iopt_lake==Model%iopt_lake_clm)) then - allocate(Sfcprop%raincprv (IM)) - allocate(Sfcprop%rainncprv (IM)) + allocate (Sfcprop%raincprv (IM)) + allocate (Sfcprop%rainncprv (IM)) Sfcprop%raincprv = clear_val Sfcprop%rainncprv = clear_val if (Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noahmp) then - allocate(Sfcprop%iceprv (IM)) - allocate(Sfcprop%snowprv (IM)) - allocate(Sfcprop%graupelprv(IM)) + allocate (Sfcprop%iceprv (IM)) + allocate (Sfcprop%snowprv (IM)) + allocate (Sfcprop%graupelprv(IM)) Sfcprop%iceprv = clear_val Sfcprop%snowprv = clear_val Sfcprop%graupelprv = clear_val @@ -2704,11 +2710,11 @@ subroutine sfcprop_create (Sfcprop, Model) Sfcprop%smoiseq = clear_val Sfcprop%zsnsoxy = clear_val - allocate(Sfcprop%draincprv (IM)) - allocate(Sfcprop%drainncprv (IM)) - allocate(Sfcprop%diceprv (IM)) - allocate(Sfcprop%dsnowprv (IM)) - allocate(Sfcprop%dgraupelprv(IM)) + allocate (Sfcprop%draincprv (IM)) + allocate (Sfcprop%drainncprv (IM)) + allocate (Sfcprop%diceprv (IM)) + allocate (Sfcprop%dsnowprv (IM)) + allocate (Sfcprop%dgraupelprv(IM)) Sfcprop%draincprv = clear_val Sfcprop%drainncprv = clear_val @@ -2719,11 +2725,11 @@ subroutine sfcprop_create (Sfcprop, Model) endif if (Model%do_myjsfc .or. Model%do_myjpbl) then - allocate(Sfcprop%z0base(IM)) + allocate (Sfcprop%z0base(IM)) Sfcprop%z0base = clear_val end if - allocate(Sfcprop%semisbase(IM)) + allocate (Sfcprop%semisbase(IM)) Sfcprop%semisbase = clear_val if (Model%lsm == Model%lsm_ruc) then @@ -2807,29 +2813,29 @@ subroutine sfcprop_create (Sfcprop, Model) ! CLM Lake Model variables if (Model%lkm/=0 .and. Model%iopt_lake==Model%iopt_lake_clm) then - allocate(Sfcprop%lake_t2m(IM)) - allocate(Sfcprop%lake_q2m(IM)) - allocate(Sfcprop%lake_albedo(IM)) - allocate(Sfcprop%input_lakedepth(IM)) - allocate(Sfcprop%lake_h2osno2d(IM)) - allocate(Sfcprop%lake_sndpth2d(IM)) - allocate(Sfcprop%lake_snl2d(IM)) - allocate(Sfcprop%lake_snow_z3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_snow_dz3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_snow_zi3d(IM,Model%nlevsnowsoil_clm_lake)) - allocate(Sfcprop%lake_h2osoi_vol3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_h2osoi_liq3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_h2osoi_ice3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_tsfc(IM)) - allocate(Sfcprop%lake_t_soisno3d(IM,Model%nlevsnowsoil1_clm_lake)) - allocate(Sfcprop%lake_t_lake3d(IM,Model%nlevlake_clm_lake)) - allocate(Sfcprop%lake_savedtke12d(IM)) - allocate(Sfcprop%lake_icefrac3d(IM,Model%nlevlake_clm_lake)) - allocate(Sfcprop%lake_rho0(IM)) - allocate(Sfcprop%lake_ht(IM)) - allocate(Sfcprop%lake_is_salty(IM)) - allocate(Sfcprop%lake_cannot_freeze(IM)) - allocate(Sfcprop%clm_lake_initialized(IM)) + allocate (Sfcprop%lake_t2m(IM)) + allocate (Sfcprop%lake_q2m(IM)) + allocate (Sfcprop%lake_albedo(IM)) + allocate (Sfcprop%input_lakedepth(IM)) + allocate (Sfcprop%lake_h2osno2d(IM)) + allocate (Sfcprop%lake_sndpth2d(IM)) + allocate (Sfcprop%lake_snl2d(IM)) + allocate (Sfcprop%lake_snow_z3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_snow_dz3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_snow_zi3d(IM,Model%nlevsnowsoil_clm_lake)) + allocate (Sfcprop%lake_h2osoi_vol3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_h2osoi_liq3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_h2osoi_ice3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_tsfc(IM)) + allocate (Sfcprop%lake_t_soisno3d(IM,Model%nlevsnowsoil1_clm_lake)) + allocate (Sfcprop%lake_t_lake3d(IM,Model%nlevlake_clm_lake)) + allocate (Sfcprop%lake_savedtke12d(IM)) + allocate (Sfcprop%lake_icefrac3d(IM,Model%nlevlake_clm_lake)) + allocate (Sfcprop%lake_rho0(IM)) + allocate (Sfcprop%lake_ht(IM)) + allocate (Sfcprop%lake_is_salty(IM)) + allocate (Sfcprop%lake_cannot_freeze(IM)) + allocate (Sfcprop%clm_lake_initialized(IM)) Sfcprop%lake_t2m = clear_val Sfcprop%lake_q2m = clear_val @@ -2895,7 +2901,7 @@ subroutine sfcprop_create (Sfcprop, Model) Sfcprop%evap_fire = zero Sfcprop%smoke_fire = zero endif - + ! land iau control setting call land_iau_mod_set_control(Sfcprop%land_iau_control, & Model%fn_nml, Model%input_nml_file, Model%me, Model%master, & @@ -3211,7 +3217,7 @@ subroutine coupling_create (Coupling, Model) end if if(Model%progsigma)then - allocate(Coupling%dqdt_qmicro (IM,Model%levs)) + allocate (Coupling%dqdt_qmicro (IM,Model%levs)) Coupling%dqdt_qmicro = clear_val endif @@ -3277,6 +3283,7 @@ subroutine coupling_create (Coupling, Model) allocate (Coupling%min_fplume(IM)) allocate (Coupling%max_fplume(IM)) allocate (Coupling%uspdavg(IM)) + allocate (Coupling%rho_dry (IM,Model%levs)) allocate (Coupling%hpbl_thetav(IM)) allocate (Coupling%rrfs_hwp (IM)) allocate (Coupling%rrfs_hwp_ave (IM)) @@ -3289,6 +3296,7 @@ subroutine coupling_create (Coupling, Model) Coupling%min_fplume = clear_val Coupling%max_fplume = clear_val Coupling%uspdavg = clear_val + Coupling%rho_dry = clear_val Coupling%hpbl_thetav = clear_val Coupling%rrfs_hwp = clear_val Coupling%rrfs_hwp_ave = clear_val @@ -3757,6 +3765,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: hwrf_samfdeep = .false. !< flag for HWRF SAMF deepcnv scheme logical :: hwrf_samfshal = .false. !< flag for HWRF SAMF shalcnv scheme logical :: progsigma = .false. !< flag for prognostic updraft area fraction closure in saSAS or Unified conv. + integer :: conv_cf_opt = 0 !< option for convection scheme cloud fraction computation logical :: do_mynnedmf = .false. !< flag for MYNN-EDMF logical :: do_mynnsfclay = .false. !< flag for MYNN Surface Layer Scheme ! DH* TODO - move to MYNN namelist section @@ -3993,6 +4002,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: dust_alpha = 0. real(kind=kind_phys) :: dust_gamma = 0. real(kind=kind_phys) :: wetdep_ls_alpha = 0.5 + real(kind=kind_phys) :: plume_alpha = 0.05 integer :: dust_moist_opt = 1 ! fecan :1 else shao integer :: ebb_dcycle = 1 ! 1:retro; 2:forecast integer :: seas_opt = 2 @@ -4003,10 +4013,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: extended_sd_diags = .false. integer :: wetdep_ls_opt = 1 logical :: do_plumerise = .false. + logical :: add_fire_moist_flux = .false. integer :: addsmoke_flag = 1 integer :: plumerisefire_frq = 60 integer :: n_dbg_lines = 3 - integer :: smoke_forecast = 0 ! RRFS-sd read in ebb_smoke + integer :: smoke_forecast = 2 ! RRFS-sd read in ebb_smoke logical :: aero_ind_fdb = .false. ! RRFS-sd wfa/ifa emission logical :: aero_dir_fdb = .false. ! RRFS-sd smoke/dust radiation feedback logical :: rrfs_smoke_debug = .false. ! RRFS-sd plumerise debug @@ -4150,7 +4161,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & betadcu,h2o_phys, pdfcld, shcnvcw, redrag, hybedmf, satmedmf,& shinhong, do_ysu, dspheat, lheatstrg, lseaspray, cnvcld, & xr_cnvcld, random_clds, shal_cnv, imfshalcnv, imfdeepcnv, & - isatmedmf, do_deep, jcap, & + isatmedmf, conv_cf_opt, do_deep, jcap, & cs_parm, flgmin, cgwf, ccwf, cdmbgwd, alpha_fd, & psl_gwd_dx_factor, & sup, ctei_rm, crtrh, & @@ -4210,6 +4221,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & rrfs_smoke_debug, do_plumerise, plumerisefire_frq, & addsmoke_flag, enh_mix, mix_chem, smoke_dir_fdb_coef, & do_smoke_transport,smoke_conv_wet_coef,n_dbg_lines, & + add_fire_moist_flux, plume_alpha, & !--- C3/GF closures ichoice,ichoicem,ichoice_s, & !--- (DFI) time ranges with radar-prescribed microphysics tendencies @@ -4258,7 +4270,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- read in the namelist #ifdef INTERNAL_FILE_NML ! allocate required to work around GNU compiler bug 100886 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100886 - allocate(Model%input_nml_file, mold=input_nml_file) + allocate (Model%input_nml_file, mold=input_nml_file) Model%input_nml_file => input_nml_file read(Model%input_nml_file, nml=gfs_physics_nml) ! Set length (number of lines) in namelist for internal reads @@ -4424,11 +4436,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%naux2d = naux2d Model%naux3d = naux3d if (Model%naux2d>0) then - allocate(Model%aux2d_time_avg(1:naux2d)) + allocate (Model%aux2d_time_avg(1:naux2d)) Model%aux2d_time_avg(1:naux2d) = aux2d_time_avg(1:naux2d) end if if (Model%naux3d>0) then - allocate(Model%aux3d_time_avg(1:naux3d)) + allocate (Model%aux3d_time_avg(1:naux3d)) Model%aux3d_time_avg(1:naux3d) = aux3d_time_avg(1:naux3d) end if if (any(aux2d_time_avg) .or. any(aux3d_time_avg)) then @@ -4448,8 +4460,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nx = nx Model%ny = ny Model%levs = levs - allocate(Model%ak(1:size(ak))) - allocate(Model%bk(1:size(bk))) + allocate (Model%ak(1:size(ak))) + allocate (Model%bk(1:size(bk))) Model%ak = ak Model%bk = bk Model%levsp1 = Model%levs + 1 @@ -4459,20 +4471,20 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lonr = gnx ! number longitudinal points Model%latr = gny ! number of latitudinal points from pole to pole Model%nblks = size(blksz) - allocate(Model%blksz(1:Model%nblks)) + allocate (Model%blksz(1:Model%nblks)) Model%blksz = blksz Model%ncols = sum(Model%blksz) ! DH* Model%nchunks = size(blksz) - allocate(Model%chunk_begin(Model%nchunks)) - allocate(Model%chunk_end(Model%nchunks)) + allocate (Model%chunk_begin(Model%nchunks)) + allocate (Model%chunk_end(Model%nchunks)) Model%chunk_begin(1) = 1 Model%chunk_end(1) = Model%chunk_begin(1) + blksz(1) - 1 do i=2,Model%nchunks Model%chunk_begin(i) = Model%chunk_end(i-1) + 1 Model%chunk_end(i) = Model%chunk_begin(i) + blksz(i) - 1 end do - + !--- coupling parameters Model%cplflx = cplflx Model%cplice = cplice @@ -4505,6 +4517,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%dust_alpha = dust_alpha Model%dust_gamma = dust_gamma Model%wetdep_ls_alpha = wetdep_ls_alpha + Model%plume_alpha = plume_alpha Model%ebb_dcycle = ebb_dcycle Model%seas_opt = seas_opt Model%dust_opt = dust_opt @@ -4517,6 +4530,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%n_dbg_lines = n_dbg_lines Model%plumerisefire_frq = plumerisefire_frq Model%addsmoke_flag = addsmoke_flag + Model%add_fire_moist_flux = add_fire_moist_flux Model%smoke_forecast = smoke_forecast Model%aero_ind_fdb = aero_ind_fdb Model%aero_dir_fdb = aero_dir_fdb @@ -5050,6 +5064,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%imfdeepcnv = imfdeepcnv Model%isatmedmf = isatmedmf Model%do_deep = do_deep + Model%conv_cf_opt = conv_cf_opt Model%nmtvr = nmtvr Model%jcap = jcap Model%flgmin = flgmin @@ -5213,16 +5228,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%n_var_spp = n_var_spp if (Model%lndp_type/=0) then - allocate(Model%lndp_var_list(Model%n_var_lndp)) - allocate(Model%lndp_prt_list(Model%n_var_lndp)) + allocate (Model%lndp_var_list(Model%n_var_lndp)) + allocate (Model%lndp_prt_list(Model%n_var_lndp)) Model%lndp_var_list(:) = '' Model%lndp_prt_list(:) = clear_val end if if (Model%do_spp) then - allocate(Model%spp_var_list(Model%n_var_spp)) - allocate(Model%spp_prt_list(Model%n_var_spp)) - allocate(Model%spp_stddev_cutoff(Model%n_var_spp)) + allocate (Model%spp_var_list(Model%n_var_spp)) + allocate (Model%spp_prt_list(Model%n_var_spp)) + allocate (Model%spp_stddev_cutoff(Model%n_var_spp)) Model%spp_var_list(:) = '' Model%spp_prt_list(:) = clear_val Model%spp_stddev_cutoff(:) = clear_val @@ -5230,7 +5245,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- cellular automata options ! force namelist constsitency - allocate(Model%vfact_ca(levs)) + allocate (Model%vfact_ca(levs)) if ( .not. ca_global ) nca_g=0 if ( .not. ca_sgs ) nca=0 @@ -5320,7 +5335,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ntdust = get_tracer_index(Model%tracer_names, 'dust', Model%me, Model%master, Model%debug) Model%ntcoarsepm = get_tracer_index(Model%tracer_names, 'coarsepm', Model%me, Model%master, Model%debug) endif - !--- initialize parameters for atmospheric chemistry tracers call Model%init_chemistry(tracer_types) @@ -5359,7 +5373,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nprocess = Model%index_of_process_photochem ! List which processes should be summed as photochemical: - allocate(Model%is_photochem(Model%nprocess)) + allocate (Model%is_photochem(Model%nprocess)) Model%is_photochem = .false. Model%is_photochem(Model%index_of_process_prod_loss) = .true. Model%is_photochem(Model%index_of_process_ozmix) = .true. @@ -5373,7 +5387,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Last index of outermost dimension of dtend Model%ndtend = 0 - allocate(Model%dtidx(Model%ntracp100,Model%nprocess)) + allocate (Model%dtidx(Model%ntracp100,Model%nprocess)) Model%dtidx = -99 if(Model%ntchm>0) then @@ -5796,7 +5810,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & endif Model%jdat(1:8) = jdat(1:8) - allocate(Model%si(Model%levs+1)) + allocate (Model%si(Model%levs+1)) !--- Define sigma level for radiation initialization !--- The formula converting hybrid sigma pressure coefficients to sigma coefficients follows Eckermann (2009, MWR) !--- ps is replaced with p0. The value of p0 uses that in http://www.emc.ncep.noaa.gov/officenotes/newernotes/on461.pdf @@ -6537,7 +6551,7 @@ subroutine control_scavenging_initialize(Model, fscav) real(kind=kind_phys) :: tem !--- begin - allocate(Model%fscav(Model%ntchm)) + allocate (Model%fscav(Model%ntchm)) if (Model%ntchm > 0) then !--- set default as no scavenging @@ -6656,6 +6670,7 @@ subroutine control_print(Model) print *, 'dust_alpha : ',Model%dust_alpha print *, 'dust_gamma : ',Model%dust_gamma print *, 'wetdep_ls_alpha : ',Model%wetdep_ls_alpha + print *, 'plume_alpha : ',Model%plume_alpha print *, 'ebb_dcycle : ',Model%ebb_dcycle print *, 'seas_opt : ',Model%seas_opt print *, 'dust_opt : ',Model%dust_opt @@ -6666,6 +6681,7 @@ subroutine control_print(Model) print *, 'wetdep_ls_opt : ',Model%wetdep_ls_opt print *, 'do_plumerise : ',Model%do_plumerise print *, 'plumerisefire_frq: ',Model%plumerisefire_frq + print *, 'add_fire_moist_flux: ',Model%add_fire_moist_flux print *, 'addsmoke_flag : ',Model%addsmoke_flag print *, 'smoke_forecast : ',Model%smoke_forecast print *, 'aero_ind_fdb : ',Model%aero_ind_fdb @@ -6944,6 +6960,7 @@ subroutine control_print(Model) print *, ' imfshalcnv : ', Model%imfshalcnv print *, ' imfdeepcnv : ', Model%imfdeepcnv print *, ' do_deep : ', Model%do_deep + print *, ' conv_cf_opt : ', Model%conv_cf_opt print *, ' nmtvr : ', Model%nmtvr print *, ' jcap : ', Model%jcap print *, ' cs_parm : ', Model%cs_parm @@ -7302,11 +7319,11 @@ subroutine tbd_create (Tbd, Model) nullify(Tbd%dfi_radar_tten) nullify(Tbd%cap_suppress) if(Model%num_dfi_radar>0) then - allocate(Tbd%dfi_radar_tten(IM,Model%levs,Model%num_dfi_radar)) + allocate (Tbd%dfi_radar_tten(IM,Model%levs,Model%num_dfi_radar)) Tbd%dfi_radar_tten = -20.0 Tbd%dfi_radar_tten(:,1,:) = zero if(Model%do_cap_suppress) then - allocate(Tbd%cap_suppress(IM,Model%num_dfi_radar)) + allocate (Tbd%cap_suppress(IM,Model%num_dfi_radar)) Tbd%cap_suppress(:,:) = zero endif endif @@ -7382,28 +7399,28 @@ subroutine tbd_create (Tbd, Model) Tbd%hpbl = clear_val if (Model%imfdeepcnv == Model%imfdeepcnv_gf .or. Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke .or. Model%imfdeepcnv == Model%imfdeepcnv_samf .or. Model%imfshalcnv == Model%imfshalcnv_samf .or. Model%imfdeepcnv == Model%imfdeepcnv_c3 .or. Model%imfshalcnv == Model%imfshalcnv_c3) then - allocate(Tbd%prevsq(IM, Model%levs)) + allocate (Tbd%prevsq(IM, Model%levs)) Tbd%prevsq = clear_val endif if (Model%imfdeepcnv .ge. 0 .or. Model%imfshalcnv .ge. 0) then - allocate(Tbd%ud_mf(IM, Model%levs)) + allocate (Tbd%ud_mf(IM, Model%levs)) Tbd%ud_mf = zero endif if (Model%imfdeepcnv == Model%imfdeepcnv_gf .or. Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke .or. Model%imfdeepcnv == Model%imfdeepcnv_c3) then - allocate(Tbd%forcet(IM, Model%levs)) - allocate(Tbd%forceq(IM, Model%levs)) - allocate(Tbd%prevst(IM, Model%levs)) + allocate (Tbd%forcet(IM, Model%levs)) + allocate (Tbd%forceq(IM, Model%levs)) + allocate (Tbd%prevst(IM, Model%levs)) Tbd%forcet = clear_val Tbd%forceq = clear_val Tbd%prevst = clear_val end if if (Model%imfdeepcnv == Model%imfdeepcnv_gf .or. Model%imfdeepcnv == Model%imfdeepcnv_c3) then - allocate(Tbd%cactiv(IM)) - allocate(Tbd%cactiv_m(IM)) - allocate(Tbd%aod_gf(IM)) + allocate (Tbd%cactiv(IM)) + allocate (Tbd%cactiv_m(IM)) + allocate (Tbd%aod_gf(IM)) Tbd%cactiv = zero Tbd%cactiv_m = zero Tbd%aod_gf = zero @@ -7713,8 +7730,8 @@ subroutine allocate_dtend_labels_and_causes(Model) type(GFS_control_type), intent(inout) :: Model integer :: i - allocate(Model%dtend_var_labels(Model%ntracp100)) - allocate(Model%dtend_process_labels(Model%nprocess)) + allocate (Model%dtend_var_labels(Model%ntracp100)) + allocate (Model%dtend_process_labels(Model%nprocess)) Model%dtend_var_labels(1)%name = 'unallocated' Model%dtend_var_labels(1)%desc = 'unallocated tracer' @@ -7786,7 +7803,7 @@ subroutine diag_create (Diag, Model) IM = Model%ncols if(Model%print_diff_pgr) then - allocate(Diag%old_pgr(IM)) + allocate (Diag%old_pgr(IM)) Diag%old_pgr = clear_val endif @@ -7923,7 +7940,7 @@ subroutine diag_create (Diag, Model) !--- 3D diagnostics if (Model%ldiag3d) then - allocate(Diag%dtend(IM,Model%levs,Model%ndtend)) + allocate (Diag%dtend(IM,Model%levs,Model%ndtend)) Diag%dtend = clear_val if (Model%qdiag3d) then allocate (Diag%upd_mf (IM,Model%levs)) @@ -7931,10 +7948,10 @@ subroutine diag_create (Diag, Model) allocate (Diag%det_mf (IM,Model%levs)) endif if (Model%oz_phys_2015) then - allocate(Diag%do3_dt_prd( IM, Model%levs)) - allocate(Diag%do3_dt_ozmx(IM, Model%levs)) - allocate(Diag%do3_dt_temp(IM, Model%levs)) - allocate(Diag%do3_dt_ohoz(IM, Model%levs)) + allocate (Diag%do3_dt_prd( IM, Model%levs)) + allocate (Diag%do3_dt_ozmx(IM, Model%levs)) + allocate (Diag%do3_dt_temp(IM, Model%levs)) + allocate (Diag%do3_dt_ohoz(IM, Model%levs)) endif endif diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 9bee127e..ce18e5eb 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -960,7 +960,7 @@ standard_name = emission_smoke_prvd_RRFS long_name = emission fire RRFS daily units = various - dimensions = (horizontal_dimension,4) + dimensions = (horizontal_dimension,5) type = real kind = kind_phys active = (do_smoke_coupling) @@ -2383,7 +2383,7 @@ standard_name = kinematic_surface_upward_sensible_heat_flux_of_fire long_name = kinematic surface upward sensible heat flux of fire units = K m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_fire_coupling) @@ -2391,7 +2391,7 @@ standard_name = surface_upward_specific_humidity_flux_of_fire long_name = kinematic surface upward latent heat flux of fire units = kg kg-1 m s-1 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_fire_coupling) @@ -2399,7 +2399,7 @@ standard_name = smoke_emission_of_fire long_name = smoke emission of fire units = kg m-2 - dimensions = (horizontal_loop_extent) + dimensions = (horizontal_dimension) type = real kind = kind_phys active = (do_fire_coupling) @@ -3258,6 +3258,14 @@ type = real kind = kind_phys active = (do_smoke_coupling) +[rho_dry] + standard_name = dry_air_density + long_name = dry air density + units = kg m-3 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys + active = (do_smoke_coupling) [uspdavg] standard_name = mean_wind_speed_in_boundary_layer long_name = average wind speed within the boundary layer @@ -4971,6 +4979,12 @@ units = flag dimensions = () type = logical +[add_fire_moist_flux] + standard_name = flag_for_fire_moisture_flux + long_name = flag to add fire moisture flux + units = flag + dimensions = () + type = logical [isncond_opt] standard_name = control_for_soil_thermal_conductivity_option_in_ruc_lsm long_name = control for soil thermal conductivity option in RUC land surface model @@ -5673,6 +5687,12 @@ units = none dimensions = () type = integer +[conv_cf_opt] + standard_name = option_for_convection_scheme_cloud_fraction_computation + long_name = option for convection scheme cloud fraction computation + units = flag + dimensions = () + type = integer [nmtvr] standard_name = number_of_statistical_measures_of_subgrid_orography long_name = number of topographic variables in GWD @@ -6898,6 +6918,13 @@ dimensions = () type = real kind = kind_phys +[plume_alpha] + standard_name = alpha_for_plumerise_scheme + long_name = alpha paramter for plumerise scheme + units = none + dimensions = () + type = real + kind = kind_phys [ebb_dcycle] standard_name = control_for_diurnal_cycle_of_biomass_burning_emissions long_name = rrfs smoke diurnal cycle option From 31ba31c726bea45e7e9b03586f3cc781569fafda Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 5 Feb 2025 13:08:35 -0500 Subject: [PATCH 4/8] update ccpp/physics submodule --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 137dea01..7402f6f6 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 137dea015e408e5b09974b7e101776f3d65ba28f +Subproject commit 7402f6f6a5fbf8a2e9482b8390ef9080e8c45b22 From 0527047363e3504ef8cd1404c5a008bdb3d07cde Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 5 Feb 2025 13:25:17 -0500 Subject: [PATCH 5/8] changes to work with fv3atm PR#898 --- ccpp/physics | 2 +- ccpp/physics_namelists/input_HRRR_gf.nml | 2 +- scm/src/GFS_typedefs.F90 | 18 +++++++++++------- scm/src/GFS_typedefs.meta | 15 +++++++++++---- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 7402f6f6..34487517 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 7402f6f6a5fbf8a2e9482b8390ef9080e8c45b22 +Subproject commit 34487517cdda891012e31d1cbf39579df95e054c diff --git a/ccpp/physics_namelists/input_HRRR_gf.nml b/ccpp/physics_namelists/input_HRRR_gf.nml index 427c1c96..5a83cd33 100644 --- a/ccpp/physics_namelists/input_HRRR_gf.nml +++ b/ccpp/physics_namelists/input_HRRR_gf.nml @@ -117,7 +117,7 @@ sfclay_compute_flux = .true. shal_cnv = .false. smoke_conv_wet_coef = 0.5, 0.5, 0.5 - smoke_forecast = 1 + hwp_method = 1 swhtr = .true. thsfc_loc = .false. trans_trac = .true. diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index eaa64534..cf0a1a28 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -1576,8 +1576,9 @@ module GFS_typedefs integer :: addsmoke_flag integer :: plumerisefire_frq integer :: n_dbg_lines - integer :: smoke_forecast + integer :: hwp_method logical :: add_fire_moist_flux ! Flag to add moisture fluxes based on PM2.5 emissions + real(kind=kind_phys) :: sc_factor logical :: aero_ind_fdb ! WFA/IFA indirect logical :: aero_dir_fdb ! smoke/dust direct logical :: rrfs_smoke_debug @@ -4014,10 +4015,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: wetdep_ls_opt = 1 logical :: do_plumerise = .false. logical :: add_fire_moist_flux = .false. + real(kind=kind_phys) :: sc_factor = 1.0 integer :: addsmoke_flag = 1 integer :: plumerisefire_frq = 60 integer :: n_dbg_lines = 3 - integer :: smoke_forecast = 2 ! RRFS-sd read in ebb_smoke + integer :: hwp_method = 2 ! RRFS-sd read in ebb_smoke logical :: aero_ind_fdb = .false. ! RRFS-sd wfa/ifa emission logical :: aero_dir_fdb = .false. ! RRFS-sd smoke/dust radiation feedback logical :: rrfs_smoke_debug = .false. ! RRFS-sd plumerise debug @@ -4059,7 +4061,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: radar_tten_limits(2) = (/ limit_unspecified, limit_unspecified /) integer :: itime -! !> land iau setting read from namelist + ! !> land iau setting read from namelist ! logical :: do_land_iau = .false. ! real(kind=kind_phys) :: land_iau_delthrs = 0 ! character(len=240) :: land_iau_inc_files(7) = '' @@ -4217,11 +4219,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & dust_alpha, dust_gamma, wetdep_ls_alpha, & seas_opt, dust_opt, drydep_opt, coarsepm_settling, & plume_wind_eff,ebb_dcycle, extended_sd_diags, & - wetdep_ls_opt, smoke_forecast, aero_ind_fdb, aero_dir_fdb, & + wetdep_ls_opt, hwp_method, aero_ind_fdb, aero_dir_fdb, & rrfs_smoke_debug, do_plumerise, plumerisefire_frq, & addsmoke_flag, enh_mix, mix_chem, smoke_dir_fdb_coef, & do_smoke_transport,smoke_conv_wet_coef,n_dbg_lines, & - add_fire_moist_flux, plume_alpha, & + add_fire_moist_flux, sc_factor, & !--- C3/GF closures ichoice,ichoicem,ichoice_s, & !--- (DFI) time ranges with radar-prescribed microphysics tendencies @@ -4531,7 +4533,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%plumerisefire_frq = plumerisefire_frq Model%addsmoke_flag = addsmoke_flag Model%add_fire_moist_flux = add_fire_moist_flux - Model%smoke_forecast = smoke_forecast + Model%sc_factor = sc_factor + Model%hwp_method = hwp_method Model%aero_ind_fdb = aero_ind_fdb Model%aero_dir_fdb = aero_dir_fdb Model%rrfs_smoke_debug = rrfs_smoke_debug @@ -6682,8 +6685,9 @@ subroutine control_print(Model) print *, 'do_plumerise : ',Model%do_plumerise print *, 'plumerisefire_frq: ',Model%plumerisefire_frq print *, 'add_fire_moist_flux: ',Model%add_fire_moist_flux + print *, 'sc_factor : ',Model%sc_factor print *, 'addsmoke_flag : ',Model%addsmoke_flag - print *, 'smoke_forecast : ',Model%smoke_forecast + print *, 'hwp_method : ',Model%hwp_method print *, 'aero_ind_fdb : ',Model%aero_ind_fdb print *, 'aero_dir_fdb : ',Model%aero_dir_fdb print *, 'rrfs_smoke_debug : ',Model%rrfs_smoke_debug diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index ce18e5eb..91866136 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -4985,6 +4985,13 @@ units = flag dimensions = () type = logical +[sc_factor] + standard_name = scale_factor_for_wildfire_emissions + long_name = scale factor for wildfire emissions + units = 1 + dimensions = () + type = real + kind = kind_phys [isncond_opt] standard_name = control_for_soil_thermal_conductivity_option_in_ruc_lsm long_name = control for soil thermal conductivity option in RUC land surface model @@ -6997,10 +7004,10 @@ units = index dimensions = () type = integer -[smoke_forecast] - standard_name = do_smoke_forecast - long_name = index for rrfs smoke forecast - units = index +[hwp_method] + standard_name = control_for_HWP_equation + long_name = control for HWP equation + units = 1 dimensions = () type = integer [aero_ind_fdb] From 40e83b4c833fe6fd00566b5056b16538877e60ed Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 5 Feb 2025 14:19:08 -0500 Subject: [PATCH 6/8] update GFS_typedefs for fv3atm PR#899; update ccpp/physics and ccpp/framework submodule pointers --- ccpp/framework | 2 +- ccpp/physics | 2 +- scm/src/GFS_typedefs.F90 | 14 ++++++++++---- scm/src/GFS_typedefs.meta | 14 +++++++++++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ccpp/framework b/ccpp/framework index 0f823272..4102bdb1 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 0f8232724975c13289cad390c9a71fa2c6a9bff4 +Subproject commit 4102bdb14858457ad1e219310d101e41f5897b60 diff --git a/ccpp/physics b/ccpp/physics index 34487517..66e9739d 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 34487517cdda891012e31d1cbf39579df95e054c +Subproject commit 66e9739dde010bf9bf07daf83ea1312f0094eb15 diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index cf0a1a28..96773571 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -800,6 +800,8 @@ module GFS_typedefs !< (yr, mon, day, t-zone, hr, min, sec, mil-sec) integer :: idate(4) !< initial date with different size and ordering !< (hr, mon, day, yr) + logical :: gfs_phys_time_vary_is_init=.false. !< GFS_phys_time_vary interstitial initialization flag + !--- radiation control parameters real(kind=kind_phys) :: fhswr !< frequency for shortwave radiation (secs) real(kind=kind_phys) :: fhlwr !< frequency for longwave radiation (secs) @@ -1026,7 +1028,7 @@ module GFS_typedefs real(kind=kind_phys) :: dt_inner !< time step for the inner loop in s logical :: sedi_semi !< flag for semi Lagrangian sedi of rain integer :: decfl !< deformed CFL factor - logical :: thpsnmp_is_init !< Local scheme initialization flag + logical :: thompson_mp_is_init=.false. !< Local scheme initialization flag !--- GFDL microphysical paramters logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency @@ -1216,6 +1218,7 @@ module GFS_typedefs integer :: ichoice = 0 !< flag for closure of C3/GF deep convection integer :: ichoicem = 13!< flag for closure of C3/GF mid convection integer :: ichoice_s = 3 !< flag for closure of C3/GF shallow convection + logical :: gf_coldstart !< flag for cold start GF integer :: conv_cf_opt !< option for convection scheme cloud fraction computation !< 0: Chaboureau-Bechtold !< 1: Xu-Randall @@ -3996,6 +3999,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: ichoice = 0 !< flag for closure of C3/GF deep convection integer :: ichoicem = 13!< flag for closure of C3/GF mid convection integer :: ichoice_s = 3 !< flag for closure of C3/GF shallow convection + logical :: gf_coldstart = .false. !< flag for cold start GF !-- chem nml variables for RRFS-SD real(kind=kind_phys) :: dust_drylimit_factor = 1.0 @@ -4225,7 +4229,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & do_smoke_transport,smoke_conv_wet_coef,n_dbg_lines, & add_fire_moist_flux, sc_factor, & !--- C3/GF closures - ichoice,ichoicem,ichoice_s, & + ichoice,ichoicem,ichoice_s,gf_coldstart, & !--- (DFI) time ranges with radar-prescribed microphysics tendencies ! and (maybe) convection suppression fh_dfi_radar, radar_tten_limits, do_cap_suppress, & @@ -4237,8 +4241,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! do_land_iau, land_iau_delthrs, land_iau_inc_files, & ! land_iau_fhrs, land_iau_filter_increments, lsoil_incr, & ! land_iau_upd_stc, land_iau_upd_slc, & - ! land_iau_do_stcsmc_adjustment, land_iau_min_T_increment - + ! land_iau_do_stcsmc_adjustment, land_iau_min_T_increment + !--- other parameters integer :: nctp = 0 !< number of cloud types in CS scheme @@ -4549,6 +4553,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ichoice_s = ichoice_s Model%ichoicem = ichoicem Model%ichoice = ichoice + Model%gf_coldstart = gf_coldstart !--- integrated dynamics through earth's atmosphere Model%lsidea = lsidea @@ -6663,6 +6668,7 @@ subroutine control_print(Model) print*,'ichoice_s : ', Model%ichoice_s print*,'ichoicem : ', Model%ichoicem print*,'ichoice : ', Model%ichoice + print*,'gf_coldstart : ', Model%gf_coldstart endif if(model%rrfs_sd) then print *, ' ' diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 91866136..b42dda5d 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -4925,12 +4925,18 @@ units = count dimensions = () type = integer -[thpsnmp_is_init] +[thompson_mp_is_init] standard_name = flag_for_thompson_mp_scheme_initialization long_name = flag carrying scheme initialization status units = flag dimensions = () type = logical +[gfs_phys_time_vary_is_init] + standard_name = flag_for_gfs_phys_time_vary_interstitial_initialization + long_name = flag carrying interstitial initialization status + units = flag + dimensions = () + type = logical [lgfdlmprad] standard_name = flag_for_GFDL_microphysics_radiation_interaction long_name = flag for GFDL microphysics-radiation interaction @@ -5637,6 +5643,12 @@ units = flag dimensions = () type = integer +[gf_coldstart] + standard_name = flag_for_cold_start_gf + long_name = flag to cold start G-F + units = flag + dimensions = () + type = logical [hwrf_samfdeep] standard_name = flag_for_hurricane_specific_code_in_scale_aware_mass_flux_deep_convection long_name = flag for hwrf samfdeepcnv scheme From 1b4daffa9568271eea16bd887fcb386f6410f0e6 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 6 Feb 2025 08:49:58 -0500 Subject: [PATCH 7/8] remove skipped line in GFS_typedefs.F90 --- scm/src/GFS_typedefs.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 96773571..4d4f9408 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -3604,7 +3604,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: dt_inner = -999.0 !< time step for the inner loop logical :: sedi_semi = .false. !< flag for semi Lagrangian sedi of rain integer :: decfl = 8 !< deformed CFL factor - logical :: thpsnmp_is_init = .false. !< Local scheme initialization flag !--- GFDL microphysical parameters logical :: lgfdlmprad = .false. !< flag for GFDLMP radiation interaction From 5bc24e1606eedf3f97f7d0b82bfc0e62d42b4430 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 6 Feb 2025 17:12:38 -0500 Subject: [PATCH 8/8] update ccpp/physics submodule --- ccpp/physics | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics b/ccpp/physics index 66e9739d..ae655559 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 66e9739dde010bf9bf07daf83ea1312f0094eb15 +Subproject commit ae65555961953f00997f1cb098cbf24aee6748d6