Skip to content

Commit

Permalink
Merge pull request #2 from hafs-community/feature/add_km
Browse files Browse the repository at this point in the history
Adding Eddy Diffusivity Output
  • Loading branch information
JiliDong-NOAA authored Mar 5, 2020
2 parents a38a8ce + 15e02d9 commit 4337792
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 35 deletions.
11 changes: 11 additions & 0 deletions gfsphysics/GFS_layer/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
95 changes: 61 additions & 34 deletions gfsphysics/GFS_layer/GFS_physics_driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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), &
Expand All @@ -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, &
Expand Down
12 changes: 11 additions & 1 deletion gfsphysics/GFS_layer/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
!
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 4337792

Please sign in to comment.