cbl_SurfaceWetness.F90 Source File


Source Code

MODULE cbl_SurfaceWetness_module

IMPLICIT NONE

PUBLIC :: Surf_wetness_fact
PRIVATE

CONTAINS

SUBROUTINE Surf_wetness_fact( cansat, canopy, ssnow,veg, met, soil, dels )

USE cable_common_module
USE cable_def_types_mod
! data
USE cable_phys_constants_mod, ONLY : CTFRZ   => TFRZ

!H!USE cable_gw_hydro_module, ONLY : calc_srf_wet_fraction
! line above uncommented by rk4417 - phase2
USE cable_gw_hydro_module, ONLY : calc_srf_wet_fraction
USE cable_init_wetfac_mod, ONLY: initialize_wetfac

TYPE (veg_parameter_type),  INTENT(INOUT) :: veg
TYPE (soil_snow_type),      INTENT(INOUT) :: ssnow
TYPE (soil_parameter_type), INTENT(INOUT) :: soil
TYPE (canopy_type),         INTENT(INOUT) :: canopy
TYPE (met_type),            INTENT(INOUT) :: met

REAL, INTENT(IN) :: dels ! integration time setp (s)

REAL,INTENT(IN), DIMENSION(:) :: cansat ! max canopy intercept. (mm)

!local variables
REAL, DIMENSION(mp)  :: lower_limit, upper_limit,ftemp

INTEGER :: j, i

    ! Rainfall variable is limited so canopy interception is limited,
    ! used to stabilise latent fluxes.
    ! to avoid excessive direct canopy evaporation (EK nov2007, snow scheme)
    upper_limit = 4.0 * MIN(dels,1800.0) / (60.0 * 1440.0 )
    ftemp =MIN(met%precip-met%precip_sn, upper_limit )
    ! Calculate canopy intercepted rainfall, equal to zero if temp < 0C:
    lower_limit = cansat - canopy%cansto
    upper_limit = MAX(lower_limit, 0.0)
    canopy%wcint = MERGE( MIN( upper_limit, ftemp ), 0.0,                       &
         ftemp > 0.0  .AND. met%tk > Ctfrz)  !EAK, 09/10

    ! Define canopy throughfall (100% of precip if temp < 0C, see above):
    canopy%through = met%precip_sn + MIN( met%precip - met%precip_sn ,          &
         MAX( 0.0, met%precip - met%precip_sn - canopy%wcint) )

    ! Add canopy interception to canopy storage term:
    canopy%cansto = canopy%cansto + canopy%wcint

    ! Calculate fraction of canopy which is wet:
    canopy%fwet   = MAX( 0.0, MIN( 0.9, 0.8 * canopy%cansto /                   &
         MAX( cansat, 0.01 ) ) )

    !calc the surface wetness for soil evap in this routine
    !include the default wetfac when or_evap and gw_model are not used


    CALL calc_srf_wet_fraction(ssnow,soil,met,veg)

! line above replaces remaining code below - rk4417 - phase2

!     !H!gw n/a here and so copied default below
!     !H!    CALL calc_srf_wet_fraction(ssnow,soil,met,veg)
!     !H!   ELSE  !Default formulation
!    
    !    !call saturated_fraction(ssnow,soil,veg)
    !    ssnow%satfrac(:) = 1.0e-8
    !    ssnow%rh_srf(:)  = 1.0
    
    ! !This is updating wetfac iusing same calc as initialization
    ! !originally code in canopy used 1e-6 as MIN
    ! CALL initialize_wetfac( mp, ssnow%wetfac, soil%swilt, soil%sfc,            &
    !                         ssnow%wb(:,1), ssnow%wbice(:,1), ssnow%snowd,      &
    !                         veg%iveg, met%tk, Ctfrz ) 
   
    ! ! owetfac introduced to reduce sharp changes in dry regions,
    ! ! especially in offline runs in which there may be discrepancies b/n
    ! ! timing of precip and temperature change (EAK apr2009)
    ! ssnow%wetfac = 0.5*(ssnow%wetfac + ssnow%owetfac)

RETURN
END SUBROUTINE Surf_wetness_fact


END MODULE cbl_SurfaceWetness_module