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

New Thompson cloud fraction (updated subroutine cal_cldfra3) #432

Merged
merged 15 commits into from
Dec 10, 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
22 changes: 20 additions & 2 deletions ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1671,6 +1671,12 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: cldfra (:,:) => null() !< instantaneous 3D cloud fraction
!--- MP quantities for 3D diagnositics
real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm
real (kind=kind_phys), pointer :: cldfra2d (:) => null() !< instantaneous 2D cloud fraction
real (kind=kind_phys), pointer :: total_albedo (:) => null() !< total sky (with cloud) albedo at toa
real (kind=kind_phys), pointer :: lwp_ex (:) => null() !< liquid water path from microphysics
real (kind=kind_phys), pointer :: iwp_ex (:) => null() !< ice water path from microphysics
real (kind=kind_phys), pointer :: lwp_fc (:) => null() !< liquid water path from cloud fraction scheme
real (kind=kind_phys), pointer :: iwp_fc (:) => null() !< ice water path from cloud fraction scheme

!--- Extra PBL diagnostics
real (kind=kind_phys), pointer :: dkt(:,:) => null() !< Eddy diffusitivity for heat
Expand Down Expand Up @@ -6518,7 +6524,13 @@ subroutine diag_create (Diag, IM, Model)
if (Model%imp_physics == Model%imp_physics_fer_hires) then
allocate (Diag%train (IM,Model%levs))
end if
allocate (Diag%cldfra (IM,Model%levs))
allocate (Diag%cldfra (IM,Model%levr+LTP))
allocate (Diag%cldfra2d (IM))
allocate (Diag%total_albedo (IM))
allocate (Diag%lwp_ex (IM))
allocate (Diag%iwp_ex (IM))
allocate (Diag%lwp_fc (IM))
allocate (Diag%iwp_fc (IM))

!--- 3D diagnostics
if (Model%ldiag3d) then
Expand Down Expand Up @@ -6784,6 +6796,12 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%train = zero
end if
Diag%cldfra = zero
Diag%cldfra2d = zero
Diag%total_albedo = zero
Diag%lwp_ex = zero
Diag%iwp_ex = zero
Diag%lwp_fc = zero
Diag%iwp_fc = zero

Diag%totprcpb = zero
Diag%cnvprcpb = zero
Expand Down Expand Up @@ -6894,7 +6912,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center)
Diag%dku = zero

! max hourly diagnostics
Diag%refl_10cm = zero
Diag%refl_10cm = -35.
Diag%refdmax = -35.
Diag%refdmax263k = -35.
Diag%t02max = -999.
Expand Down
42 changes: 42 additions & 0 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -7087,6 +7087,48 @@
dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation)
type = real
kind = kind_phys
[cldfra2d]
standard_name = max_in_column_cloud_fraction
long_name = instantaneous 2D (max-in-column) cloud fraction
units = frac
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[lwp_ex]
standard_name = liq_water_path_from_microphysics
long_name = total liquid water path from explicit microphysics
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[iwp_ex]
standard_name = ice_water_path_from_microphysics
long_name = total ice water path from explicit microphysics
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[lwp_fc]
standard_name = liq_water_path_from_cloud_fraction
long_name = total liquid water path from cloud fraction scheme
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[iwp_fc]
standard_name = ice_water_path_from_cloud_fraction
long_name = total ice water path from cloud fraction scheme
units = kg m-2
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[total_albedo]
standard_name = total_sky_albedo
long_name = total sky albedo at toa
units = frac
dimensions = (horizontal_loop_extent)
type = real
kind = kind_phys
[edmf_a]
standard_name = emdf_updraft_area
long_name = updraft area from mass flux scheme
Expand Down
112 changes: 111 additions & 1 deletion ccpp/driver/GFS_diagnostics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,78 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop

idx = 0

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'cldfra2d'
ExtDiag(idx)%desc = 'instantaneous 2D (max-in-column) cloud fraction'
ExtDiag(idx)%unit = 'frac'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%cldfra2d(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'total_albedo'
ExtDiag(idx)%desc = 'total sky albedo at toa'
ExtDiag(idx)%unit = 'frac'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%total_albedo(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'lwp_ex'
ExtDiag(idx)%desc = 'total liquid water path from explicit microphysics'
ExtDiag(idx)%unit = 'kg m-2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_ex(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'iwp_ex'
ExtDiag(idx)%desc = 'total ice water path from explicit microphysics'
ExtDiag(idx)%unit = 'kg m-2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_ex(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'lwp_fc'
ExtDiag(idx)%desc = 'total liquid water path from cloud fraction scheme'
ExtDiag(idx)%unit = 'kg m-2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%lwp_fc(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'iwp_fc'
ExtDiag(idx)%desc = 'total ice water path from cloud fraction scheme'
ExtDiag(idx)%unit = 'kg m-2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%iwp_fc(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'ALBDO_ave'
Expand Down Expand Up @@ -200,7 +272,6 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%dlwsfci(:)
enddo


idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'ULWRF'
Expand All @@ -215,6 +286,45 @@ subroutine GFS_externaldiag_populate (ExtDiag, Model, Statein, Stateout, Sfcprop
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%ulwsfc(:)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'DSWRFItoa'
ExtDiag(idx)%desc = 'instantaneous top of atmos downward shortwave flux'
ExtDiag(idx)%unit = 'W/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%cnvfac = cn_one
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,23)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'USWRFItoa'
ExtDiag(idx)%desc = 'instantaneous top of atmos upward shortwave flux'
ExtDiag(idx)%unit = 'W/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%cnvfac = cn_one
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,2)
enddo

idx = idx + 1
ExtDiag(idx)%axes = 2
ExtDiag(idx)%name = 'ULWRFItoa'
ExtDiag(idx)%desc = 'instantaneous top of atmos upward longwave flux'
ExtDiag(idx)%unit = 'W/m**2'
ExtDiag(idx)%mod_name = 'gfs_phys'
ExtDiag(idx)%cnvfac = cn_one
ExtDiag(idx)%intpl_method = 'bilinear'
allocate (ExtDiag(idx)%data(nblks))
do nb = 1,nblks
ExtDiag(idx)%data(nb)%var2 => IntDiag(nb)%fluxr(:,1)
enddo

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