From e6e2c81467d1107b7dd98a25ff33fe36cfc52618 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Thu, 7 Nov 2019 21:32:21 -0700 Subject: [PATCH 1/5] add FA scheme changes on host model side --- ccpp/config/ccpp_prebuild_config.py | 12 ++ .../suite_FV3_HAFS_ferhires_update_moist.xml | 91 ++++++++++ gfsphysics/GFS_layer/GFS_typedefs.F90 | 170 ++++++++++++++++-- gfsphysics/GFS_layer/GFS_typedefs.meta | 125 ++++++++++++- 4 files changed, 379 insertions(+), 19 deletions(-) create mode 100644 ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index b1738d633..2cf981e81 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -93,6 +93,7 @@ 'FV3/ccpp/physics/physics/module_mp_radar.F90', 'FV3/ccpp/physics/physics/module_mp_thompson.F90', 'FV3/ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90', + 'FV3/ccpp/physics/physics/module_MP_FER_HIRES.F90', 'FV3/ccpp/physics/physics/module_bl_mynn.F90', 'FV3/ccpp/physics/physics/module_sf_mynn.F90', 'FV3/ccpp/physics/physics/module_SF_JSFC.F90', @@ -230,6 +231,9 @@ 'FV3/ccpp/physics/physics/sfc_nst.f' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_ocean.F' : [ 'slow_physics' ], 'FV3/ccpp/physics/physics/sfc_sice.f' : [ 'slow_physics' ], + # HAFS FER_HIRES + 'FV3/ccpp/physics/physics/mp_fer_hires.F90' : [ 'slow_physics' ], + 'FV3/ccpp/physics/physics/HAFS_update_moist.F90' : [ 'slow_physics' ], # for testing the and sections 'FV3/ccpp/physics/physics/GFS_suite_init_finalize_test.F90' : [ 'slow_physics' ], } @@ -317,6 +321,14 @@ '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/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml new file mode 100644 index 000000000..18cc0cf3b --- /dev/null +++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml @@ -0,0 +1,91 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + dcyc2t3_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + + GFS_PBL_generic_pre + hedmf + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + rayleigh_damp + GFS_suite_stateout_update + ozphys + + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_fer_hires + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 7f8239a5a..40002e0a8 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -6,7 +6,7 @@ module GFS_typedefs #ifdef CCPP use physcons, only: con_cp, con_fvirt, con_g, & con_hvap, con_hfus, con_pi, con_rd, con_rv, & - con_t0c, con_cvap, con_cliq, con_eps, & + con_t0c, con_cvap, con_cliq, con_eps, con_epsq, & con_epsm1, con_ttp, rlapse, con_jcal, con_rhw0, & con_sbc, con_tice, cimin, con_p0, rhowater use module_radsw_parameters, only: topfsw_type, sfcfsw_type, cmpfsw_type, NBDSW @@ -645,6 +645,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 @@ -751,6 +752,10 @@ 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 +#ifdef CCPP + real(kind=kind_phys) :: rhgrd !< fer_hires microphysics only + logical :: spec_adv !< flag for individual cloud species advected +#endif 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 @@ -941,6 +946,7 @@ module GFS_typedefs #ifdef CCPP 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 #endif integer :: ntoz !< tracer index for ozone mixing ratio integer :: ntcw !< tracer index for cloud condensate (or liquid water) @@ -1439,6 +1445,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dwn_mf (:,:) => null() !< instantaneous convective downdraft mass flux 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 +#ifdef CCPP + real (kind=kind_phys), pointer :: TRAIN (:,:) => null() !< accumulated stratiform T tendency (K s-1) +#endif !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm @@ -1858,6 +1868,22 @@ module GFS_typedefs 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 procedure :: rad_reset => interstitial_rad_reset !< reset array data for radiation @@ -2694,7 +2720,11 @@ 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 +#ifdef CCPP + real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only + logical :: spec_adv = .true. !< Individual cloud species advected +#endif !--- M-G microphysical parameters integer :: fprcp = 0 !< no prognostic rain and snow (MG) integer :: pdfflag = 4 !< pdf flag for MG macro physics @@ -3057,6 +3087,10 @@ 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 +#ifdef CCPP + spec_adv, rhgrd, & +#endif !--- mass flux deep convection clam_deep, c0s_deep, c1_deep, betal_deep, & betas_deep, evfact_deep, evfactl_deep, pgcon_deep, & @@ -3310,6 +3344,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ltaerosol = ltaerosol Model%lradar = lradar Model%ttendlim = ttendlim +!--- F-A MP parameters +#ifdef CCPP + Model%rhgrd = rhgrd + Model%spec_adv = spec_adv +#endif + !--- gfdl MP parameters Model%lgfdlmprad = lgfdlmprad @@ -3574,6 +3614,9 @@ 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) +#ifdef CCPP + Model%nqrimef = get_tracer_index(Model%tracer_names, 'q_rimef', Model%me, Model%master, Model%debug) +#endif 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 @@ -3771,7 +3814,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ' Boundary layer and Shallow Convection', & ' nshoc_3d=',Model%nshoc_3d, & ' nshoc_2d=',Model%nshoc_2d, & - ' ntke=',Model%ntke,' shoc_parm=',shoc_parm + ' ntke=',Model%ntke,'shoc_parm=',shoc_parm endif #ifdef CCPP @@ -4012,10 +4055,20 @@ 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 == 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' elseif (Model%imp_physics == Model%imp_physics_wsm6) then !WSM6 microphysics Model%npdf3d = 0 Model%num_p3d = 3 @@ -4329,7 +4382,14 @@ subroutine control_print(Model) print *, ' GFDL MP radiation inter: ', Model%lgfdlmprad print *, ' ' endif - +#ifdef CCPP + 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 +#endif print *, 'land/surface model parameters' print *, ' lsm : ', Model%lsm print *, ' lsoil : ', Model%lsoil @@ -4490,6 +4550,7 @@ subroutine control_print(Model) print *, ' ntrac : ', Model%ntrac #ifdef CCPP print *, ' ntqv : ', Model%ntqv + print *, ' nqrimef : ', Model%nqrimef #endif print *, ' ntoz : ', Model%ntoz print *, ' ntcw : ', Model%ntcw @@ -4762,7 +4823,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%snowprv = clear_val Tbd%graupelprv = clear_val end if - + if (Model%lsm == Model%lsm_noahmp) then allocate(Tbd%draincprv (IM)) allocate(Tbd%drainncprv (IM)) @@ -4797,7 +4858,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%qsq = clear_val Tbd%cov = clear_val end if - + ! MYJ variables if (Model%do_myjsfc.or.Model%do_myjpbl) then !print*,"Allocating all MYJ surface variables:" @@ -5017,6 +5078,13 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%shum_wts(IM,Model%levs)) allocate (Diag%zmtnblck(IM)) + ! F-A MP scheme +#ifdef CCPP + if (Model%imp_physics == Model%imp_physics_fer_hires) then + allocate (Diag%TRAIN (IM,Model%levs)) + end if +#endif + allocate (Diag%ca_out (IM)) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) @@ -5309,6 +5377,12 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%sppt_wts = zero Diag%shum_wts = zero Diag%zmtnblck = zero + +#ifdef CCPP + if (Model%imp_physics == Model%imp_physics_fer_hires) then + Diag%TRAIN = zero + end if +#endif Diag%totprcpb = zero Diag%cnvprcpb = zero Diag%toticeb = zero @@ -5806,6 +5880,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)) @@ -5850,7 +5939,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 @@ -5888,6 +5977,15 @@ subroutine interstitial_setup_tracers(Interstitial, Model) endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 Interstitial%nncl = 5 +!--- F-A scheme + elseif (Model%imp_physics == Model%imp_physics_fer_hires) then + if (Model%spec_adv) then + Interstitial%nvdiff = 5 !qv, qc, qr, qi, qrime + else + Interstitial%nvdiff = 5 !qv, qc(total condensate), f_ice, f_rain,f_rimef + endif + if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 + Interstitial%nncl = 5 elseif (Model%imp_physics == Model%imp_physics_wsm6) then Interstitial%nvdiff = Model%ntrac -3 if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 @@ -5900,6 +5998,7 @@ subroutine interstitial_setup_tracers(Interstitial, Model) Interstitial%nncl = 5 endif + if (Model%imp_physics == Model%imp_physics_mg) then if (abs(Model%fprcp) == 1) then Interstitial%nncl = 4 ! MG2 with rain and snow @@ -5929,6 +6028,9 @@ subroutine interstitial_setup_tracers(Interstitial, Model) endif elseif (Model%imp_physics == Model%imp_physics_gfdl) then Interstitial%ntiwx = 3 + ! F-A MP scheme + 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 @@ -6004,11 +6106,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 @@ -6045,6 +6148,24 @@ 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 + 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 @@ -6295,6 +6416,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 @@ -6606,10 +6733,17 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) ! Print arrays that are conditional on physics choices if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson) then write (0,*) 'Interstitial_print: values specific to GFDL/Thompson microphysics' - write (0,*) 'sum(Interstitial%graupelmp ) = ', sum(Interstitial%graupelmp ) - write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) - write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) - write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) + write (0,*) 'sum(Interstitial%graupelmp) = ', sum(Interstitial%graupelmp ) + write (0,*) 'sum(Interstitial%icemp ) = ', sum(Interstitial%icemp ) + write (0,*) 'sum(Interstitial%rainmp ) = ', sum(Interstitial%rainmp ) + write (0,*) 'sum(Interstitial%snowmp ) = ', sum(Interstitial%snowmp ) + !F-A scheme + 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 ) @@ -6639,8 +6773,8 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%ncpl ) = ', sum(Interstitial%ncpl ) end if if (Model%lsm == Model%lsm_noahmp) then - write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) - write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) + write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) + write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if write (0,*) 'Interstitial_print: end' ! diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 79ab00129..8936afe31 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/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 @@ -2162,6 +2169,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 @@ -2555,6 +2568,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) @@ -2639,6 +2665,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 @@ -3346,6 +3379,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 @@ -4781,6 +4820,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[train] + standard_name = accumulated_tendency_of_air_temperature_due_to_FA_scheme + long_name = accumulated tendency 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 @@ -5692,6 +5738,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) @@ -7157,7 +7273,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 @@ -8245,6 +8361,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_epsm1] standard_name = ratio_of_dry_air_to_water_vapor_gas_constants_minus_one long_name = (rd/rv) - 1 From 685722db45befc5fbec7d6fa98824bfc25afdd96 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Thu, 14 Nov 2019 13:37:34 -0700 Subject: [PATCH 2/5] 1. using explicit simulation configuration in SDF file 2. in GFS_typedefs.F90, correct nvdiff definition for FA. --- .../suite_FV3_HAFS_ferhires_update_moist.xml | 7 +----- gfsphysics/GFS_layer/GFS_typedefs.F90 | 23 +++++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml index 18cc0cf3b..1c370a59c 100644 --- a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml +++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml @@ -13,7 +13,6 @@ GFS_suite_interstitial_rad_reset - GFS_rrtmg_pre rrtmg_sw_pre rrtmg_sw @@ -54,7 +53,6 @@ sfc_diag sfc_diag_post GFS_surface_generic_post - GFS_PBL_generic_pre hedmf GFS_PBL_generic_post @@ -64,15 +62,12 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 - samfdeepcnv + GFS_DCNV_generic_post GFS_SCNV_generic_pre - GFS_SCNV_generic_post GFS_suite_interstitial_4 cnvc90 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 40002e0a8..6c9aaee7c 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -4068,7 +4068,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nleffr = 1 Model%nieffr = 2 Model%nseffr = 3 - if (Model%me == Model%master) print *,' Using Ferrier-Aligo MP scheme' + 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 Model%num_p3d = 3 @@ -5977,15 +5981,16 @@ subroutine interstitial_setup_tracers(Interstitial, Model) endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 Interstitial%nncl = 5 +!MZ* nvdiff = 7: qv, qc,qi,qr,qs,q_rimef,o3 !--- F-A scheme - elseif (Model%imp_physics == Model%imp_physics_fer_hires) then - if (Model%spec_adv) then - Interstitial%nvdiff = 5 !qv, qc, qr, qi, qrime - else - Interstitial%nvdiff = 5 !qv, qc(total condensate), f_ice, f_rain,f_rimef - endif - if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 - Interstitial%nncl = 5 +! elseif (Model%imp_physics == Model%imp_physics_fer_hires) then +! if (Model%spec_adv) then +! Interstitial%nvdiff = 5 !qv, qc, qr, qi, qrime +! else +! Interstitial%nvdiff = 5 !qv, qc(total condensate), f_ice, f_rain,f_rimef +! endif +! if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 +! Interstitial%nncl = 5 elseif (Model%imp_physics == Model%imp_physics_wsm6) then Interstitial%nvdiff = Model%ntrac -3 if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 From c985af4470f41f9528309ec65850cce390fde7b4 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Mon, 18 Nov 2019 14:23:30 -0700 Subject: [PATCH 3/5] add gwd_post in FA SDF file following other SDFs --- ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml index 1c370a59c..375e9972d 100644 --- a/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml +++ b/ccpp/suites/suite_FV3_HAFS_ferhires_update_moist.xml @@ -59,6 +59,7 @@ GFS_GWD_generic_pre cires_ugwp cires_ugwp_post + GFS_GWD_generic_post rayleigh_damp GFS_suite_stateout_update ozphys From c8c7d06871599401d7414b4a432524ffbad2de66 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Thu, 21 Nov 2019 18:52:06 -0700 Subject: [PATCH 4/5] remove update_moist module --- ccpp/config/ccpp_prebuild_config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 2cf981e81..6e52fa0bd 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -233,7 +233,6 @@ 'FV3/ccpp/physics/physics/sfc_sice.f' : [ 'slow_physics' ], # HAFS FER_HIRES 'FV3/ccpp/physics/physics/mp_fer_hires.F90' : [ 'slow_physics' ], - 'FV3/ccpp/physics/physics/HAFS_update_moist.F90' : [ 'slow_physics' ], # for testing the and sections 'FV3/ccpp/physics/physics/GFS_suite_init_finalize_test.F90' : [ 'slow_physics' ], } From 2e3b41d30593f770a8d429830a4dddb5e5e82938 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Thu, 21 Nov 2019 19:00:56 -0700 Subject: [PATCH 5/5] change TRAIN name to accumulated change... --- gfsphysics/GFS_layer/GFS_typedefs.F90 | 10 ---------- gfsphysics/GFS_layer/GFS_typedefs.meta | 4 ++-- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 6c9aaee7c..b76cf1f4b 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -5981,16 +5981,6 @@ subroutine interstitial_setup_tracers(Interstitial, Model) endif if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 Interstitial%nncl = 5 -!MZ* nvdiff = 7: qv, qc,qi,qr,qs,q_rimef,o3 -!--- F-A scheme -! elseif (Model%imp_physics == Model%imp_physics_fer_hires) then -! if (Model%spec_adv) then -! Interstitial%nvdiff = 5 !qv, qc, qr, qi, qrime -! else -! Interstitial%nvdiff = 5 !qv, qc(total condensate), f_ice, f_rain,f_rimef -! endif -! if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 -! Interstitial%nncl = 5 elseif (Model%imp_physics == Model%imp_physics_wsm6) then Interstitial%nvdiff = Model%ntrac -3 if (Model%satmedmf) Interstitial%nvdiff = Interstitial%nvdiff + 1 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 8936afe31..23c45bb60 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -4821,8 +4821,8 @@ type = real kind = kind_phys [train] - standard_name = accumulated_tendency_of_air_temperature_due_to_FA_scheme - long_name = accumulated tendency of air temperature due to FA MP scheme + 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