Skip to content
Open
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
53 changes: 36 additions & 17 deletions src/biogeophys/BareGroundFluxesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,6 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &
real(r8) :: forc_e ! vapor pressure at forcing height [Pa]
real(r8) :: forc_qs ! saturated specific humidity at forcing height [kg/kg]
real(r8) :: forc_esat ! saturated vapor pressure at forcing height [Pa]
! Coefficients from Alduchov and Eskridge (1996) as used by Lawrence (2005) for Magnus dewpoint
! equation over liquid
real(r8), parameter :: A1_liq = 17.625_r8 ! [-]
real(r8), parameter :: B1_liq = 243.04_r8 ! [degC]
real(r8), parameter :: C1_liq = 610.94_r8 ! [Pa]
! Coefficients from Alduchov and Eskridge (1996) for Magnus dewpoint equation over ice
real(r8), parameter :: A1_ice = 22.587_r8 ! [-]
real(r8), parameter :: B1_ice = 273.86_r8 ! [degC]
real(r8), parameter :: C1_ice = 611.21_r8 ! [Pa]
!------------------------------------------------------------------------------

associate( &
Expand Down Expand Up @@ -425,14 +416,8 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &
! corresponding to 1% relative humidity
forc_e = max( (forc_q(c)*forc_pbot(c)) / (forc_q(c)+0.622_r8), 0.01_r8*forc_esat)

! Magnus expression for dew point
! Equation (7) from Lawrence (2005)
if (t_grnd(c) < tfrz) then ! ice coefficients
forc_dewpoint = B1_ice*log(forc_e/C1_ice) / (A1_ice - log(forc_e/C1_ice))
else ! liquid water coefficients
forc_dewpoint = B1_liq*log(forc_e/C1_liq) / (A1_liq - log(forc_e/C1_liq))
end if
forc_dewpoint = forc_dewpoint + tfrz
! Calculate dewpoint at forcing height
forc_dewpoint = dewpoint(forc_e,t_grnd(c))

!changed by K.Sakaguchi. Soilbeta is used for evaporation
if (dqh(p) > 0._r8) then !dew (beta is not applied, just like rsoil used to be)
Expand Down Expand Up @@ -559,4 +544,38 @@ subroutine BareGroundFluxes(bounds, num_noexposedvegp, filter_noexposedvegp, &

end subroutine BareGroundFluxes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Way to go @olyson, this seems to be a b4b refactor that cleans up the code by creating a function for dew and frost over bare ground. Assuming this is really b4b can we just merge the PR to b4b_dev?


!------------------------------------------------------------------------------
real(r8) function dewpoint(e,t)
!
! DESCRIPTION:
! Calculates dewpoint (degK) from input vapor pressure
! Uses Equation 7 from Lawrence 2005, https://doi.org/10.1175/BAMS-86-2-225

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we also need to update our documentation to reflect this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will open an issue for the documentation. I'll also open an issue to document #3643

use clm_varcon, only : tfrz

! ARGUMENTS
real(r8), intent(in) :: e ! vapor pressure [Pa]
real(r8), intent(in) :: t ! temperature (K)
! Coefficients from Alduchov and Eskridge (1996) as used by Lawrence (2005) for Magnus dewpoint
! equation over liquid
real(r8), parameter :: A1_liq = 17.625_r8 ! [-]
real(r8), parameter :: B1_liq = 243.04_r8 ! [degC]
real(r8), parameter :: C1_liq = 610.94_r8 ! [Pa]
! Coefficients from Alduchov and Eskridge (1996) for Magnus dewpoint equation over ice
real(r8), parameter :: A1_ice = 22.587_r8 ! [-]
real(r8), parameter :: B1_ice = 273.86_r8 ! [degC]
real(r8), parameter :: C1_ice = 611.21_r8 ! [Pa]

! Magnus expression for dew point
! Equation (7) from Lawrence (2005)
if (t < tfrz) then ! ice coefficients
dewpoint = B1_ice*log(e/C1_ice) / (A1_ice - log(e/C1_ice))
else ! liquid water coefficients
dewpoint = B1_liq*log(e/C1_liq) / (A1_liq - log(e/C1_liq))
end if
dewpoint = dewpoint + tfrz

end function dewpoint
!------------------------------------------------------------------------------

end module BareGroundFluxesMod