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

UFS-dev PR#14 #978

Merged
merged 18 commits into from
Nov 15, 2022
Merged
Changes from 30 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
10 changes: 5 additions & 5 deletions physics/GFS_MP_generic_post.F90
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ module GFS_MP_generic_post
!> @{
subroutine GFS_MP_generic_post_run( &
im, levs, kdt, nrcm, nncl, ntcw, ntrac, imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_nssl, &
imp_physics_mg, imp_physics_fer_hires, cal_pre, cplflx, cplchm, progsigma, con_g, rainmin, dtf, frain, rainc, &
imp_physics_mg, imp_physics_fer_hires, cal_pre, cplflx, cplchm, cpllnd, progsigma, con_g, rainmin, dtf, frain, rainc, &
rain1, rann, xlat, xlon, gt0, gq0, prsl, prsi, phii, tsfc, ice, snow, graupel, save_t, save_q, rain0, ice0, snow0,&
graupel0, del, rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, srflag, sr, cnvprcp, totprcp, totice, &
totsnw, totgrp, cnvprcpb, totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, snow_cpl, pwat, &
@@ -37,7 +37,7 @@ subroutine GFS_MP_generic_post_run(
integer, intent(in) :: im, levs, kdt, nrcm, nncl, ntcw, ntrac, num_dfi_radar, index_of_process_dfi_radar
integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_mg, imp_physics_fer_hires
integer, intent(in) :: imp_physics_nssl
logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm, progsigma
logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm, cpllnd, progsigma
integer, intent(in) :: index_of_temperature,index_of_process_mp

integer :: dfi_radar_max_intervals
@@ -249,7 +249,7 @@ subroutine GFS_MP_generic_post_run(
! Conversion factor from mm per day to m per physics timestep
tem = dtp * con_p001 / con_day

!> - For GFDL and Thompson MP scheme, determine convective snow by surface temperature;
!> - For GFDL, Thompson and NSSL MP schemes, determine convective snow by surface temperature;
!! and determine explicit rain/snow by snow/ice/graupel coming out directly from MP
!! and convective rainfall from the cumulus scheme if the surface temperature is below
!! \f$0^oC\f$.
@@ -363,7 +363,7 @@ subroutine GFS_MP_generic_post_run(
enddo
endif

if (cplflx .or. cplchm) then
if (cplflx .or. cplchm .or. cpllnd) then
do i = 1, im
dsnow_cpl(i)= max(zero, rain(i) * srflag(i))
drain_cpl(i)= max(zero, rain(i) - dsnow_cpl(i))
@@ -372,7 +372,7 @@ subroutine GFS_MP_generic_post_run(
enddo
endif

if (cplchm) then
if (cplchm .or. cpllnd) then
do i = 1, im
rainc_cpl(i) = rainc_cpl(i) + rainc(i)
enddo
7 changes: 7 additions & 0 deletions physics/GFS_MP_generic_post.meta
Original file line number Diff line number Diff line change
@@ -128,6 +128,13 @@
dimensions = ()
type = logical
intent = in
[cpllnd]
standard_name = flag_for_land_coupling
long_name = flag controlling cpllnd collection (default off)
units = flag
dimensions = ()
type = logical
intent = in
[progsigma]
standard_name = do_prognostic_updraft_area_fraction
long_name = flag for prognostic sigma in cumulus scheme
8 changes: 4 additions & 4 deletions physics/GFS_radiation_surface.F90
Original file line number Diff line number Diff line change
@@ -50,7 +50,7 @@ end subroutine GFS_radiation_surface_init
!! \htmlinclude GFS_radiation_surface_run.html
!!
subroutine GFS_radiation_surface_run ( &
im, frac_grid, lslwr, lsswr, lsm, lsm_noahmp, lsm_ruc, &
im, nf_albd, frac_grid, lslwr, lsswr, lsm, lsm_noahmp, lsm_ruc, &
xlat, xlon, slmsk, lndp_type, n_var_lndp, sfc_alb_pert, &
lndp_var_list, lndp_prt_list, landfrac, snodl, snodi, sncovr, &
sncovr_ice, fice, zorl, hprime, tsfg, tsfa, tisfc, coszen, &
@@ -62,12 +62,12 @@ subroutine GFS_radiation_surface_run ( &
semisbase, semis, sfcalb, sfc_alb_dif, errmsg, errflg)

use module_radiation_surface, only: f_zero, f_one, &
epsln, NF_ALBD, &
epsln, &
setemis, setalb

implicit none

integer, intent(in) :: im
integer, intent(in) :: im, nf_albd
logical, intent(in) :: frac_grid, lslwr, lsswr, use_cice_alb, cplice
integer, intent(in) :: lsm, lsm_noahmp, lsm_ruc, lndp_type, n_var_lndp
real(kind=kind_phys), intent(in) :: min_seaice, min_lakeice
@@ -184,7 +184,7 @@ subroutine GFS_radiation_surface_run ( &
alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, &
albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, &
albdvis_ice, albdnir_ice, albivis_ice, albinir_ice, &
IM, sfc_alb_pert, lndp_alb, fracl, fraco, fraci, icy, & ! --- inputs
im, nf_albd, sfc_alb_pert, lndp_alb, fracl, fraco, fraci, icy, & ! --- inputs
sfcalb ) ! --- outputs

!> -# Approximate mean surface albedo from vis- and nir- diffuse values.
7 changes: 7 additions & 0 deletions physics/GFS_radiation_surface.meta
Original file line number Diff line number Diff line change
@@ -55,6 +55,13 @@
dimensions = ()
type = integer
intent = in
[nf_albd]
standard_name = number_of_components_for_surface_albedo
long_name = number of IR/VIS/UV compinents for surface albedo
units = count
dimensions = ()
type = integer
intent = in
[frac_grid]
standard_name = flag_for_fractional_landmask
long_name = flag for fractional grid
7 changes: 4 additions & 3 deletions physics/GFS_rrtmg_pre.F90
Original file line number Diff line number Diff line change
@@ -609,11 +609,10 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, &

endif ! end_if_ivflip

!> - Call module_radiation_aerosols::setaer(),to setup aerosols
!! property profile for radiation.

!check print *,' in grrad : calling setaer '

!> - Initialize mass mixing ratio of aerosols from NASA GOCART or NASA MERRA-2
if (ntchm>0 .and. iaermdl==2) then
do k=1,levs
do i=1,im
@@ -637,6 +636,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, &
endif


!> - Call module_radiation_aerosols::setaer() to setup aerosols
!! property profile for radiation.
call setaer (plvl, plyr, prslk1, tvly, rhly, slmsk, & ! --- inputs
tracer1, aer_nm, xlon, xlat, IM, LMK, LMP,&
lsswr,lslwr, &
@@ -654,7 +655,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, &
enddo
enddo

!> Aerosol direct feedback effect by smoke and dust
!> - Add aerosol direct feedback effect by smoke and dust
if(aero_dir_fdb) then ! add smoke/dust extinctions
do k = 1, LMK
do i = 1, IM
2 changes: 1 addition & 1 deletion physics/GFS_rrtmg_setup.F90
Original file line number Diff line number Diff line change
@@ -325,7 +325,7 @@ end subroutine GFS_rrtmg_setup_finalize

! Private functions


!>Initialization of radiation calculations.
subroutine radinit( si, NLAY, imp_physics, me, ltp, lextop )
!...................................

14 changes: 10 additions & 4 deletions physics/GFS_stochastics.F90
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc
gu0, gv0, gt0, gq0_wv, dtdtnp, &
gq0_cw, gq0_rw, gq0_sw, gq0_iw, gq0_gl, &
rain, rainc, tprcp, totprcp, cnvprcp, &
totprcpb, cnvprcpb, cplflx, &
totprcpb, cnvprcpb, cplflx, cpllnd, &
rain_cpl, snow_cpl, drain_cpl, dsnow_cpl, &
ntcw,ntrw,ntsw,ntiw,ntgl, &
errmsg, errflg)
@@ -128,8 +128,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc
real(kind_phys), dimension(:), intent(inout) :: totprcpb
real(kind_phys), dimension(:), intent(inout) :: cnvprcpb
logical, intent(in) :: cplflx
! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true.
logical, intent(in) :: cpllnd
! rain_cpl only allocated if cplflx == .true. or cplchm == .true. or cpllnd == .true.
real(kind_phys), dimension(:), intent(inout) :: rain_cpl
! snow_cpl only allocated if cplflx == .true. or cplchm == .true.
real(kind_phys), dimension(:), intent(inout) :: snow_cpl
! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true.
real(kind_phys), dimension(:), intent(in) :: drain_cpl
@@ -240,8 +242,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc
totprcpb(:) = totprcpb(:) + (sppt_wts(:,15) - 1 )*rain(:)
cnvprcpb(:) = cnvprcpb(:) + (sppt_wts(:,15) - 1 )*rainc(:)

if (cplflx) then
if (cplflx .or. cpllnd) then
rain_cpl(:) = rain_cpl(:) + (sppt_wts(:,15) - 1.0)*drain_cpl(:)
endif
if (cplflx) then
snow_cpl(:) = snow_cpl(:) + (sppt_wts(:,15) - 1.0)*dsnow_cpl(:)
endif
!zero out radiative heating tendency for next physics step
@@ -342,8 +346,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc
totprcpb(:) = totprcpb(:) + (ca(:,15) - 1 )*rain(:)
cnvprcpb(:) = cnvprcpb(:) + (ca(:,15) - 1 )*rainc(:)

if (cplflx) then
if (cplflx .or. cpllnd) then
rain_cpl(:) = rain_cpl(:) + (ca(:,15) - 1.0)*drain_cpl(:)
endif
if (cplflx) then
snow_cpl(:) = snow_cpl(:) + (ca(:,15) - 1.0)*dsnow_cpl(:)
endif
!zero out radiative heating tendency for next physics step
7 changes: 7 additions & 0 deletions physics/GFS_stochastics.meta
Original file line number Diff line number Diff line change
@@ -419,6 +419,13 @@
dimensions = ()
type = logical
intent = in
[cpllnd]
standard_name = flag_for_land_coupling
long_name = flag controlling cpllnd collection (default off)
units = flag
dimensions = ()
type = logical
intent = in
[rain_cpl]
standard_name = cumulative_lwe_thickness_of_precipitation_amount_for_coupling
long_name = total rain precipitation
19 changes: 13 additions & 6 deletions physics/GFS_surface_generic_post.F90
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@ end subroutine GFS_surface_generic_post_init
!> \section arg_table_GFS_surface_generic_post_run Argument Table
!! \htmlinclude GFS_surface_generic_post_run.html
!!
subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lssav, dry, icy, wet, &
subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpllnd, lssav, dry, icy, wet, &
lsm, lsm_noahmp, dtf, ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, &
adjsfcdlw, adjsfcdsw, adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, &
adjvisbmu, adjvisdfu, t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf, pah, pahi, &
@@ -58,7 +58,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lss
implicit none

integer, intent(in) :: im
logical, intent(in) :: cplflx, cplaqm, cplchm, cplwav, lssav
logical, intent(in) :: cplflx, cplaqm, cplchm, cplwav, cpllnd, lssav
logical, dimension(:), intent(in) :: dry, icy, wet
integer, intent(in) :: lsm, lsm_noahmp
real(kind=kind_phys), intent(in) :: dtf
@@ -121,18 +121,24 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lss
enddo
endif

if (cplflx .or. cplchm) then
if (cplflx .or. cplchm .or. cpllnd) then
do i=1,im
tsfci_cpl(i) = tsfc(i)
enddo
endif

if (cplflx .or. cpllnd) then
do i=1,im
dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf
dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf
psurfi_cpl (i) = pgr(i)
enddo
endif

if (cplflx) then
do i=1,im
dlwsfci_cpl (i) = adjsfcdlw(i)
dswsfci_cpl (i) = adjsfcdsw(i)
dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf
dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf
dnirbmi_cpl (i) = adjnirbmd(i)
dnirdfi_cpl (i) = adjnirdfd(i)
dvisbmi_cpl (i) = adjvisbmd(i)
@@ -148,12 +154,13 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lss
nlwsfc_cpl (i) = nlwsfc_cpl(i) + nlwsfci_cpl(i)*dtf
t2mi_cpl (i) = t2m(i)
q2mi_cpl (i) = q2m(i)
psurfi_cpl (i) = pgr(i)
enddo
endif

! --- estimate mean albedo for ocean point without ice cover and apply
! them to net SW heat fluxes

if (cplflx .or. cpllnd) then
do i=1,im
! if (Sfcprop%landfrac(i) < one) then ! Not 100% land
if (wet(i)) then ! some open water
7 changes: 7 additions & 0 deletions physics/GFS_surface_generic_post.meta
Original file line number Diff line number Diff line change
@@ -105,6 +105,13 @@
dimensions = ()
type = logical
intent = in
[cpllnd]
standard_name = flag_for_land_coupling
long_name = flag controlling cpllnd collection (default off)
units = flag
dimensions = ()
type = logical
intent = in
[lssav]
standard_name = flag_for_diagnostics
long_name = logical flag for storing diagnostics
63 changes: 33 additions & 30 deletions physics/bl_mynn_common.f90
Original file line number Diff line number Diff line change
@@ -5,6 +5,9 @@
!! memory. This module is then used again in the MYNN-EDMF. All
!! MYNN-specific constants are declared globally in the main
!! module (module_bl_mynn) further below:

!>\ingroup gp_mynnedmf
!! Define Model-specific constants/parameters
module bl_mynn_common

!------------------------------------------
@@ -22,22 +25,22 @@ module bl_mynn_common
save

! To be specified from dycore
real(kind=kind_phys):: cp != 7.*r_d/2. (J/kg/K)
real(kind=kind_phys):: cpv != 4.*r_v (J/kg/K) Spec heat H2O gas
real(kind=kind_phys):: cice != 2106. (J/kg/K) Spec heat H2O ice
real(kind=kind_phys):: cliq != 4190. (J/kg/K) Spec heat H2O liq
real(kind=kind_phys):: p608 != R_v/R_d-1.
real(kind=kind_phys):: ep_2 != R_d/R_v
real(kind=kind_phys):: grav != accel due to gravity
real(kind=kind_phys):: karman != von Karman constant
real(kind=kind_phys):: t0c != temperature of water at freezing, 273.15 K
real(kind=kind_phys):: rcp != r_d/cp
real(kind=kind_phys):: r_d != 287. (J/kg/K) gas const dry air
real(kind=kind_phys):: r_v != 461.6 (J/kg/K) gas const water
real(kind=kind_phys):: xlf != 0.35E6 (J/kg) fusion at 0 C
real(kind=kind_phys):: xlv != 2.50E6 (J/kg) vaporization at 0 C
real(kind=kind_phys):: xls != 2.85E6 (J/kg) sublimation
real(kind=kind_phys):: rvovrd != r_v/r_d != 1.608
real(kind=kind_phys):: cp !<= 7.*r_d/2. (J/kg/K)
real(kind=kind_phys):: cpv !<= 4.*r_v (J/kg/K) Spec heat H2O gas
real(kind=kind_phys):: cice !<= 2106. (J/kg/K) Spec heat H2O ice
real(kind=kind_phys):: cliq !<= 4190. (J/kg/K) Spec heat H2O liq
real(kind=kind_phys):: p608 !<= R_v/R_d-1.
real(kind=kind_phys):: ep_2 !<= R_d/R_v
real(kind=kind_phys):: grav !<= accel due to gravity
real(kind=kind_phys):: karman !<= von Karman constant
real(kind=kind_phys):: t0c !<= temperature of water at freezing, 273.15 K
real(kind=kind_phys):: rcp !<= r_d/cp
real(kind=kind_phys):: r_d !<= 287. (J/kg/K) gas const dry air
real(kind=kind_phys):: r_v !<= 461.6 (J/kg/K) gas const water
real(kind=kind_phys):: xlf !<= 0.35E6 (J/kg) fusion at 0 C
real(kind=kind_phys):: xlv !<= 2.50E6 (J/kg) vaporization at 0 C
real(kind=kind_phys):: xls !<= 2.85E6 (J/kg) sublimation
real(kind=kind_phys):: rvovrd !<= r_v/r_d != 1.608

! Specified locally
real(kind=kind_phys),parameter:: zero = 0.0
@@ -46,22 +49,22 @@ module bl_mynn_common
real(kind=kind_phys),parameter:: two = 2.0
real(kind=kind_phys),parameter:: onethird = 1./3.
real(kind=kind_phys),parameter:: twothirds = 2./3.
real(kind=kind_phys),parameter:: tref = 300.0 ! reference temperature (K)
real(kind=kind_phys),parameter:: TKmin = 253.0 ! for total water conversion, Tripoli and Cotton (1981)
real(kind=kind_phys),parameter:: tref = 300.0 !< reference temperature (K)
real(kind=kind_phys),parameter:: TKmin = 253.0 !< for total water conversion, Tripoli and Cotton (1981)
real(kind=kind_phys),parameter:: p1000mb=100000.0
real(kind=kind_phys),parameter:: svp1 = 0.6112 !(kPa)
real(kind=kind_phys),parameter:: svp2 = 17.67 !(dimensionless)
real(kind=kind_phys),parameter:: svp3 = 29.65 !(K)
real(kind=kind_phys),parameter:: tice = 240.0 !-33 (C), temp at saturation w.r.t. ice
real(kind=kind_phys),parameter:: svp1 = 0.6112 !<(kPa)
real(kind=kind_phys),parameter:: svp2 = 17.67 !<(dimensionless)
real(kind=kind_phys),parameter:: svp3 = 29.65 !<(K)
real(kind=kind_phys),parameter:: tice = 240.0 !<-33 (C), temp at saturation w.r.t. ice

! To be derived in the init routine
real(kind=kind_phys):: ep_3 != 1.-ep_2 != 0.378
real(kind=kind_phys):: gtr != grav/tref
real(kind=kind_phys):: rk != cp/r_d
real(kind=kind_phys):: tv0 != p608*tref
real(kind=kind_phys):: tv1 != (1.+p608)*tref
real(kind=kind_phys):: xlscp != (xlv+xlf)/cp
real(kind=kind_phys):: xlvcp != xlv/cp
real(kind=kind_phys):: g_inv != 1./grav
real(kind=kind_phys):: ep_3 !<= 1.-ep_2 != 0.378
real(kind=kind_phys):: gtr !<= grav/tref
real(kind=kind_phys):: rk !<= cp/r_d
real(kind=kind_phys):: tv0 !<= p608*tref
real(kind=kind_phys):: tv1 !<= (1.+p608)*tref
real(kind=kind_phys):: xlscp !<= (xlv+xlf)/cp
real(kind=kind_phys):: xlvcp !<= xlv/cp
real(kind=kind_phys):: g_inv !<= 1./grav

end module bl_mynn_common
Loading