Skip to content
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
21 changes: 18 additions & 3 deletions physics/module_sf_noahmplsm.F90
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,8 @@ subroutine noahmp_sflx (parameters, &
shg , shc , shb , evg , evb , ghv , & ! out :
ghb , irg , irc , irb , tr , evc , & ! out :
chleaf , chuc , chv2 , chb2 , fpice , pahv , &
pahg , pahb , pah , esnow , canhs , laisun , laisha , rb &
pahg , pahb , pah , esnow , canhs , laisun , &
laisha , rb , qsfcveg , qsfcbare &
#ifdef CCPP
,errmsg, errflg)
#else
Expand Down Expand Up @@ -587,6 +588,8 @@ subroutine noahmp_sflx (parameters, &
real (kind=kind_phys) , intent(out) :: rb !< leaf boundary layer resistance (s/m)
real (kind=kind_phys) , intent(out) :: laisun !< sunlit leaf area index (m2/m2)
real (kind=kind_phys) , intent(out) :: laisha !< shaded leaf area index (m2/m2)
real (kind=kind_phys) , intent(out) :: qsfcveg !< effective spec humid over vegetation
real (kind=kind_phys) , intent(out) :: qsfcbare !< effective spec humid over bare soil

!jref:start; output
real (kind=kind_phys) , intent(out) :: t2mv !< 2-m air temperature over vegetated part [k]
Expand Down Expand Up @@ -847,7 +850,9 @@ subroutine noahmp_sflx (parameters, &
emissi ,pah ,canhs, &
shg,shc,shb,evg,evb,ghv,ghb,irg,irc,irb,tr,evc,chleaf,chuc,chv2,chb2 ) !out

qsfc = q1 !
qsfcveg = eah*0.622/(sfcprs - 0.378*eah)
qsfcbare = qsfc
qsfc = q1
!jref:end
#ifdef CCPP
if (errflg /= 0) return
Expand Down Expand Up @@ -3923,6 +3928,7 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , &

real (kind=kind_phys) :: t, tdc !kelvin to degree celsius with limit -50 to +50

real(kind=kind_phys) :: evpot !<the potential evaporation from wet foliage per unit wetted area
real(kind=kind_phys) :: fhi, qss, wrk
real(kind=kind_phys), parameter :: qmin=1.0e-8

Expand Down Expand Up @@ -4173,8 +4179,17 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , &

! prepare for latent heat flux above veg.

evpot= fveg*rhoair*cpair*vaie/rb * (estv-eah) / gammav
caw = 1./rawc
cew = fwet*vaie/rb
if(evpot > 0. .and. fwet > 0.) then
if (tv > tfrz) then
cew = min(fwet,canliq*latheav/dt/evpot) * vaie/rb
else
cew = min(fwet,canice*latheav/dt/evpot) * vaie/rb
endif
else
cew= fwet * vaie/rb
endif
ctw = (1.-fwet)*(laisune/(rb+rssun) + laishae/(rb+rssha))
cgw = 1./(rawg+rsurf)
cond = caw + cew + ctw + cgw
Expand Down
16 changes: 13 additions & 3 deletions physics/noahmpdrv.F90
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,10 @@ subroutine noahmpdrv_run &
ch_bare_ground_2m_ccpp, &
precip_adv_heat_veg_ccpp, &
precip_adv_heat_grd_v_ccpp, &
precip_adv_heat_grd_b_ccpp )
precip_adv_heat_grd_b_ccpp, &
spec_humid_sfc_veg_ccpp, &
spec_humid_sfc_bare_ccpp &
)

use machine , only : kind_phys
use funcphys, only : fpvs
Expand Down Expand Up @@ -436,6 +439,8 @@ subroutine noahmpdrv_run &
real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_veg_ccpp
real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_v_ccpp
real(kind=kind_phys), dimension(:) , intent(out), optional :: precip_adv_heat_grd_b_ccpp
real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humid_sfc_veg_ccpp
real(kind=kind_phys), dimension(:) , intent(out), optional :: spec_humid_sfc_bare_ccpp

!
! --- some new options, hard code for now
Expand Down Expand Up @@ -613,6 +618,8 @@ subroutine noahmpdrv_run &
real (kind=kind_phys) :: leaf_air_resistance ! out | leaf boundary layer resistance [s/m]

real (kind=kind_phys) :: canopy_heat_storage ! out | within-canopy heat [W/m2]
real (kind=kind_phys) :: spec_humid_sfc_veg ! out | surface specific humidty over vegetation [kg/kg]
real (kind=kind_phys) :: spec_humid_sfc_bare ! out | surface specific humidty over bare soil [kg/kg]

real (kind=kind_phys) :: ustarx ! inout |surface friction velocity
real (kind=kind_phys) :: prslkix ! in exner function
Expand Down Expand Up @@ -997,11 +1004,12 @@ subroutine noahmpdrv_run &
ch_vegetated_2m ,ch_bare_ground_2m ,precip_frozen_frac , &
precip_adv_heat_veg ,precip_adv_heat_grd_v ,precip_adv_heat_grd_b , &
precip_adv_heat_total ,snow_sublimation ,canopy_heat_storage , &
lai_sunlit ,lai_shaded ,leaf_air_resistance , &
#ifdef CCPP
lai_sunlit ,lai_shaded ,leaf_air_resistance , &
spec_humid_sfc_veg ,spec_humid_sfc_bare , &
errmsg ,errflg )
#else
lai_sunlit ,lai_shaded ,leaf_air_resistance )
spec_humid_sfc_veg ,spec_humid_sfc_bare )
#endif

#ifdef CCPP
Expand Down Expand Up @@ -1129,6 +1137,8 @@ subroutine noahmpdrv_run &
if(present(precip_adv_heat_veg_ccpp )) precip_adv_heat_veg_ccpp (i) = precip_adv_heat_veg
if(present(precip_adv_heat_grd_v_ccpp)) precip_adv_heat_grd_v_ccpp(i) = precip_adv_heat_grd_v
if(present(precip_adv_heat_grd_b_ccpp)) precip_adv_heat_grd_b_ccpp(i) = precip_adv_heat_grd_b
if(present(spec_humid_sfc_veg_ccpp )) spec_humid_sfc_veg_ccpp (i) = spec_humid_sfc_veg
if(present(spec_humid_sfc_bare_ccpp )) spec_humid_sfc_bare_ccpp (i) = spec_humid_sfc_bare

wslakexy (i) = lake_water ! not active
fwetxy (i) = canopy_wet_fraction
Expand Down