diff --git a/gfsphysics/GFS_layer/GFS_diagnostics.F90 b/gfsphysics/GFS_layer/GFS_diagnostics.F90 index 95f7f51e7..90f30f52b 100644 --- a/gfsphysics/GFS_layer/GFS_diagnostics.F90 +++ b/gfsphysics/GFS_layer/GFS_diagnostics.F90 @@ -1860,6 +1860,17 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%refl_10cm(:,:) enddo + idx = idx + 1 + ExtDiag(idx)%axes = 3 + ExtDiag(idx)%name = 'dkudiagnostic' + ExtDiag(idx)%desc = 'Eddy Diffusivity' + ExtDiag(idx)%unit = 'm2s-1' + ExtDiag(idx)%mod_name = 'gfs_phys' + allocate (ExtDiag(idx)%data(nblks)) + do nb = 1,nblks + ExtDiag(idx)%data(nb)%var3 => IntDiag(nb)%dkudiagnostic(:,:) + enddo + idx = idx + 1 ExtDiag(idx)%axes = 3 ExtDiag(idx)%name = 'cnvw' diff --git a/gfsphysics/GFS_layer/GFS_physics_driver.F90 b/gfsphysics/GFS_layer/GFS_physics_driver.F90 index 36266aab8..6abe26327 100644 --- a/gfsphysics/GFS_layer/GFS_physics_driver.F90 +++ b/gfsphysics/GFS_layer/GFS_physics_driver.F90 @@ -2361,17 +2361,17 @@ subroutine GFS_physics_driver & !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) !## CCPP ##* satmedmfvdifq.F/satmedmfvdifq_run Note: The conditional above is checked in satmedmfvdifq_init - call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiw, ntke, & - dvdt, dudt, dtdt, dqdt, & - Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & - Radtend%htrsw, Radtend%htrlw, xmu, garea, & - Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & - Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & - stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & - Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & - kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & - Model%dspfac, Model%bl_upfr, Model%bl_dnfr) + call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiw, ntke, & + dvdt, dudt, dtdt, dqdt, & + Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & + Radtend%htrsw, Radtend%htrlw, xmu, garea, & + Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & + Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & + stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & + Statein%prslk, Statein%phii, Statein%phil, dtp, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & + Model%dspfac, Model%bl_upfr, Model%bl_dnfr, Diag%dkudiagnostic) !*## CCPP ## endif elseif (Model%hybedmf) then @@ -2388,17 +2388,31 @@ subroutine GFS_physics_driver & Model%xkzm_s, lprnt, ipr, & Model%xkzminv, Model%moninq_fac) else - call moninedmf_hafs(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, dqdt,& - Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & - Radtend%htrsw, Radtend%htrlw, xmu, Statein%prsik(1,1), & - rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, Sfcprop%ffmm, & - Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & - wind, kpbl, Statein%prsi, del, Statein%prsl, & - Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl,& - gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & - Model%xkzm_s, lprnt, ipr, & - Model%xkzminv, Model%moninq_fac,islmsk) + if (Model%moninq_fac > -2) then + call moninedmf_hafs(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, dqdt, & + Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & + Radtend%htrsw, Radtend%htrlw, xmu, Statein%prsik(1,1), & + rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, Sfcprop%ffmm, & + Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & + wind, kpbl, Statein%prsi, del, Statein%prsl, & + Statein%prslk, Statein%phii, Statein%phil, dtp, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & + Model%xkzm_s, lprnt, ipr, & + Model%xkzminv, Model%moninq_fac,islmsk,Diag%dkudiagnostic) + else + call moninedmf_hafs_pzhu(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, & + dqdt, Statein%ugrs, Statein%vgrs, Statein%tgrs, Statein%qgrs, & + Radtend%htrsw, Radtend%htrlw, xmu, Statein%prsik(1,1), & + rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, Sfcprop%ffmm, & + Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & + wind, kpbl, Statein%prsi, del, Statein%prsl, & + Statein%prslk, Statein%phii, Statein%phil, dtp, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & + Model%xkzm_s, lprnt, ipr, & + Model%xkzminv, Model%moninq_fac,islmsk,Diag%dkudiagnostic) + endif endif ! if (lprnt) write(0,*)' dtdtm=',(dtdt(ipr,k),k=1,15) ! if (lprnt) write(0,*)' dqdtm=',(dqdt(ipr,k,1),k=1,15) @@ -2614,17 +2628,17 @@ subroutine GFS_physics_driver & !*## CCPP ## elseif (Model%isatmedmf == 1) then ! updated version of satmedmfvdif (May 2019) !## CCPP ##* satmedmfvdifq.F/satmedmfvdifq_run Note: The conditional above is checked in satmedmfvdifq_init - call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiwx, ntkev, & - dvdt, dudt, dtdt, dvdftra, & - Statein%ugrs, Statein%vgrs, Statein%tgrs, vdftra, & - Radtend%htrsw, Radtend%htrlw, xmu, garea, & - Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & - Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & - stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & - Statein%prslk, Statein%phii, Statein%phil, dtp, & - Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & - kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & - Model%dspfac, Model%bl_upfr, Model%bl_dnfr) + call satmedmfvdifq(ix, im, levs, nvdiff, ntcw, ntiwx, ntkev, & + dvdt, dudt, dtdt, dvdftra, & + Statein%ugrs, Statein%vgrs, Statein%tgrs, vdftra, & + Radtend%htrsw, Radtend%htrlw, xmu, garea, & + Statein%prsik(1,1), rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, & + Sfcprop%ffmm, Sfcprop%ffhh, Sfcprop%tsfc, hflx, evap, & + stress, wind, kpbl, Statein%prsi, del, Statein%prsl, & + Statein%prslk, Statein%phii, Statein%phil, dtp, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + kinver, Model%xkzm_m, Model%xkzm_h, Model%xkzm_s, & + Model%dspfac, Model%bl_upfr, Model%bl_dnfr, Diag%dkudiagnostic) !*## CCPP ## endif elseif (Model%hybedmf) then @@ -2645,6 +2659,7 @@ subroutine GFS_physics_driver & !*## CCPP ## !## CCPP ##* The following schemes are not in the CCPP yet. else + if ( Model%moninq_fac > -2 ) then call moninedmf_hafs(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, dvdftra, & Statein%ugrs, Statein%vgrs, Statein%tgrs, vdftra, & Radtend%htrsw, Radtend%htrlw, xmu, Statein%prsik(1,1), & @@ -2655,7 +2670,19 @@ subroutine GFS_physics_driver & Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & Model%xkzm_s, lprnt, ipr, & - Model%xkzminv, Model%moninq_fac,islmsk) + Model%xkzminv, Model%moninq_fac,islmsk, Diag%dkudiagnostic) + call moninedmf_hafs_pzhu(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, & + dvdftra, Statein%ugrs, Statein%vgrs, Statein%tgrs, vdftra, & + Radtend%htrsw, Radtend%htrlw, xmu, Statein%prsik(1,1), & + rb, Sfcprop%zorl, Diag%u10m, Diag%v10m, Sfcprop%ffmm, & + Sfcprop%ffhh, Sfcprop%tsfc, qss, hflx, evap, stress, & + wind, kpbl, Statein%prsi, del, Statein%prsl, & + Statein%prslk, Statein%phii, Statein%phil, dtp, & + Model%dspheat, dusfc1, dvsfc1, dtsfc1, dqsfc1, Diag%hpbl, & + gamt, gamq, dkt, kinver, Model%xkzm_m, Model%xkzm_h, & + Model%xkzm_s, lprnt, ipr, & + Model%xkzminv, Model%moninq_fac,islmsk, Diag%dkudiagnostic) + endif endif elseif (.not. Model%old_monin) then call moninq(ix, im, levs, nvdiff, ntcw, dvdt, dudt, dtdt, dvdftra, & diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 09ab1da2d..21b7955e4 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -1475,7 +1475,11 @@ module GFS_typedefs #endif !--- MP quantities for 3D diagnositics - real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm + real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm + + !--- Extra PBL diagnostics + real (kind=kind_phys), pointer :: dkudiagnostic(:,:) => null() !< Eddy diffusitivity from the EDMF and EDMF-TKE + ! !---vay-2018 UGWP-diagnostics daily mean ! @@ -5248,6 +5252,9 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics for Thompson MP / GFDL MP allocate (Diag%refl_10cm(IM,Model%levs)) + !--- New PBL Diagnostics + allocate (Diag%dkudiagnostic(IM,Model%levs)) + !-- New max hourly diag. allocate (Diag%refdmax(IM)) allocate (Diag%refdmax263k(IM)) @@ -5543,6 +5550,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) endif !----------------------------- +! Extra PBL diagnostics + Diag%dkudiagnostic = zero + ! max hourly diagnostics Diag%refl_10cm = zero Diag%refdmax = -35.