diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.F90 index cd8e1881f..103281609 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.F90 @@ -499,6 +499,8 @@ subroutine GFS_MP_generic_post_run( do k=1,levs do i=1,im dtend(i,k,idtend) = dtend(i,k,idtend) + (gq0(i,k,itrac)-save_q(i,k,itrac)) * frain +!if(itrac==3) & +!print*,'YYYY, itrac,gq0(i,k,itrac),save_q(i,k,itrac),frain,dtend(i,k,idtend)', itrac,gq0(i,k,itrac),save_q(i,k,itrac),frain,dtend(i,k,idtend) enddo enddo endif diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.meta index eda9eab1d..7667906f8 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_post.meta @@ -437,7 +437,7 @@ dimensions = (horizontal_loop_extent,vertical_layer_dimension,number_of_tracers) type = real kind = kind_phys - intent = inout + intent = in [rain0] standard_name = lwe_thickness_of_explicit_rain_amount long_name = explicit rain on physics timestep diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_pre.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_pre.F90 index 32b097e1d..18e627b41 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_pre.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_MP_generic_pre.F90 @@ -56,7 +56,6 @@ subroutine GFS_MP_generic_pre_run(im, levs, ldiag3d, qdiag3d, do_aw, progsigma, enddo endif endif - end subroutine GFS_MP_generic_pre_run end module GFS_MP_generic_pre diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_common.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_common.F90 index 5f09f5347..58736f731 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_common.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_common.F90 @@ -11,7 +11,7 @@ module GFS_PBL_generic_common contains - subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, & + subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6,imp_physics_wsm6_mmm, & imp_physics_thompson, ltaerosol,mraerosol, & imp_physics_mg, ntgl, imp_physics_gfdl, & imp_physics_zhao_carr, imp_physics_nssl,& @@ -19,7 +19,7 @@ subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, & errmsg, errflg) implicit none ! - integer, intent(in ) :: imp_physics, imp_physics_wsm6, & + integer, intent(in ) :: imp_physics, imp_physics_wsm6, imp_physics_wsm6_mmm, & imp_physics_thompson, & imp_physics_mg, ntgl, imp_physics_gfdl, & imp_physics_zhao_carr,imp_physics_nssl @@ -31,9 +31,9 @@ subroutine set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, & errflg = 0 ! Set Interstitial%kk = last index in diffused tracer array before chemistry-aerosol tracers - if (imp_physics == imp_physics_wsm6) then + if (imp_physics == imp_physics_wsm6 .or. imp_physics == imp_physics_wsm6_mmm) then ! WSM6 - kk = 4 + kk = 7 elseif (imp_physics == imp_physics_thompson) then ! Thompson if(ltaerosol) then diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.F90 index a4e5f172a..894767aa2 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.F90 @@ -11,7 +11,7 @@ module GFS_PBL_generic_post subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, & ntqv, ntcw, ntiw, ntrw, ntsw, ntlnc, ntinc, ntrnc, ntsnc, ntgnc, ntwa, ntia, ntgl, ntoz, ntke, ntkev,nqrimef, & trans_aero, ntchs, ntchm, ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz, & - imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_zhao_carr, imp_physics_mg, & + imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_wsm6_mmm, imp_physics_zhao_carr, imp_physics_mg, & imp_physics_fer_hires, imp_physics_nssl, nssl_ccn_on, ltaerosol, mraerosol, nssl_hail_on, nssl_3moment, & cplflx, cplaqm, cplchm, lssav, flag_for_pbl_generic_tend, ldiag3d, lsidea, hybedmf, do_shoc, satmedmf, & shinhong, do_ysu, dvdftra, dusfc1, dvsfc1, dtsfc1, dqsfc1, dtf, dudt, dvdt, dtdt, htrsw, htrlw, xmu, & @@ -32,7 +32,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, integer, intent(in) :: ntqv, ntcw, ntiw, ntrw, ntsw, ntlnc, ntinc, ntrnc, ntsnc, ntgnc, ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef integer, intent(in) :: ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz logical, intent(in) :: trans_aero - integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6 + integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_wsm6_mmm integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires integer, intent(in) :: imp_physics_nssl logical, intent(in) :: nssl_ccn_on, nssl_hail_on, nssl_3moment @@ -103,7 +103,7 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, ! if (trans_aero) then ! Set kk if chemistry-aerosol tracers are diffused - call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, & + call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, imp_physics_wsm6_mmm, & imp_physics_thompson, ltaerosol,mraerosol, & imp_physics_mg, ntgl, imp_physics_gfdl, & imp_physics_zhao_carr, imp_physics_nssl,& @@ -122,14 +122,17 @@ subroutine GFS_PBL_generic_post_run (im, levs, nvdiff, ntrac, enddo endif ! - if (imp_physics == imp_physics_wsm6) then + if (imp_physics == imp_physics_wsm6 .or. imp_physics == imp_physics_wsm6_mmm) then ! WSM6 do k=1,levs do i=1,im - dqdt(i,k,ntqv) = dvdftra(i,k,1) - dqdt(i,k,ntcw) = dvdftra(i,k,2) - dqdt(i,k,ntiw) = dvdftra(i,k,3) - dqdt(i,k,ntoz) = dvdftra(i,k,4) + dqdt(i,k,ntqv) = dvdftra(i,k,1) + dqdt(i,k,ntcw) = dvdftra(i,k,2) + dqdt(i,k,ntiw) = dvdftra(i,k,3) + dqdt(i,k,ntrw) = dvdftra(i,k,4) + dqdt(i,k,ntsw) = dvdftra(i,k,5) + dqdt(i,k,ntgl) = dvdftra(i,k,6) + dqdt(i,k,ntoz) = dvdftra(i,k,7) enddo enddo diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.meta index d49a885c5..4c2537f92 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_post.meta @@ -260,6 +260,13 @@ dimensions = () type = integer intent = in +[imp_physics_wsm6_mmm] + standard_name = identifier_for_wsm6_mmm_microphysics_scheme + long_name = choice of WSM6 MMM microphysics scheme + units = flag + dimensions = () + type = integer + intent = in [imp_physics_zhao_carr] standard_name = identifier_for_zhao_carr_microphysics_scheme long_name = choice of Zhao-Carr microphysics scheme diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.F90 index d8ed0f8fc..47e92ef3a 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.F90 @@ -13,7 +13,7 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index, ntqv, ntcw, ntiw, ntrw, ntsw, ntlnc, ntinc, ntrnc, ntsnc, ntgnc, & ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef, trans_aero, ntchs, ntchm, & ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz, & - imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, & + imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_wsm6_mmm, & imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires, imp_physics_nssl, & ltaerosol, mraerosol, nssl_ccn_on, nssl_hail_on, nssl_3moment, & hybedmf, do_shoc, satmedmf, qgrs, vdftra, save_u, save_v, save_t, save_q, & @@ -31,7 +31,7 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index, integer, intent(in) :: ntwa, ntia, ntgl, ntoz, ntke, ntkev, nqrimef,ntchs, ntchm integer, intent(in) :: ntccn, nthl, nthnc, ntgv, nthv, ntrz, ntgz, nthz logical, intent(in) :: trans_aero, ldiag3d, qdiag3d, lssav - integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6 + integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, imp_physics_wsm6_mmm integer, intent(in) :: imp_physics_zhao_carr, imp_physics_mg, imp_physics_fer_hires logical, intent(in) :: ltaerosol, hybedmf, do_shoc, satmedmf, flag_for_pbl_generic_tend, mraerosol integer, intent(in) :: imp_physics_nssl @@ -62,17 +62,20 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index, vdftra = qgrs rtg_ozone_index = ntoz else - if (imp_physics == imp_physics_wsm6) then + if (imp_physics == imp_physics_wsm6 .or. imp_physics == imp_physics_wsm6_mmm) then ! WSM6 do k=1,levs do i=1,im - vdftra(i,k,1) = qgrs(i,k,ntqv) - vdftra(i,k,2) = qgrs(i,k,ntcw) - vdftra(i,k,3) = qgrs(i,k,ntiw) - vdftra(i,k,4) = qgrs(i,k,ntoz) + vdftra(i,k,1) = qgrs(i,k,ntqv) + vdftra(i,k,2) = qgrs(i,k,ntcw) + vdftra(i,k,3) = qgrs(i,k,ntiw) + vdftra(i,k,4) = qgrs(i,k,ntrw) + vdftra(i,k,5) = qgrs(i,k,ntsw) + vdftra(i,k,6) = qgrs(i,k,ntgl) + vdftra(i,k,7) = qgrs(i,k,ntoz) enddo enddo - rtg_ozone_index = 4 + rtg_ozone_index = 7 ! Ferrier-Aligo elseif (imp_physics == imp_physics_fer_hires) then @@ -272,7 +275,7 @@ subroutine GFS_PBL_generic_pre_run (im, levs, nvdiff, ntrac, rtg_ozone_index, endif ! if (trans_aero) then - call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, & + call set_aerosol_tracer_index(imp_physics, imp_physics_wsm6, imp_physics_wsm6_mmm, & imp_physics_thompson, ltaerosol,mraerosol, & imp_physics_mg, ntgl, imp_physics_gfdl, & imp_physics_zhao_carr, imp_physics_nssl,& diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.meta index 7a8e72bba..bcf6cb5da 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_PBL_generic_pre.meta @@ -266,6 +266,13 @@ dimensions = () type = integer intent = in +[imp_physics_wsm6_mmm] + standard_name = identifier_for_wsm6_mmm_microphysics_scheme + long_name = choice of WSM6 MMM microphysics scheme + units = flag + dimensions = () + type = integer + intent = in [imp_physics_zhao_carr] standard_name = identifier_for_zhao_carr_microphysics_scheme long_name = choice of Zhao-Carr microphysics scheme diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_debug.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_debug.F90 index ed26b795f..b5c7fe14e 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_debug.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_debug.F90 @@ -1392,7 +1392,7 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%clxss ', Interstitial%clxss ) end if ! GFDL and Thompson MP - if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_nssl) then + if (Model%imp_physics == Model%imp_physics_gfdl .or. Model%imp_physics == Model%imp_physics_thompson .or. Model%imp_physics == Model%imp_physics_nssl .or. Model%imp_physics == Model%imp_physics_wsm6_mmm) then call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%graupelmp ', Interstitial%graupelmp ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%icemp ', Interstitial%icemp ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%rainmp ', Interstitial%rainmp ) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90 index c1d4afa98..90a712551 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_rrtmg_pre.F90 @@ -721,7 +721,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,& ccnd(i,k,4) = tracer1(i,k,ntsw) ! snow water enddo enddo - elseif (ncnd == 5 .or. ncnd == 6) then ! GFDL MP, Thompson, MG3, NSSL + elseif (ncnd == 5 .or. ncnd == 6) then ! GFDL MP, Thompson, MG3, NSSL, MMM WSM6 do k=1,LMK do i=1,IM ccnd(i,k,1) = tracer1(i,k,ntcw) ! liquid water @@ -880,6 +880,22 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,& ! not used yet -- effr_in should always be true for now endif + elseif (imp_physics == imp_physics_wsm6_mmm ) then ! MMM WSM6 MP + cldcov = 0.0 + if(effr_in) then + do k=1,lm + k1 = k + kd + do i=1,im + effrl(i,k1) = effrl_inout(i,k)! re_cloud (i,k) + effri(i,k1) = effri_inout(i,k)! re_ice (i,k) + effrr(i,k1) = effrr_in(i,k) + effrs(i,k1) = effrs_inout(i,k) ! re_snow(i,k) + enddo + enddo + else + ! not used yet -- effr_in should always be true for now + endif + elseif (imp_physics == imp_physics_thompson) then ! Thompson MP ! ! Compute effective radii for QC, QI, QS with (GF, MYNN) or without (all others) sub-grid clouds diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_suite_interstitial_4.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_suite_interstitial_4.F90 index 746d02205..130804e9a 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_suite_interstitial_4.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_suite_interstitial_4.F90 @@ -211,7 +211,7 @@ subroutine GFS_suite_interstitial_4_run (im, levs, ltaerosol, tracers_total, ntr enddo endif - if ((imp_physics == imp_physics_thompson .or. imp_physics == imp_physics_wsm6_mmm) & + if ((imp_physics == imp_physics_thompson) & .and. (ntlnc>0 .or. ntinc>0)) then if_convert_dry_rho: if (convert_dry_rho) then do k=1,levs diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.F90 index cd1016053..9d6598340 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.F90 @@ -25,7 +25,7 @@ module maximum_hourly_diagnostics subroutine maximum_hourly_diagnostics_run(im, levs, reset, lradar, imp_physics, & imp_physics_gfdl, imp_physics_thompson, & imp_physics_fer_hires, imp_physics_nssl, & - con_g, phil, & + imp_physics_wsm6_mmm, con_g, phil, & gt0, refl_10cm, refdmax, refdmax263k, u10m, v10m, & u10max, v10max, spd10max, pgr, t2m, q2m, t02max, & t02min, rh02max, rh02min, dtp, rain, pratemax, & @@ -37,7 +37,7 @@ subroutine maximum_hourly_diagnostics_run(im, levs, reset, lradar, imp_physics, integer, intent(in) :: im, levs, kdt logical, intent(in) :: reset, lradar, lightning_threat integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_fer_hires, & - imp_physics_nssl + imp_physics_nssl, imp_physics_wsm6_mmm real(kind_phys), intent(in ) :: con_g real(kind_phys), intent(in ) :: con_rd real(kind_phys), intent(in ) :: phil(:,:) @@ -86,7 +86,8 @@ subroutine maximum_hourly_diagnostics_run(im, levs, reset, lradar, imp_physics, if (lradar .and. (imp_physics == imp_physics_gfdl .or. & imp_physics == imp_physics_thompson .or. & imp_physics == imp_physics_fer_hires .or. & - imp_physics == imp_physics_nssl )) then + imp_physics == imp_physics_nssl .or. & + imp_physics == imp_physics_wsm6_mmm)) then allocate(refd(im)) allocate(refd263k(im)) call max_fields(phil,refl_10cm,con_g,im,levs,refd,gt0,refd263k) diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.meta b/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.meta index 0c2d1bcbe..61d4ced1b 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.meta +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/maximum_hourly_diagnostics.meta @@ -70,6 +70,13 @@ dimensions = () type = integer intent = in +[imp_physics_wsm6_mmm] + standard_name = identifier_for_wsm6_mmm_microphysics_scheme + long_name = choice of WSM6 MMM microphysics scheme + units = flag + dimensions = () + type = integer + intent = in [con_g] standard_name = gravitational_acceleration long_name = gravitational acceleration diff --git a/physics/MP/wsm6/scm_mp_wsm6_post.F90 b/physics/MP/wsm6/scm_mp_wsm6_post.F90 old mode 100644 new mode 100755 index ba885f1a1..4276d94a7 --- a/physics/MP/wsm6/scm_mp_wsm6_post.F90 +++ b/physics/MP/wsm6/scm_mp_wsm6_post.F90 @@ -16,7 +16,7 @@ module scm_mp_wsm6_post implicit none - public :: scm_mp_wsm6_post_finalize + public :: scm_mp_wsm6_post_run private @@ -29,7 +29,7 @@ module scm_mp_wsm6_post !> \section arg_table_scm_mp_wsm6_finalize Argument Table !! \htmlinclude scm_mp_wsm6_finalize.html !! - subroutine scm_mp_wsm6_post_finalize(errmsg, errflg) + subroutine scm_mp_wsm6_post_run(errmsg, errflg) implicit none @@ -48,6 +48,6 @@ subroutine scm_mp_wsm6_post_finalize(errmsg, errflg) is_initialized = .false. - end subroutine scm_mp_wsm6_post_finalize + end subroutine scm_mp_wsm6_post_run end module scm_mp_wsm6_post diff --git a/physics/MP/wsm6/scm_mp_wsm6_post.meta b/physics/MP/wsm6/scm_mp_wsm6_post.meta old mode 100644 new mode 100755 index bfa6acaeb..3bc59dbc9 --- a/physics/MP/wsm6/scm_mp_wsm6_post.meta +++ b/physics/MP/wsm6/scm_mp_wsm6_post.meta @@ -6,7 +6,7 @@ ######################################################################## [ccpp-arg-table] - name = scm_mp_wsm6_finalize + name = scm_mp_wsm6_post_run type = scheme [errmsg] standard_name = ccpp_error_message @@ -24,4 +24,4 @@ type = integer intent = out -######################################################################## \ No newline at end of file +######################################################################## diff --git a/physics/MP/wsm6/scm_mp_wsm6_pre.F90 b/physics/MP/wsm6/scm_mp_wsm6_pre.F90 deleted file mode 100644 index 8fcee2c54..000000000 --- a/physics/MP/wsm6/scm_mp_wsm6_pre.F90 +++ /dev/null @@ -1,57 +0,0 @@ -!>\file scm_mp_wsm6_pre.F90 -!! This file runs the Single-Moment 6-class Microphysics scheme (WSM6) - - -!>\defgroup aathompson Aerosol-Aware Thompson MP Module -!! This module runs the Single-Moment 6-class Microphysics scheme (WSM6) -module scm_mp_wsm6_pre - - use ccpp_kinds, only : kind_phys - use mp_wsm6, only : mp_wsm6_init - - implicit none - - public :: scm_mp_wsm6_pre_init - - private - - logical :: is_initialized = .False. - - contains - -!> This subroutine is a wrapper around the actual mp_wsm6_init(). -!! \section arg_table_scm_mp_wsm6_init Argument Table -!! \htmlinclude scm_mp_wsm6_init.html -!! - subroutine scm_mp_wsm6_pre_init(den0, denr, dens, cl, & - cpv, hail_opt, errmsg, errflg) - - implicit none - ! Input arguments: - real(kind=kind_phys), intent(in ) :: den0 - real(kind=kind_phys), intent(in ) :: denr - real(kind=kind_phys), intent(in ) :: dens - real(kind=kind_phys), intent(in ) :: cl - real(kind=kind_phys), intent(in ) :: cpv - integer, intent(in ) :: hail_opt - - ! CCPP error handling - character(len=*), intent( out) :: errmsg - integer, intent( out) :: errflg - - ! Initialize the CCPP error handling variables - errmsg = '' - errflg = 0 - - if (is_initialized) return - - ! Call wsm6 init - call mp_wsm6_init(den0, denr, dens, cl, & - cpv, hail_opt, errmsg, errflg) - - if (errflg /= 0) return - - is_initialized = .true. - - end subroutine scm_mp_wsm6_pre_init -end module scm_mp_wsm6_pre diff --git a/physics/MP/wsm6/scm_mp_wsm6_pre.meta b/physics/MP/wsm6/scm_mp_wsm6_pre.meta deleted file mode 100644 index 85752842c..000000000 --- a/physics/MP/wsm6/scm_mp_wsm6_pre.meta +++ /dev/null @@ -1,71 +0,0 @@ -[ccpp-table-properties] - name = scm_mp_wsm6_pre - type = scheme - dependencies = ../../hooks/mmm_kinds.F90, ../../mmm_physics/mp_wsm6.F90 - -######################################################################## -[ccpp-arg-table] - name = scm_mp_wsm6_init - type = scheme -[den0] - standard_name = density_of_dry_air - long_name = density of dry air - units = kg m-3 - dimensions = () - type = real - kind = kind_phys - intent = in -[denr] - standard_name = fresh_liquid_water_density_at_0c - long_name = density of liquid water - units = kg m-3 - dimensions = () - type = real - kind = kind_phys - intent = in -[dens] - standard_name = density_of_snow - long_name = density of snow - units = kg m-3 - dimensions = () - type = real - kind = kind_phys - intent = in -[cl] - standard_name = specific_heat_of_liquid_water_at_constant_pressure - long_name = specific heat of liquid water at constant pressure - units = J kg-1 K-1 - dimensions = () - type = real - kind = kind_phys - intent = in -[cpv] - standard_name = four_times_gas_constant_water_vapor - long_name = four times the gas constant water vapor - units = J kg-1 K-1 - dimensions = () - type = real - kind = kind_phys - intent = in -[hail_opt] - standard_name = flag_for_hail_instead_of_graupel_parameters - long_name = flag for hail instead of graupel parameters (graupel if false) - units = flag - dimensions = () - type = integer - intent = in -[errmsg] - standard_name = ccpp_error_message - long_name = error message for error handling in CCPP - units = none - dimensions = () - type = character - kind = len=* - intent = out -[errflg] - standard_name = ccpp_error_code - long_name = error code for error handling in CCPP - units = 1 - dimensions = () - type = integer - intent = out diff --git a/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.F90 b/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.F90 index 487753027..7d97fe468 100644 --- a/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.F90 +++ b/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.F90 @@ -155,7 +155,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & icloud_bl, do_mynnsfclay, & & imp_physics, imp_physics_gfdl, & & imp_physics_thompson, imp_physics_wsm6, & - & imp_physics_fa, & + & imp_physics_wsm6_mmm, imp_physics_fa, & & chem3d, frp, mix_chem, rrfs_sd, enh_mix, & & nchem, ndvel, vdep, smoke_dbg, & & imp_physics_nssl, nssl_ccn_on, & @@ -203,7 +203,7 @@ SUBROUTINE mynnedmf_wrapper_run( & & bl_mynn_cloudmix, & & bl_mynn_mixqt, & & bl_mynn_output, & - & imp_physics, imp_physics_wsm6, & + & imp_physics,imp_physics_wsm6,imp_physics_wsm6_mmm, & & imp_physics_thompson, imp_physics_gfdl, & & imp_physics_nssl, imp_physics_fa, & & spp_pbl, & @@ -388,6 +388,30 @@ SUBROUTINE mynnedmf_wrapper_run( & qnbca(i,k) = 0. enddo enddo + elseif ( imp_physics == imp_physics_wsm6_mmm ) then + ! MMM WSM6 + FLAG_QI = .true. + FLAG_QNI= .false. + FLAG_QC = .true. + FLAG_QNC= .false. + FLAG_QS = .true. + FLAG_QNWFA= .false. + FLAG_QNIFA= .false. + FLAG_QNBCA= .false. + do k=1,levs + do i=1,im + sqv(i,k) = qgrs_water_vapor(i,k) + sqc(i,k) = qgrs_liquid_cloud(i,k) + sqi(i,k) = qgrs_ice(i,k) + sqs(i,k) = qgrs_snow(i,k) + ozone(i,k) = qgrs_ozone(i,k) + qnc(i,k) = 0. + qni(i,k) = 0. + qnwfa(i,k) = 0. + qnifa(i,k) = 0. + qnbca(i,k) = 0. + enddo + enddo elseif (imp_physics == imp_physics_nssl ) then ! NSSL FLAG_QI = .true. @@ -802,7 +826,7 @@ SUBROUTINE mynnedmf_wrapper_run( & !enddo !DO moist/scalar/tracer tendencies: - if (imp_physics == imp_physics_wsm6 .or. imp_physics == imp_physics_fa) then + if (imp_physics == imp_physics_wsm6 .or. imp_physics == imp_physics_wsm6_mmm .or. imp_physics == imp_physics_fa) then ! WSM6 do k=1,levs do i=1,im diff --git a/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.meta b/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.meta index 00589dfe5..d3055397c 100644 --- a/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.meta +++ b/physics/PBL/MYNN_EDMF/mynnedmf_wrapper.meta @@ -1362,6 +1362,13 @@ dimensions = () type = integer intent = in +[imp_physics_wsm6_mmm] + standard_name = identifier_for_wsm6_mmm_microphysics_scheme + long_name = choice of WSM6 MMM microphysics scheme + units = flag + dimensions = () + type = integer + intent = in [imp_physics_fa] standard_name = identifier_for_fer_hires_microphysics_scheme long_name = choice of Ferrier-Aligo microphysics scheme diff --git a/physics/Radiation/radiation_clouds.f b/physics/Radiation/radiation_clouds.f index d90209b1d..8b9d3ad15 100644 --- a/physics/Radiation/radiation_clouds.f +++ b/physics/Radiation/radiation_clouds.f @@ -28,6 +28,7 @@ ! ntrac, ntcw, ntiw, ntrw, ntsw, ntgl, ntclamt, ! ! imp_physics, imp_physics_nssl, imp_physics_fer_hires, ! ! imp_physics_gfdl, imp_physics_thompson, imp_physics_wsm6, ! +! imp_physics_wsm6_mmm, ! ! imp_physics_zhao_carr, imp_physics_zhao_carr_pdf, ! ! imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, ! ! iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, ! @@ -438,6 +439,7 @@ subroutine radiation_clouds_prop & ! imp_physics_gfdl : GFDL microphysics scheme ! ! imp_physics_thompson : Thompson microphysics scheme ! ! imp_physics_wsm6 : WSMG microphysics scheme ! +! imp_physics_wsm6_mmm : MMM WSMG microphysics scheme ! ! imp_physics_zhao_carr : Zhao-Carr microphysics scheme ! ! imp_physics_zhao_carr_pdf : Zhao-Carr microphysics scheme with PDF clouds ! imp_physics_mg : Morrison-Gettelman microphysics scheme ! @@ -821,21 +823,42 @@ subroutine radiation_clouds_prop & !!\n =6: WSM6 microphysics elseif(imp_physics == imp_physics_wsm6_mmm) then ! Thompson MP - ! MYNN PBL or GF convective are not used - call progcld_thompson_wsm6 (plyr,plvl,tlyr,qlyr,qstl, & ! --- outputs ! inout ! --- inputs - & rhly,tracer1,xlat,xlon,slmsk,dz,delp, & - & ntrac-1, ntcw-1,ntiw-1,ntrw-1, & - & ntsw-1,ntgl-1,con_ttp, & - & IX, NLAY, NLP1, uni_cld, lmfshal, lmfdeep2, & - & cldcov(:,1:NLAY), cnvw, effrl_inout, & - & effri_inout, effrs_inout, & - & lwp_ex, iwp_ex, lwp_fc, iwp_fc, & - & dzlay, & - & cldtot, cldcnv, lcnorm, & - & cld_frac, cld_lwp, cld_reliq, cld_iwp, & - & cld_reice, cld_rwp, cld_rerain,cld_swp, & - & cld_resnow) + if(do_mynnedmf .or. imfdeepcnv == imfdeepcnv_gf .or. & + & imfdeepcnv == imfdeepcnv_c3) then ! MYNN PBL or GF or unified conv + !-- MYNN PBL or convective GF + !-- use cloud fractions with SGS clouds + do k=1,NLAY + do i=1,IX + cld_frac(i,k) = clouds1(i,k) + enddo + enddo + ! --- use clduni with the NSSL microphysics. + ! --- make sure that effr_in=.true. in the input.nml! + call progclduni (plyr, plvl, tlyr, tvly, ccnd, ncndl, & ! --- inputs + & xlat, xlon, slmsk, dz, delp, IX, NLAY, NLP1, & + & cld_frac, & + & effrl, effri, effrr, effrs, effr_in , & + & dzlay, & + & cldtot, cldcnv, lcrick, lcnorm, con_ttp, & ! inout + & cld_frac, cld_lwp, cld_reliq, cld_iwp, & ! --- outputs + & cld_reice,cld_rwp, cld_rerain,cld_swp, & + & cld_resnow) + else + ! MYNN PBL or GF convective are not used + call progcld_thompson_wsm6 (plyr,plvl,tlyr,qlyr,qstl, & ! --- inputs + & rhly,tracer1,xlat,xlon,slmsk,dz,delp, & + & ntrac-1, ntcw-1,ntiw-1,ntrw-1, & + & ntsw-1,ntgl-1,con_ttp, & + & IX, NLAY, NLP1, uni_cld, lmfshal, lmfdeep2, & + & cldcov(:,1:NLAY), cnvw, effrl, effri, effrs, & + & lwp_ex, iwp_ex, lwp_fc, iwp_fc, & + & dzlay, & + & cldtot, cldcnv, lcnorm, & ! inout + & cld_frac, cld_lwp, cld_reliq, cld_iwp, & ! --- outputs + & cld_reice,cld_rwp, cld_rerain,cld_swp, & + & cld_resnow) + endif ! MYNN PBL or GF endif ! end if_imp_physics diff --git a/physics/mmm_physics b/physics/mmm_physics index e8758f126..c48ef4754 160000 --- a/physics/mmm_physics +++ b/physics/mmm_physics @@ -1 +1 @@ -Subproject commit e8758f1267def421011d131d0a80e93fce274299 +Subproject commit c48ef47540f2ae63dc9e4682b00b52c3a8471f70