Skip to content
Merged
Show file tree
Hide file tree
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
Expand Up @@ -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, &
Expand All @@ -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
Expand Down Expand Up @@ -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$.
Expand Down Expand Up @@ -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))
Expand All @@ -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
Expand Down
7 changes: 7 additions & 0 deletions physics/GFS_MP_generic_post.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions physics/GFS_radiation_surface.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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, &
Expand All @@ -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
Expand Down Expand Up @@ -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.
Expand Down
7 changes: 7 additions & 0 deletions physics/GFS_radiation_surface.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions physics/GFS_rrtmg_pre.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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, &
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion physics/GFS_rrtmg_setup.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
!...................................

Expand Down
14 changes: 10 additions & 4 deletions physics/GFS_stochastics.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions physics/GFS_stochastics.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 13 additions & 6 deletions physics/GFS_surface_generic_post.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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, &
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down
7 changes: 7 additions & 0 deletions physics/GFS_surface_generic_post.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
63 changes: 33 additions & 30 deletions physics/bl_mynn_common.f90
Original file line number Diff line number Diff line change
Expand Up @@ -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

!------------------------------------------
Expand All @@ -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
Expand All @@ -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