From 63c9450f2c4c87d49d4f380c780e06d24295dcaa Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 9 Feb 2024 17:50:44 -0500 Subject: [PATCH 1/3] update for ufs/dev PR#94 --- .gitmodules | 2 +- ccpp/config/ccpp_prebuild_config.py | 1 + ccpp/physics | 2 +- scm/src/GFS_typedefs.F90 | 111 ++++++++++++++---- scm/src/GFS_typedefs.meta | 170 +++++++++++++++++++++++++++- 5 files changed, 256 insertions(+), 30 deletions(-) diff --git a/.gitmodules b/.gitmodules index db0fb33f3..a8006a363 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,7 +7,7 @@ #url = https://github.com/NCAR/ccpp-physics #branch = main url = https://github.com/grantfirl/ccpp-physics - branch = ufs-dev-PR153 + branch = ufs-dev-PR94 [submodule "CMakeModules"] path = CMakeModules url = https://github.com/noaa-emc/CMakeModules diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index d86710b97..41736151a 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -204,6 +204,7 @@ 'ccpp/physics/physics/SFC_Layer/UFS/sfc_nst_post.f90', 'ccpp/physics/physics/SFC_Models/Land/RUC/lsm_ruc.F90', 'ccpp/physics/physics/SFC_Models/SeaIce/CICE/sfc_cice.f', + 'ccpp/physics/physics/SFC_Models/Land/sfc_land.F90', 'ccpp/physics/physics/SFC_Models/Land/Noah/lsm_noah.f', 'ccpp/physics/physics/SFC_Models/Land/Noahmp/noahmpdrv.F90', 'ccpp/physics/physics/SFC_Models/Lake/Flake/flake_driver.F90', diff --git a/ccpp/physics b/ccpp/physics index d8cb45cbf..57763127c 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit d8cb45cbfd252088743a55b2bc2932ad75ea806d +Subproject commit 57763127c01907361fccc5a212082db04cc30f7c diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index a20d73be3..3922c31ef 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -451,15 +451,18 @@ module GFS_typedefs real (kind=kind_phys), pointer :: emanoc (:) => null() !< instantaneous anthro. oc emission !--- Smoke. These 2 arrays are input smoke emission and frp - real (kind=kind_phys), pointer :: ebb_smoke_in(:) => null() !< input smoke emission - real (kind=kind_phys), pointer :: frp_input (:) => null() !< input FRP - + real (kind=kind_phys), pointer :: ebb_smoke_in(:) => null() !< input smoke emission + real (kind=kind_phys), pointer :: frp_output (:) => null() !< output FRP !--- For fire diurnal cycle real (kind=kind_phys), pointer :: fhist (:) => null() !< instantaneous fire coef_bb real (kind=kind_phys), pointer :: coef_bb_dc (:) => null() !< instantaneous fire coef_bb + integer, pointer :: fire_type (:) => null() !< fire type + real (kind=kind_phys), pointer :: peak_hr (:) => null() !< peak hour of fire emissions + real (kind=kind_phys), pointer :: lu_nofire (:) => null() ! null() ! null() !< heat flux from wildfire - real (kind=kind_phys), pointer :: frac_grid_burned_out (:) => null() !< fraction of grid cell burning + real (kind=kind_phys), pointer :: fire_heat_flux (:) => null() !< heat flux from wildfire + real (kind=kind_phys), pointer :: frac_grid_burned (:) => null() !< fraction of grid cell burning !--- For smoke and dust auxiliary inputs real (kind=kind_phys), pointer :: fire_in (:,:) => null() !< fire auxiliary inputs @@ -529,6 +532,20 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dtsfcin_med(:) => null() !< sfc latent heat flux over ocean real (kind=kind_phys), pointer :: dqsfcin_med(:) => null() !< sfc sensible heat flux over ocean real (kind=kind_phys), pointer :: ulwsfcin_med(:) => null() !< sfc upward lw flux over ocean + !--- variables needed for cpllnd = .TRUE. and cpllnd2atm=.TRUE. + real (kind=kind_phys), pointer :: sncovr1_lnd(:) => null() !< sfc snow area fraction over land + real (kind=kind_phys), pointer :: qsurf_lnd(:) => null() !< sfc specific humidity + real (kind=kind_phys), pointer :: evap_lnd(:) => null() !< sfc latent heat flux over land, converted to evaporative flux + real (kind=kind_phys), pointer :: hflx_lnd(:) => null() !< sfc sensible heat flux over land + real (kind=kind_phys), pointer :: ep_lnd(:) => null() !< sfc up pot latent heat flux over land + real (kind=kind_phys), pointer :: t2mmp_lnd(:) => null() !< 2 meter temperature over land + real (kind=kind_phys), pointer :: q2mp_lnd(:) => null() !< 2 meter spec humidity over land + real (kind=kind_phys), pointer :: gflux_lnd(:) => null() !< soil heat flux over land + real (kind=kind_phys), pointer :: runoff_lnd(:) => null() !< surface runoff over land + real (kind=kind_phys), pointer :: drain_lnd(:) => null() !< subsurface runoff over land + real (kind=kind_phys), pointer :: cmm_lnd(:) => null() !< surface drag wind speed for momentum + real (kind=kind_phys), pointer :: chh_lnd(:) => null() !< surface drag mass flux for heat and moisture + real (kind=kind_phys), pointer :: zvfun_lnd(:) => null() !< function of surface roughness length and green vegetation fraction !--- outgoing accumulated quantities real (kind=kind_phys), pointer :: rain_cpl (:) => null() !< total rain precipitation @@ -609,10 +626,6 @@ module GFS_typedefs !--- For fire diurnal cycle real (kind=kind_phys), pointer :: ebu_smoke (:,:) => null() !< 3D ebu array - !--- For smoke and dust optical extinction - real (kind=kind_phys), pointer :: smoke_ext (:,:) => null() !< 3D aod array - real (kind=kind_phys), pointer :: dust_ext (:,:) => null() !< 3D aod array - !--- For MYNN PBL transport of smoke and dust real (kind=kind_phys), pointer :: chem3d (:,:,:) => null() !< 3D aod array real (kind=kind_phys), pointer :: ddvel (:,: ) => null() !< 2D dry deposition velocity @@ -626,6 +639,8 @@ module GFS_typedefs !--- Fire plume rise diagnostics real (kind=kind_phys), pointer :: min_fplume (:) => null() !< minimum plume rise level 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 !--- 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 @@ -734,6 +749,7 @@ module GFS_typedefs logical :: cplaqm !< default no cplaqm collection logical :: cplchm !< default no cplchm collection logical :: cpllnd !< default no cpllnd collection + logical :: cpllnd2atm !< default no lnd->atm coupling logical :: rrfs_sd !< default no rrfs_sd collection logical :: use_cice_alb !< default .false. - i.e. don't use albedo imported from the ice model logical :: cpl_imp_mrg !< default no merge import with internal forcings @@ -1522,6 +1538,7 @@ module GFS_typedefs logical :: do_plumerise integer :: addsmoke_flag integer :: plumerisefire_frq + integer :: n_dbg_lines integer :: smoke_forecast logical :: aero_ind_fdb ! WFA/IFA indirect logical :: aero_dir_fdb ! smoke/dust direct @@ -2678,8 +2695,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%acsnow_land (IM)) allocate (Sfcprop%acsnow_ice (IM)) allocate (Sfcprop%xlaixy (IM)) - allocate (Sfcprop%fire_heat_flux_out (IM)) - allocate (Sfcprop%frac_grid_burned_out (IM)) + allocate (Sfcprop%fire_heat_flux (IM)) + allocate (Sfcprop%frac_grid_burned(IM)) ! Sfcprop%wetness = clear_val @@ -2700,8 +2717,8 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%acsnow_land = clear_val Sfcprop%acsnow_ice = clear_val Sfcprop%xlaixy = clear_val - Sfcprop%fire_heat_flux_out = clear_val - Sfcprop%frac_grid_burned_out = clear_val + Sfcprop%fire_heat_flux = clear_val + Sfcprop%frac_grid_burned= clear_val ! end if @@ -2795,9 +2812,13 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%emseas (IM)) allocate (Sfcprop%emanoc (IM)) allocate (Sfcprop%ebb_smoke_in (IM)) - allocate (Sfcprop%frp_input (IM)) + allocate (Sfcprop%frp_output (IM)) allocate (Sfcprop%fhist (IM)) allocate (Sfcprop%coef_bb_dc(IM)) + allocate (Sfcprop%fire_type (IM)) + allocate (Sfcprop%peak_hr (IM)) + allocate (Sfcprop%lu_nofire (IM)) + allocate (Sfcprop%lu_qfire (IM)) allocate (Sfcprop%fire_in (IM,Model%fire_aux_data_levels)) ! IMPORTANT: This initialization must match rrfs_sd_fill_data @@ -2805,10 +2826,14 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%emseas = clear_val Sfcprop%emanoc = clear_val Sfcprop%ebb_smoke_in = clear_val - Sfcprop%frp_input = clear_val + Sfcprop%frp_output = clear_val Sfcprop%fhist = 1. Sfcprop%coef_bb_dc = clear_val + Sfcprop%fire_type = 0 Sfcprop%fire_in = clear_val + Sfcprop%peak_hr = clear_val + Sfcprop%lu_nofire = clear_val + Sfcprop%lu_qfire = clear_val endif end subroutine sfcprop_create @@ -3031,7 +3056,38 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%slmsk_cpl = clear_val !< pointer to sfcprop%slmsk endif - !-- cellular automata + ! -- Coupling options to retrive land fluxes from external land component + if (Model%cpllnd .and. Model%cpllnd2atm) then + allocate (Coupling%sncovr1_lnd (IM)) + allocate (Coupling%qsurf_lnd (IM)) + allocate (Coupling%evap_lnd (IM)) + allocate (Coupling%hflx_lnd (IM)) + allocate (Coupling%ep_lnd (IM)) + allocate (Coupling%t2mmp_lnd (IM)) + allocate (Coupling%q2mp_lnd (IM)) + allocate (Coupling%gflux_lnd (IM)) + allocate (Coupling%runoff_lnd (IM)) + allocate (Coupling%drain_lnd (IM)) + allocate (Coupling%cmm_lnd (IM)) + allocate (Coupling%chh_lnd (IM)) + allocate (Coupling%zvfun_lnd (IM)) + + Coupling%sncovr1_lnd = clear_val + Coupling%qsurf_lnd = clear_val + Coupling%evap_lnd = clear_val + Coupling%hflx_lnd = clear_val + Coupling%ep_lnd = clear_val + Coupling%t2mmp_lnd = clear_val + Coupling%q2mp_lnd = clear_val + Coupling%gflux_lnd = clear_val + Coupling%runoff_lnd = clear_val + Coupling%drain_lnd = clear_val + Coupling%cmm_lnd = clear_val + Coupling%chh_lnd = clear_val + Coupling%zvfun_lnd = clear_val + end if + + !-- cellular automata allocate (Coupling%condition(IM)) if (Model%do_ca) then allocate (Coupling%ca1 (IM)) @@ -3147,8 +3203,6 @@ subroutine coupling_create (Coupling, IM, Model) if(Model%rrfs_sd) then !--- needed for smoke aerosol option allocate (Coupling%ebu_smoke (IM,Model%levs)) - allocate (Coupling%smoke_ext (IM,Model%levs)) - allocate (Coupling%dust_ext (IM,Model%levs)) allocate (Coupling%chem3d (IM,Model%levs,Model%nchem)) allocate (Coupling%ddvel (IM,Model%ndvel)) allocate (Coupling%wetdpc_flux(IM,Model%nchem)) @@ -3156,11 +3210,11 @@ subroutine coupling_create (Coupling, IM, Model) allocate (Coupling%drydep_flux(IM,Model%ndvel)) allocate (Coupling%min_fplume(IM)) allocate (Coupling%max_fplume(IM)) + allocate (Coupling%uspdavg(IM)) + allocate (Coupling%hpbl_thetav(IM)) allocate (Coupling%rrfs_hwp (IM)) allocate (Coupling%rrfs_hwp_ave (IM)) Coupling%ebu_smoke = clear_val - Coupling%smoke_ext = clear_val - Coupling%dust_ext = clear_val Coupling%chem3d = clear_val Coupling%ddvel = clear_val Coupling%wetdpc_flux = clear_val @@ -3168,6 +3222,8 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%drydep_flux = clear_val Coupling%min_fplume = clear_val Coupling%max_fplume = clear_val + Coupling%uspdavg = clear_val + Coupling%hpbl_thetav = clear_val Coupling%rrfs_hwp = clear_val Coupling%rrfs_hwp_ave = clear_val endif @@ -3272,6 +3328,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: cplaqm = .false. !< default no cplaqm collection logical :: cplchm = .false. !< default no cplchm collection logical :: cpllnd = .false. !< default no cpllnd collection + logical :: cpllnd2atm = .false. !< default no cpllnd2atm coupling logical :: rrfs_sd = .false. !< default no rrfs_sd collection logical :: use_cice_alb = .false. !< default no cice albedo logical :: cpl_imp_mrg = .false. !< default no merge import with internal forcings @@ -3857,11 +3914,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: dust_moist_correction = 1.0 real(kind=kind_phys) :: dust_alpha = 0. real(kind=kind_phys) :: dust_gamma = 0. - real(kind=kind_phys) :: wetdep_ls_alpha = 0. + real(kind=kind_phys) :: wetdep_ls_alpha = 0.5 integer :: dust_moist_opt = 1 ! fecan :1 else shao integer :: ebb_dcycle = 1 ! 1:retro; 2:forecast integer :: seas_opt = 2 - integer :: dust_opt = 5 + integer :: dust_opt = 1 integer :: drydep_opt = 1 integer :: coarsepm_settling = 1 integer :: plume_wind_eff = 1 @@ -3870,6 +3927,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: do_plumerise = .false. integer :: addsmoke_flag = 1 integer :: plumerisefire_frq = 60 + integer :: n_dbg_lines = 3 integer :: smoke_forecast = 0 ! 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 @@ -3919,8 +3977,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & thermodyn_id, sfcpress_id, & !--- coupling parameters cplflx, cplice, cplocn2atm, cplwav, cplwav2atm, cplaqm, & - cplchm, cpllnd, cpl_imp_mrg, cpl_imp_dbg, rrfs_sd, & - use_cice_alb, & + cplchm, cpllnd, cpllnd2atm, cpl_imp_mrg, cpl_imp_dbg, & + rrfs_sd, use_cice_alb, & #ifdef IDEA_PHYS lsidea, weimer_model, f107_kp_size, f107_kp_interval, & f107_kp_skip_size, f107_kp_data_size, f107_kp_read_in_start, & @@ -4054,7 +4112,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & wetdep_ls_opt, smoke_forecast, 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, & + do_smoke_transport,smoke_conv_wet_coef,n_dbg_lines, & !--- C3/GF closures ichoice,ichoicem,ichoice_s, & !--- (DFI) time ranges with radar-prescribed microphysics tendencies @@ -4314,6 +4372,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%cplaqm = cplaqm Model%cplchm = cplchm .or. cplaqm Model%cpllnd = cpllnd + Model%cpllnd2atm = cpllnd2atm Model%use_cice_alb = use_cice_alb Model%cpl_imp_mrg = cpl_imp_mrg Model%cpl_imp_dbg = cpl_imp_dbg @@ -4336,6 +4395,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%extended_sd_diags = extended_sd_diags Model%wetdep_ls_opt = wetdep_ls_opt Model%do_plumerise = do_plumerise + Model%n_dbg_lines = n_dbg_lines Model%plumerisefire_frq = plumerisefire_frq Model%addsmoke_flag = addsmoke_flag Model%smoke_forecast = smoke_forecast @@ -6443,6 +6503,7 @@ subroutine control_print(Model) print *, ' cplaqm : ', Model%cplaqm print *, ' cplchm : ', Model%cplchm print *, ' cpllnd : ', Model%cpllnd + print *, ' cpllnd2atm : ', Model%cpllnd2atm print *, ' rrfs_sd : ', Model%rrfs_sd print *, ' use_cice_alb : ', Model%use_cice_alb print *, ' cpl_imp_mrg : ', Model%cpl_imp_mrg diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 654332198..caf348a5e 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -979,7 +979,7 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) -[fire_heat_flux_out] +[fire_heat_flux] standard_name = surface_fire_heat_flux long_name = heat flux of fire at the surface units = W m-2 @@ -987,7 +987,7 @@ type = real kind = kind_phys active = (control_for_land_surface_scheme == identifier_for_ruc_land_surface_scheme) -[frac_grid_burned_out] +[frac_grid_burned] standard_name = fraction_of_grid_cell_burning long_name = ration of the burnt area to the grid cell area units = frac @@ -2302,7 +2302,7 @@ type = real kind = kind_phys active = (do_smoke_coupling) -[frp_input] +[frp_output] standard_name = frp_hourly long_name = hourly fire radiative power units = MW @@ -2326,6 +2326,37 @@ type = real kind = kind_phys active = (do_smoke_coupling) +[fire_type] + standard_name = fire_type + long_name = type of fire + units = 1 + dimensions = (horizontal_loop_extent) + type = integer + active = (do_smoke_coupling) +[peak_hr] + standard_name = peak_hr_fire + long_name = time_of_peak_fire_emissions + units = s + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (do_smoke_coupling) +[lu_nofire] + standard_name = sum_of_land_use_fractions_for_no_fire_pixels + long_name = land use of no fire pixels for type + units = 1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (do_smoke_coupling) +[lu_qfire] + standard_name = sum_of_land_use_fractions_for_cropland_fire_pixels + long_name = land use of fire pixels for type + units = 1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (do_smoke_coupling) [fire_in] standard_name = smoke_fire_auxiliary_input long_name = smoke fire auxiliary input variables @@ -2836,6 +2867,110 @@ type = real kind = kind_phys active = (flag_for_surface_flux_coupling .and. do_mediator_atmosphere_ocean_fluxes) +[sncovr1_lnd] + standard_name = surface_snow_area_fraction_over_land_from_land + long_name = surface snow area fraction over land for coupling + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[qsurf_lnd] + standard_name = surface_specific_humidity_over_land_from_land + long_name = surface air saturation specific humidity over land + units = kg kg-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[hflx_lnd] + standard_name = surface_upward_sensible_heat_flux_over_land_from_land + long_name = sfc sensible heat flux input over land for coupling + units = K m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[evap_lnd] + standard_name = surface_upward_latent_heat_flux_over_land_from_land + long_name = sfc latent heat flux input over land for coupling + units = kg kg-1 m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[ep_lnd] + standard_name = surface_upward_potential_latent_heat_flux_over_land_from_land + long_name = surface upward potential latent heat flux over land for coupling + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[t2mmp_lnd] + standard_name = temperature_at_2m_over_land_from_land + long_name = 2 meter temperature over land for coupling + units = K + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[q2mp_lnd] + standard_name = specific_humidity_at_2m_over_land_from_land + long_name = 2 meter specific humidity over land for coupling + units = kg kg-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[gflux_lnd] + standard_name = upward_heat_flux_in_soil_over_land_from_land + long_name = soil heat flux over land for coupling + units = W m-2 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[runoff_lnd] + standard_name = surface_runoff_flux_from_land + long_name = surface runoff flux over land for coupling + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[drain_lnd] + standard_name = subsurface_runoff_flux_from_land + long_name = subsurface runoff flux over land for coupling + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[cmm_lnd] + standard_name = surface_drag_wind_speed_for_momentum_in_air_over_land_from_land + long_name = momentum exchange coefficient over land for coupling + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[chh_lnd] + standard_name = surface_drag_mass_flux_for_heat_and_moisture_in_air_over_land_from_land + long_name = thermal exchange coefficient over land for coupling + units = kg m-2 s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) +[zvfun_lnd] + standard_name = function_of_surface_roughness_length_and_green_vegetation_fraction_from_land + long_name = function of surface roughness length and green vegetation fraction + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_coupling .and. flag_for_one_way_land_coupling_to_atmosphere) [hsnoin_cpl] standard_name = lwe_surface_snow_from_coupled_process long_name = sfc snow depth in meters over sea ice for coupling @@ -3066,6 +3201,22 @@ 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 + units = m s-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (do_smoke_coupling) +[hpbl_thetav] + standard_name = atmosphere_boundary_layer_thickness_from_modified_parcel + long_name = pbl height based on modified parcel method + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (do_smoke_coupling) [rrfs_hwp] standard_name = hourly_wildfire_potential long_name = rrfs hourly fire weather potential @@ -3444,6 +3595,12 @@ units = flag dimensions = () type = logical +[cpllnd2atm] + standard_name = flag_for_one_way_land_coupling_to_atmosphere + long_name = flag controlling land coupling to the atmosphere (default off) + units = flag + dimensions = () + type = logical [rrfs_sd] standard_name = do_smoke_coupling long_name = flag controlling rrfs_sd collection (default off) @@ -6692,6 +6849,13 @@ dimensions = () type = integer active = (do_smoke_coupling) +[n_dbg_lines] + standard_name = smoke_debug_lines + long_name = rrfs smoke add smoke option + units = index + dimensions = () + type = integer + active = (do_smoke_coupling) [addsmoke_flag] standard_name = control_for_smoke_biomass_burning_emissions long_name = rrfs smoke add smoke option From ac738720256a44b710d360e6fc9b98a1bad580f4 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 15 Mar 2024 14:20:23 -0400 Subject: [PATCH 2/3] update ccpp/physics and .gitmodules --- .gitmodules | 6 ++---- ccpp/physics | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index a8006a363..dc0798c32 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,10 +4,8 @@ branch = main [submodule "ccpp-physics"] path = ccpp/physics - #url = https://github.com/NCAR/ccpp-physics - #branch = main - url = https://github.com/grantfirl/ccpp-physics - branch = ufs-dev-PR94 + url = https://github.com/NCAR/ccpp-physics + branch = main [submodule "CMakeModules"] path = CMakeModules url = https://github.com/noaa-emc/CMakeModules diff --git a/ccpp/physics b/ccpp/physics index 2800006bb..d46098d71 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 2800006bb74cb1ee972f1cd084b651f3eaee8df4 +Subproject commit d46098d717c6fb4b3e926b8c3794d83e3a1627d9 From 2da256fafded9abf876529e131c54b4101243aed Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 15 Mar 2024 14:21:33 -0400 Subject: [PATCH 3/3] update .gitmodules for whitespace change removal --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index dc0798c32..6e979209b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,7 +4,7 @@ branch = main [submodule "ccpp-physics"] path = ccpp/physics - url = https://github.com/NCAR/ccpp-physics + url = https://github.com/NCAR/ccpp-physics branch = main [submodule "CMakeModules"] path = CMakeModules