diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 5935270b1..22e4c9076 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -91,6 +91,7 @@ 'ccpp/physics/physics/module_mp_radar.F90', 'ccpp/physics/physics/module_mp_thompson.F90', 'ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90', + 'ccpp/physics/physics/module_MP_FER_HIRES.F90', 'ccpp/physics/physics/module_bl_mynn.F90', 'ccpp/physics/physics/module_sf_mynn.F90', 'ccpp/physics/physics/module_SF_JSFC.F90', @@ -231,9 +232,14 @@ 'ccpp/physics/physics/sfc_nst.f' : ['physics'], 'ccpp/physics/physics/sfc_ocean.F' : ['physics'], 'ccpp/physics/physics/sfc_sice.f' : ['physics'], + 'ccpp/physics/physics/mp_fer_hires.F90' : ['physics'], 'ccpp/physics/physics/gmtb_scm_sfc_flux_spec.F90' : ['physics'], } +# Default build dir, relative to current working directory, +# if not specified as command-line argument +DEFAULT_BUILD_DIR = 'scm/bin' + # Auto-generated makefile/cmakefile snippets that contain all schemes SCHEMES_MAKEFILE = 'ccpp/physics/CCPP_SCHEMES.mk' SCHEMES_CMAKEFILE = 'ccpp/physics/CCPP_SCHEMES.cmake' @@ -316,6 +322,13 @@ 'tendency_of_ice_friendly_aerosols_at_surface', ], }, + 'mp_fer_hires' : { + 'mp_fer_hires_init' : [ + 'fraction_of_ice_water_cloud', + 'fraction_of_rain_water_cloud', + 'rime_factor', + ], + }, #'subroutine_name_1' : 'all', #'subroutine_name_2' : 'none', #'subroutine_name_2' : [ 'var1', 'var3'], diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index e768bb037..bb6775df6 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -615,6 +615,7 @@ module GFS_typedefs integer :: imp_physics_zhao_carr = 99 !< choice of Zhao-Carr microphysics scheme integer :: imp_physics_zhao_carr_pdf = 98 !< choice of Zhao-Carr microphysics scheme with PDF clouds integer :: imp_physics_mg = 10 !< choice of Morrison-Gettelman microphysics scheme + integer :: imp_physics_fer_hires = 15 !< choice of Ferrier-Aligo microphysics scheme !--- Z-C microphysical parameters real(kind=kind_phys) :: psautco(2) !< [in] auto conversion coeff from ice to snow real(kind=kind_phys) :: prautco(2) !< [in] auto conversion coeff from cloud to rain @@ -677,6 +678,7 @@ module GFS_typedefs integer :: lsoil_lsm !< number of soil layers internal to land surface model integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm + logical :: rdlai integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) @@ -714,6 +716,8 @@ module GFS_typedefs logical :: moist_adj !< flag for moist convective adjustment logical :: cscnv !< flag for Chikira-Sugiyama convection logical :: cal_pre !< flag controls precip type algorithm + real(kind=kind_phys) :: rhgrd !< fer_hires microphysics only + logical :: spec_adv !< flag for individual cloud species advected logical :: do_aw !< AW scale-aware option in cs convection logical :: do_awdd !< AW scale-aware option in cs convection logical :: flx_form !< AW scale-aware option in cs convection @@ -911,6 +915,7 @@ module GFS_typedefs integer :: ntrac !< number of tracers integer :: ntracp1 !< number of tracers plus one integer :: ntqv !< tracer index for water vapor (specific humidity) + integer :: nqrimef !< tracer index for mass weighted rime factor integer :: ntoz !< tracer index for ozone mixing ratio integer :: ntcw !< tracer index for cloud condensate (or liquid water) integer :: ntiw !< tracer index for ice water @@ -1393,6 +1398,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: det_mf (:,:) => null() !< instantaneous convective detrainment mass flux real (kind=kind_phys), pointer :: cldcov (:,:) => null() !< instantaneous 3D cloud fraction +!--- F-A MP scheme + real (kind=kind_phys), pointer :: TRAIN (:,:) => null() !< accumulated stratiform T tendency (K s-1) + !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm ! @@ -1810,7 +1818,22 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking drag real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< daily aver u-wind tend due to orographic gravity wave drag real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS -! + + !-- HWRF physics: dry mixing ratios + real (kind=kind_phys), pointer :: qv_r(:,:) => null() !< + real (kind=kind_phys), pointer :: qc_r(:,:) => null() !< + real (kind=kind_phys), pointer :: qi_r(:,:) => null() !< + real (kind=kind_phys), pointer :: qr_r(:,:) => null() !< + real (kind=kind_phys), pointer :: qs_r(:,:) => null() !< + real (kind=kind_phys), pointer :: qg_r(:,:) => null() !< + + + !-- Ferrier-Aligo MP scheme + real (kind=kind_phys), pointer :: f_rain (:,:) => null() !< + real (kind=kind_phys), pointer :: f_ice (:,:) => null() !< + real (kind=kind_phys), pointer :: f_rimef (:,:) => null() !< + real (kind=kind_phys), pointer :: cwm (:,:) => null() !< + contains procedure :: create => interstitial_create !< allocate array data @@ -2194,6 +2217,11 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%tsnow = clear_val Sfcprop%snowfallac = clear_val Sfcprop%acsnow = clear_val + ! + if (Model%rdlai) then + allocate (Sfcprop%xlaixy (IM)) + Sfcprop%xlaixy = clear_val + end if end if if (Model%do_mynnsfclay) then ! For MYNN surface layer scheme @@ -2599,7 +2627,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: wminco(2) = (/1.0d-5,1.0d-5/) !< [in] water and ice minimum threshold for Zhao !---Max hourly real(kind=kind_phys) :: avg_max_length = 3600. !< reset value in seconds for max hourly. - +!--- Ferrier-Aligo microphysical parameters + real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only + logical :: spec_adv = .true. !< Individual cloud species advected !--- M-G microphysical parameters integer :: fprcp = 0 !< no prognostic rain and snow (MG) integer :: pdfflag = 4 !< pdf flag for MG macro physics @@ -2646,6 +2676,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model + logical :: rdlai = .false. integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) @@ -2918,7 +2949,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- max hourly avg_max_length, & !--- land/surface model control - lsm, lsoil, lsoil_lsm, lsnow_lsm, nmtvr, ivegsrc, use_ufo, & + lsm, lsoil, lsoil_lsm, lsnow_lsm, rdlai, & + nmtvr, ivegsrc, use_ufo, & ! Noah MP options iopt_dveg,iopt_crs,iopt_btr,iopt_run,iopt_sfc, iopt_frz, & iopt_inf, iopt_rad,iopt_alb,iopt_snf,iopt_tbot,iopt_stc, & @@ -2940,6 +2972,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & do_sppt, do_shum, do_skeb, do_sfcperts, & !--- Rayleigh friction prslrd0, ral_ts, ldiag_ugwp, do_ugwp, do_tofd, & + ! --- Ferrier-Aligo + spec_adv, rhgrd, & !--- mass flux deep convection clam_deep, c0s_deep, c1_deep, betal_deep, & betas_deep, evfact_deep, evfactl_deep, pgcon_deep, & @@ -3171,6 +3205,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ltaerosol = ltaerosol Model%lradar = lradar Model%ttendlim = ttendlim +!--- F-A MP parameters + Model%rhgrd = rhgrd + Model%spec_adv = spec_adv + !--- gfdl MP parameters Model%lgfdlmprad = lgfdlmprad @@ -3182,6 +3220,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & write(0,*) 'Logic error: RUC LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if + ! Flag to read leaf area index from input files (initial conditions) + Model%rdlai = rdlai + if (Model%rdlai .and. .not. Model%lsm == Model%lsm_ruc) then + write(0,*) 'Logic error: rdlai = .true. only works with RUC LSM' + stop + end if ! Set surface layers for CCPP physics if (lsoil_lsm==-1) then Model%lsoil_lsm = lsoil @@ -3423,6 +3467,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ntsnc = get_tracer_index(Model%tracer_names, 'snow_nc', Model%me, Model%master, Model%debug) Model%ntgnc = get_tracer_index(Model%tracer_names, 'graupel_nc', Model%me, Model%master, Model%debug) Model%ntke = get_tracer_index(Model%tracer_names, 'sgs_tke', Model%me, Model%master, Model%debug) + Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug) Model%ntwa = get_tracer_index(Model%tracer_names, 'liq_aero', Model%me, Model%master, Model%debug) Model%ntia = get_tracer_index(Model%tracer_names, 'ice_aero', Model%me, Model%master, Model%debug) Model%ntchm = 0 @@ -3795,9 +3840,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ncnd = 1 if (Model%me == Model%master) print *,'Using Zhao/Carr/Sundqvist Microphysics with PDF Cloud' - else if (Model%imp_physics == 5) then ! F-A goes here - print *,' Ferrier Microphysics scheme has been deprecated - job aborted' - stop + else if (Model%imp_physics == Model%imp_physics_fer_hires) then ! Ferrier-Aligo scheme + Model%npdf3d = 0 + Model%num_p3d = 3 + Model%num_p2d = 1 + Model%pdfcld = .false. + Model%shcnvcw = .false. + Model%ncnd = 5 + Model%nleffr = 1 + Model%nieffr = 2 + Model%nseffr = 3 + if (Model%me == Model%master) print *,' Using Ferrier-Aligo MP scheme', & + ' microphysics', & + ' lradar =',Model%lradar elseif (Model%imp_physics == Model%imp_physics_wsm6) then !WSM6 microphysics Model%npdf3d = 0 @@ -4099,9 +4154,17 @@ subroutine control_print(Model) print *, ' ' endif + if (Model%imp_physics == Model%imp_physics_fer_hires) then + print *, ' Ferrier-Aligo microphysical parameters' + print *, ' spec_adv : ', Model%spec_adv + print *, ' rhgrd : ', Model%rhgrd + print *, ' ' + endif + print *, 'land/surface model parameters' print *, ' lsm : ', Model%lsm print *, ' lsoil : ', Model%lsoil + print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' ivegsrc : ', Model%ivegsrc @@ -4253,6 +4316,7 @@ subroutine control_print(Model) print *, ' tracer_names : ', Model%tracer_names print *, ' ntrac : ', Model%ntrac print *, ' ntqv : ', Model%ntqv + print *, ' nqrimef : ', Model%nqrimef print *, ' ntoz : ', Model%ntoz print *, ' ntcw : ', Model%ntcw print *, ' ntiw : ', Model%ntiw @@ -4758,6 +4822,11 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%shum_wts(IM,Model%levs)) allocate (Diag%zmtnblck(IM)) + ! F-A MP scheme + if (Model%imp_physics == Model%imp_physics_fer_hires) then + allocate (Diag%TRAIN (IM,Model%levs)) + end if + allocate (Diag%ca_out (IM)) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) @@ -5046,6 +5115,11 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%sppt_wts = zero Diag%shum_wts = zero Diag%zmtnblck = zero + + if (Model%imp_physics == Model%imp_physics_fer_hires) then + Diag%TRAIN = zero + end if + Diag%totprcpb = zero Diag%cnvprcpb = zero Diag%toticeb = zero @@ -5536,6 +5610,21 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cnv_ndrop (IM,Model%levs)) allocate (Interstitial%cnv_nice (IM,Model%levs)) end if + if (Model%imp_physics == Model%imp_physics_fer_hires) then + !--- if HWRF physics? + allocate (Interstitial%qv_r (IM,Model%levs)) + allocate (Interstitial%qc_r (IM,Model%levs)) + allocate (Interstitial%qi_r (IM,Model%levs)) + allocate (Interstitial%qr_r (IM,Model%levs)) + allocate (Interstitial%qs_r (IM,Model%levs)) + allocate (Interstitial%qg_r (IM,Model%levs)) + + !--- Ferrier-Aligo MP scheme + allocate (Interstitial%f_ice (IM,Model%levs)) + allocate (Interstitial%f_rain (IM,Model%levs)) + allocate (Interstitial%f_rimef (IM,Model%levs)) + allocate (Interstitial%cwm (IM,Model%levs)) + end if if (Model%do_shoc) then if (.not. associated(Interstitial%qrn)) allocate (Interstitial%qrn (IM,Model%levs)) if (.not. associated(Interstitial%qsnw)) allocate (Interstitial%qsnw (IM,Model%levs)) @@ -5580,7 +5669,7 @@ subroutine interstitial_create (Interstitial, IM, Model) Interstitial%phys_hydrostatic = .true. ! ! Reset all other variables - call Interstitial%rad_reset () + call Interstitial%rad_reset (Model) call Interstitial%phys_reset (Model) ! end subroutine interstitial_create @@ -5659,6 +5748,8 @@ subroutine interstitial_setup_tracers(Interstitial, Model) endif elseif (Model%imp_physics == Model%imp_physics_gfdl) then Interstitial%ntiwx = 3 + elseif (Model%imp_physics == Model%imp_physics_fer_hires) then + Interstitial%ntiwx = 3 ! total ice or total condensate elseif (Model%imp_physics == Model%imp_physics_mg) then Interstitial%ntiwx = 3 else @@ -5734,11 +5825,12 @@ subroutine interstitial_setup_tracers(Interstitial, Model) end subroutine interstitial_setup_tracers - subroutine interstitial_rad_reset (Interstitial) + subroutine interstitial_rad_reset (Interstitial, Model) ! implicit none ! class(GFS_interstitial_type) :: Interstitial + type(GFS_control_type), intent(in) :: Model ! Interstitial%aerodp = clear_val Interstitial%alb1d = clear_val @@ -5775,6 +5867,22 @@ subroutine interstitial_rad_reset (Interstitial) Interstitial%tlyr = clear_val Interstitial%tsfa = clear_val Interstitial%tsfg = clear_val + +! F-A scheme + if (Model%imp_physics == Model%imp_physics_fer_hires ) then + Interstitial%qv_r = clear_val + Interstitial%qc_r = clear_val + Interstitial%qi_r = clear_val + Interstitial%qr_r = clear_val + Interstitial%qs_r = clear_val + Interstitial%qg_r = clear_val + if(Model%spec_adv) then + Interstitial%f_ice = clear_val + Interstitial%f_rain = clear_val + Interstitial%f_rimef = clear_val + Interstitial%cwm = clear_val + end if + end if ! end subroutine interstitial_rad_reset @@ -6025,6 +6133,12 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%cnv_ndrop = clear_val Interstitial%cnv_nice = clear_val end if + if (Model%imp_physics == Model%imp_physics_fer_hires .and. Model%spec_adv) then + Interstitial%f_ice = clear_val + Interstitial%f_rain = clear_val + Interstitial%f_rimef = clear_val + Interstitial%cwm = clear_val + end if if (Model%do_shoc) then Interstitial%qrn = clear_val Interstitial%qsnw = clear_val @@ -6340,6 +6454,12 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) + else if (Model%imp_physics == Model%imp_physics_fer_hires) then + write (0,*) 'Interstitial_print: values specific to F-A microphysics' + write (0,*) 'sum(Interstitial%f_ice ) = ', sum(Interstitial%f_ice ) + write (0,*) 'sum(Interstitial%f_rain ) = ', sum(Interstitial%f_rain ) + write (0,*) 'sum(Interstitial%f_rimef ) = ', sum(Interstitial%f_rimef ) + write (0,*) 'sum(Interstitial%cwm ) = ', sum(Interstitial%cwm ) else if (Model%imp_physics == Model%imp_physics_mg) then write (0,*) 'Interstitial_print: values specific to MG microphysics' write (0,*) 'sum(Interstitial%ncgl ) = ', sum(Interstitial%ncgl ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 8ef22b836..aebc6eac7 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -368,6 +368,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[gq0(:,:,index_for_mass_weighted_rime_factor)] + standard_name = mass_weighted_rime_factor_updated_by_physics + long_name = mass weighted rime factor updated by physics + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [gq0(:,:,index_for_water_friendly_aerosols)] standard_name = water_friendly_aerosol_number_concentration_updated_by_physics long_name = number concentration of water-friendly aerosols updated by physics @@ -2176,6 +2183,12 @@ units = flag dimensions = () type = integer +[imp_physics_fer_hires] + standard_name = flag_for_fer_hires_microphysics_scheme + long_name = choice of Ferrier-Aligo microphysics scheme + units = flag + dimensions = () + type = integer [imp_physics_gfdl] standard_name = flag_for_gfdl_microphysics_scheme long_name = choice of GFDL microphysics scheme @@ -2557,6 +2570,12 @@ units = count dimensions = () type = integer +[rdlai] + standard_name = flag_for_reading_leaf_area_index_from_input + long_name = flag for reading leaf area index from initial conditions for RUC LSM + units = flag + dimensions = () + type = logical [ivegsrc] standard_name = vegetation_type_dataset_choice long_name = land use dataset choice @@ -2569,6 +2588,19 @@ units = index dimensions = () type = integer +[spec_adv] + standard_name = flag_for_individual_cloud_species_advected + long_name = flag for individual cloud species advected + units = flag + dimensions = () + type = logical +[flgmin] + standard_name = minimum_large_ice_fraction + long_name = minimum large ice fraction in F-A mp scheme + units = frac + dimensions = (2) + type = real + kind = kind_phys [iopt_dveg] standard_name = flag_for_dynamic_vegetation_option long_name = choice for dynamic vegetation option (see noahmp module for definition) @@ -2653,6 +2685,13 @@ units = flag dimensions = () type = logical +[rhgrd] + standard_name = fa_threshold_relative_humidity_for_onset_of_condensation + long_name = relative humidity threshold parameter for condensation for FA scheme + units = none + dimensions = () + type = real + kind = kind_phys [flipv] standard_name = flag_flip long_name = vertical flip logical @@ -3432,6 +3471,12 @@ units = index dimensions = () type = integer +[nqrimef] + standard_name = index_for_mass_weighted_rime_factor + long_name = tracer index for mass weighted rime factor + units = index + dimensions = () + type = integer [ntwa] standard_name = index_for_water_friendly_aerosols long_name = tracer index for water friendly aerosol @@ -4861,6 +4906,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[train] + standard_name = accumulated_change_of_air_temperature_due_to_FA_scheme + long_name = accumulated change of air temperature due to FA MP scheme + units = K + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [gflux] standard_name = cumulative_surface_ground_heat_flux_multiplied_by_timestep long_name = cumulative groud conductive heat flux multiplied by timestep @@ -5771,6 +5823,76 @@ [ccpp-arg-table] name = GFS_interstitial_type type = ddt +[qv_r] + standard_name = humidity_mixing_ratio + long_name = the ratio of the mass of water vapor to the mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[qc_r] + standard_name = cloud_liquid_water_mixing_ratio + long_name = the ratio of the mass of liquid water to the mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[qr_r] + standard_name = cloud_rain_water_mixing_ratio + long_name = the ratio of the mass rain water to the mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[qi_r] + standard_name = cloud_ice_mixing_ratio + long_name = the ratio of the mass of ice to the mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[qs_r] + standard_name = cloud_snow_mixing_ratio + long_name = the ratio of the mass of snow to mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[qg_r] + standard_name = mass_weighted_rime_factor_mixing_ratio + long_name = the ratio of the mass of rime factor to mass of dry air + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[f_ice] + standard_name = fraction_of_ice_water_cloud + long_name = fraction of ice water cloud + units = frac + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[f_rain] + standard_name = fraction_of_rain_water_cloud + long_name = fraction of rain water cloud + units = frac + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[f_rimef] + standard_name = rime_factor + long_name = rime factor + units = frac + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[cwm] + standard_name = total_cloud_condensate_mixing_ratio_updated_by_physics + long_name = total cloud condensate mixing ratio (except water vapor) updated by physics + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys [adjsfculw_ocean] standard_name = surface_upwelling_longwave_flux_over_ocean_interstitial long_name = surface upwelling longwave flux at current time over ocean (temporary use as interstitial) @@ -7236,7 +7358,7 @@ type = integer [ntiwx] standard_name = index_for_ice_cloud_condensate_vertical_diffusion_tracer - long_name = index for ice cloud condensate n the vertically diffused tracer array + long_name = index for ice cloud condensate in the vertically diffused tracer array units = index dimensions = () type = integer diff --git a/scm/src/gmtb_scm_physical_constants.f90 b/scm/src/gmtb_scm_physical_constants.f90 index 252beef9f..c74894767 100644 --- a/scm/src/gmtb_scm_physical_constants.f90 +++ b/scm/src/gmtb_scm_physical_constants.f90 @@ -24,7 +24,7 @@ module gmtb_scm_physical_constants real(kind=dp),parameter:: con_hfus =3.3358e+5 real(kind=dp),parameter:: con_t0c =2.7315e+2 real(kind=dp),parameter:: con_ttp =2.7316e+2 - + real(kind=dp),parameter:: con_epsq =1.0E-12_dp real(kind=dp),parameter:: con_rocp =con_rd/con_cp real(kind=dp),parameter:: con_fvirt =con_rv/con_rd - 1 diff --git a/scm/src/gmtb_scm_physical_constants.meta b/scm/src/gmtb_scm_physical_constants.meta index 610bab89d..eb7f23bde 100644 --- a/scm/src/gmtb_scm_physical_constants.meta +++ b/scm/src/gmtb_scm_physical_constants.meta @@ -99,6 +99,13 @@ dimensions = () type = real kind = kind_phys +[con_epsq] + standard_name = minimum_value_of_specific_humidity + long_name = floor value for specific humidity + units = kg kg-1 + dimensions = () + type = real + kind = kind_phys [con_vonKarman] standard_name = vonKarman_constant long_name = vonKarman constant diff --git a/scm/src/gmtb_scm_type_defs.f90 b/scm/src/gmtb_scm_type_defs.f90 index c8960161b..cc60f74c3 100644 --- a/scm/src/gmtb_scm_type_defs.f90 +++ b/scm/src/gmtb_scm_type_defs.f90 @@ -76,6 +76,7 @@ module gmtb_scm_type_defs integer :: tke_index !< index for TKE in the tracer array integer :: water_friendly_aerosol_index !< index for water-friendly aerosols in the tracer array integer :: ice_friendly_aerosol_index !< index for ice-friendly aerosols in the tracer array + integer :: mass_weighted_rime_factor_index !< index for mass-weighted rime factor integer :: init_year, init_month, init_day, init_hour character(len=32), allocatable :: tracer_names(:) !< name of physics suite (must be "GFS_operational" for prototype) integer, allocatable :: blksz(:) @@ -374,7 +375,7 @@ subroutine scm_state_create(scm_state, n_columns, n_levels, n_soil, n_snow, n_ti scm_state%n_cols = n_columns scm_state%n_timesteps = int_zero scm_state%n_time_levels = n_time_levels - scm_state%n_tracers = 16 + scm_state%n_tracers = 17 allocate(scm_state%tracer_names(scm_state%n_tracers)) scm_state%water_vapor_index = 1 scm_state%ozone_index = 2 @@ -392,6 +393,7 @@ subroutine scm_state_create(scm_state, n_columns, n_levels, n_soil, n_snow, n_ti scm_state%tke_index = 14 scm_state%water_friendly_aerosol_index = 15 scm_state%ice_friendly_aerosol_index = 16 + scm_state%mass_weighted_rime_factor_index = 17 scm_state%tracer_names(1) = 'vap_wat' scm_state%tracer_names(2) = 'o3mr' scm_state%tracer_names(3) = 'liq_wat' @@ -408,6 +410,7 @@ subroutine scm_state_create(scm_state, n_columns, n_levels, n_soil, n_snow, n_ti scm_state%tracer_names(14)= 'sgs_tke' scm_state%tracer_names(15)= 'liq_aero' scm_state%tracer_names(16)= 'ice_aero' + scm_state%tracer_names(17)= 'q_rimef' scm_state%n_itt_swrad = int_zero scm_state%n_itt_lwrad = int_zero scm_state%n_itt_out = int_zero