Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Noah MP updates for Prototype 8 (GFSv17) #387

Merged
merged 19 commits into from
Dec 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1542,6 +1542,7 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: evbsa (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: evcwa (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: snohfa (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: paha (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: transa (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: sbsnoa (:) => null() !< noah lsm diagnostics
real (kind=kind_phys), pointer :: snowca (:) => null() !< noah lsm diagnostics
Expand All @@ -1560,6 +1561,10 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: suntim (:) => null() !< sunshine duration time (s)
real (kind=kind_phys), pointer :: runoff (:) => null() !< total water runoff
real (kind=kind_phys), pointer :: ep (:) => null() !< potential evaporation
real (kind=kind_phys), pointer :: tecan (:) => null() !< total evaporation of intercepted water
real (kind=kind_phys), pointer :: tetran (:) => null() !< total transpiration rate
real (kind=kind_phys), pointer :: tedir (:) => null() !< total soil surface evaporation rate
real (kind=kind_phys), pointer :: twa (:) => null() !< total water storage in aquifer
real (kind=kind_phys), pointer :: cldwrk (:) => null() !< cloud workfunction (valid only with sas)
real (kind=kind_phys), pointer :: dugwd (:) => null() !< vertically integrated u change by OGWD
real (kind=kind_phys), pointer :: dvgwd (:) => null() !< vertically integrated v change by OGWD
Expand Down Expand Up @@ -1626,6 +1631,7 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: dtsfci (:) => null() !< instantaneous sfc sensible heat flux
real (kind=kind_phys), pointer :: dqsfci (:) => null() !< instantaneous sfc latent heat flux
real (kind=kind_phys), pointer :: gfluxi (:) => null() !< instantaneous sfc ground heat flux
real (kind=kind_phys), pointer :: pahi (:) => null() !< instantaneous precipitation advected heat flux
real (kind=kind_phys), pointer :: epi (:) => null() !< instantaneous sfc potential evaporation
real (kind=kind_phys), pointer :: smcwlt2(:) => null() !< wilting point (volumetric)
real (kind=kind_phys), pointer :: smcref2(:) => null() !< soil moisture threshold (volumetric)
Expand Down Expand Up @@ -1870,6 +1876,10 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: evap_water(:) => null() !<
real (kind=kind_phys), pointer :: evbs(:) => null() !<
real (kind=kind_phys), pointer :: evcw(:) => null() !<
real (kind=kind_phys), pointer :: pah(:) => null() !<
real (kind=kind_phys), pointer :: ecan(:) => null() !<
real (kind=kind_phys), pointer :: etran(:) => null() !<
real (kind=kind_phys), pointer :: edir(:) => null() !<
real (kind=kind_phys), pointer :: faerlw(:,:,:,:) => null() !<
real (kind=kind_phys), pointer :: faersw(:,:,:,:) => null() !<
real (kind=kind_phys), pointer :: ffhh_ice(:) => null() !<
Expand Down Expand Up @@ -6430,6 +6440,9 @@ subroutine diag_create (Diag, IM, Model)
allocate (Diag%ulwsfc (IM))
allocate (Diag%suntim (IM))
allocate (Diag%runoff (IM))
allocate (Diag%tecan (IM))
allocate (Diag%tetran (IM))
allocate (Diag%tedir (IM))
allocate (Diag%ep (IM))
allocate (Diag%cldwrk (IM))
allocate (Diag%dugwd (IM))
Expand Down Expand Up @@ -6491,6 +6504,12 @@ subroutine diag_create (Diag, IM, Model)
allocate (Diag%tdoms (IM))
allocate (Diag%zmtnblck (IM))

if(Model%lsm == Model%lsm_noahmp) then
allocate (Diag%paha (IM))
allocate (Diag%twa (IM))
allocate (Diag%pahi (IM))
endif

! F-A MP scheme
if (Model%imp_physics == Model%imp_physics_fer_hires) then
allocate (Diag%train (IM,Model%levs))
Expand Down Expand Up @@ -6694,6 +6713,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%ulwsfc = zero
Diag%suntim = zero
Diag%runoff = zero
Diag%tecan = zero
Diag%tetran = zero
Diag%tedir = zero
Diag%ep = zero
Diag%cldwrk = zero
Diag%dugwd = zero
Expand Down Expand Up @@ -6748,6 +6770,12 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%tdomip = zero
Diag%tdoms = zero

if(Model%lsm == Model%lsm_noahmp)then
Diag%paha = zero
Diag%twa = zero
Diag%pahi = zero
endif

if (Model%imp_physics == Model%imp_physics_fer_hires) then
Diag%train = zero
end if
Expand Down Expand Up @@ -6976,6 +7004,10 @@ subroutine interstitial_create (Interstitial, IM, Model)
allocate (Interstitial%evap_water (IM))
allocate (Interstitial%evbs (IM))
allocate (Interstitial%evcw (IM))
allocate (Interstitial%pah (IM))
allocate (Interstitial%ecan (IM))
allocate (Interstitial%etran (IM))
allocate (Interstitial%edir (IM))
allocate (Interstitial%faerlw (IM,Model%levr+LTP,NBDLW,NF_AELW))
allocate (Interstitial%faersw (IM,Model%levr+LTP,NBDSW,NF_AESW))
allocate (Interstitial%ffhh_ice (IM))
Expand Down Expand Up @@ -7665,6 +7697,10 @@ subroutine interstitial_phys_reset (Interstitial, Model)
Interstitial%evap_water = Model%huge
Interstitial%evbs = clear_val
Interstitial%evcw = clear_val
Interstitial%pah = clear_val
Interstitial%ecan = clear_val
Interstitial%etran = clear_val
Interstitial%edir = clear_val
Interstitial%ffhh_ice = Model%huge
Interstitial%ffhh_land = Model%huge
Interstitial%ffhh_water = Model%huge
Expand Down
73 changes: 73 additions & 0 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -6375,6 +6375,14 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[paha]
climbfuji marked this conversation as resolved.
Show resolved Hide resolved
standard_name = cumulative_precipitation_advected_heat_flux_multiplied_by_timestep
long_name = cumulative precipitation advected heat flux multiplied by timestep
units = W m-2 s
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme)
[transa]
standard_name = cumulative_transpiration_flux_multiplied_by_timestep
long_name = cumulative total plant transpiration rate multiplied by timestep
Expand Down Expand Up @@ -6551,6 +6559,35 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[tecan]
standard_name = total_evaporation_of_intercepted_water
long_name = total evaporation of intercepted water
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[tetran]
standard_name = total_transpiration_rate
long_name = total transpiration rate
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[tedir]
standard_name = total_soil_surface_evaporation_rate
long_name = total soil surface evaporation rate
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[twa]
standard_name = total_water_storage_in_aquifer
long_name = total water storage in aquifer
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme)
[cldwrk]
standard_name = cumulative_cloud_work_function
long_name = cumulative cloud work function (valid only with sas)
Expand Down Expand Up @@ -6838,6 +6875,14 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[pahi]
standard_name = instantaneous_total_precipitation_advected_heat
long_name = instantaneous precipitation advected heat - total
units = W m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
active = (control_for_land_surface_scheme == identifier_for_noahmp_land_surface_scheme)
[epi]
standard_name = instantaneous_surface_potential_evaporation
long_name = instantaneous sfc potential evaporation
Expand Down Expand Up @@ -8174,6 +8219,34 @@
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[pah]
standard_name = total_precipitation_advected_heat
long_name = precipitation advected heat - total
units = W m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[ecan]
standard_name = evaporation_of_intercepted_water
long_name = evaporation of intercepted water
units = kg m-2 s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[etran]
standard_name = transpiration_rate
long_name = transpiration rate
units = kg m-2 s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[edir]
standard_name = soil_surface_evaporation_rate
long_name = soil surface evaporation rate
units = kg m-2 s-1
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[faerlw]
standard_name = aerosol_optical_properties_for_longwave_bands_01_16
long_name = aerosol optical properties for longwave bands 01-16
Expand Down
84 changes: 84 additions & 0 deletions ccpp/driver/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -977,6 +977,20 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%snohfa(:)
enddo

if (Model%lsm == Model%lsm_noahmp) then
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'pah_ave'
ExtDiag(idx)%desc = ' Total Precipitation Advected Heat - GFS lsm'
ExtDiag(idx)%unit = 'W/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%time_avg = .TRUE.
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%paha(:)
enddo
endif

idx = idx + 1
ExtDiag(idx)%axes = 2
Expand Down Expand Up @@ -1199,6 +1213,52 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%runoff(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'ecan_acc'
ExtDiag(idx)%desc = 'total evaporation of intercepted water'
ExtDiag(idx)%unit = 'kg/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tecan(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'etran_acc'
ExtDiag(idx)%desc = 'total plant transpiration'
ExtDiag(idx)%unit = 'kg/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tetran(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'edir_acc'
ExtDiag(idx)%desc = 'total soil surface evaporation'
ExtDiag(idx)%unit = 'kg/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%tedir(:)
enddo

if (Model%lsm == Model%lsm_noahmp) then
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'wa_acc'
ExtDiag(idx)%desc = 'total water storage in aquifer'
ExtDiag(idx)%unit = 'kg/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%twa(:)
enddo
endif

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'pevpr_ave'
Expand Down Expand Up @@ -1856,6 +1916,19 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%gfluxi(:)
enddo

if (Model%lsm == Model%lsm_noahmp) then
idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'pahi'
ExtDiag(idx)%desc = 'instantaneous precipitation advected heat flux'
ExtDiag(idx)%unit = 'W/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%pahi(:)
enddo
endif

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'pevpr'
Expand Down Expand Up @@ -2739,6 +2812,17 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%int2 => Sfcprop(nb)%stype(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'lfrac'
ExtDiag(idx)%desc = 'land fraction'
ExtDiag(idx)%unit = 'fraction [0:1]'
ExtDiag(idx)%mod_name = 'gfs_sfc'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => Sfcprop(nb)%landfrac(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'q2m'
Expand Down
Loading