LCOV - code coverage report
Current view: top level - mHM - mo_canopy_interc.f90 (source / functions) Hit Total Coverage
Test: mHM coverage Lines: 16 17 94.1 %
Date: 2024-04-15 17:48:09 Functions: 1 1 100.0 %

          Line data    Source code
       1             : !> \file mo_canopy_interc.f90
       2             : !> \brief \copybrief mo_canopy_interc
       3             : !> \details \copydetails mo_canopy_interc
       4             : 
       5             : !> \brief Canopy interception.
       6             : !> \details This module deals with processes related to canopy interception, evaporation and throughfall.
       7             : !> \changelog
       8             : !! - RK Sep 2013
       9             : !!   - Documentation updated (formula and a short description added)
      10             : !> \authors Vladyslav Prykhodko
      11             : !> \date Dec 2012
      12             : !> \copyright Copyright 2005-\today, the mHM Developers, Luis Samaniego, Sabine Attinger: All rights reserved.
      13             : !! mHM is released under the LGPLv3+ license \license_note
      14             : !> \ingroup f_mhm
      15             : MODULE mo_canopy_interc
      16             : 
      17             :   USE mo_kind, ONLY : dp
      18             :   USE mo_common_constants, ONLY : eps_dp
      19             :   USE mo_constants, ONLY : twothird_dp
      20             : 
      21             :   IMPLICIT NONE
      22             : 
      23             :   PRIVATE
      24             : 
      25             :   PUBLIC :: canopy_interc ! Canopy interception
      26             : 
      27             :   ! ------------------------------------------------------------------
      28             : 
      29             : CONTAINS
      30             : 
      31             :   ! ------------------------------------------------------------------
      32             : 
      33             :   !    NAME
      34             :   !        canopy_interc
      35             : 
      36             :   !    PURPOSE
      37             :   !>       \brief Canopy interception.
      38             : 
      39             :   !>       \details Calculates throughfall.
      40             :   !>       Updates interception and evaporation intensity from canopy.
      41             :   !>       Throughfall (\f$F\f$) is estimated as a function of the incoming precipitation (\f$P\f$),
      42             :   !>       the current status of the canopy water content (\f$C\f$), and the max. water
      43             :   !>       \f[ F = Max( (P + C - C_{max}), 0) \f]
      44             :   !>       Evaporation (\f$E\f$) from canopy is estimated as a fraction of the potential
      45             :   !>       evapotranspiration(\f$E_{p}\f$) depending on the current status of the canopy
      46             :   !>       water content (\f$C\f$) and the max. water content(\f$C_{max}\f$) that can be
      47             :   !>       intecepted by the vegetation.
      48             :   !>       \f[ E = E_{p}(C/C_{max})^{2/3} \f]
      49             :   !>       ADDITIONAL INFORMATION
      50             :   !>       content(\f$C_{max}\f$) that can be intecepted by the vegetation.
      51             :   !>       canopy_interc(pet, interc_month_max, interc_max, precip, throughfall, evap_canopy, interc)
      52             : 
      53             :   !    INTENT(IN)
      54             :   !>       \param[in] "REAL(dp) :: pet"        Potential evapotranspiration [mm TS-1]
      55             :   !>       \param[in] "REAL(dp) :: interc_max" Maximum interception [mm]
      56             :   !>       \param[in] "REAL(dp) :: precip"     Daily mean precipitation [mm]
      57             : 
      58             :   !    INTENT(INOUT)
      59             :   !>       \param[inout] "REAL(dp) :: interc" Interception [mm]
      60             : 
      61             :   !    INTENT(OUT)
      62             :   !>       \param[out] "REAL(dp) :: throughfall" Throughfall [mm TS-1]
      63             :   !>       \param[out] "REAL(dp) :: evap_canopy" Real evaporation intensity from canopy[mm TS-1]
      64             : 
      65             :   !    HISTORY
      66             :   !>       \authors Vladyslav Prykhodko
      67             : 
      68             :   !>       \date Dec 2012
      69             : 
      70             :   ! Modifications:
      71             :   ! JM Aug 2013 - ordering of arguments changed
      72             :   ! RK Sep 2013 - Documentation updated (formula and a short description added)
      73             :   ! Robert Schweppe Jun 2018 - refactoring and reformatting
      74             : 
      75    76647048 :   ELEMENTAL PURE SUBROUTINE canopy_interc(pet, interc_max, precip, interc, throughfall, evap_canopy)
      76             :     implicit none
      77             : 
      78             :     ! Potential evapotranspiration [mm TS-1]
      79             :     REAL(dp), INTENT(IN) :: pet
      80             : 
      81             :     ! Maximum interception [mm]
      82             :     REAL(dp), INTENT(IN) :: interc_max
      83             : 
      84             :     ! Daily mean precipitation [mm]
      85             :     REAL(dp), INTENT(IN) :: precip
      86             : 
      87             :     ! Interception [mm]
      88             :     REAL(dp), INTENT(INOUT) :: interc
      89             : 
      90             :     ! Throughfall [mm TS-1]
      91             :     REAL(dp), INTENT(OUT) :: throughfall
      92             : 
      93             :     ! Real evaporation intensity from canopy[mm TS-1]
      94             :     REAL(dp), INTENT(OUT) :: evap_canopy
      95             : 
      96             :     ! Auxiliary helping variable [-]
      97    76647048 :     REAL(dp) :: aux_help
      98             : 
      99             : 
     100             :     !===============================================
     101             :     ! Canopy Interception
     102             :     ! Canopy storage (actualize)
     103             :     ! 1st rains -> 2nd Interception -> 3rd ETP
     104             :     !===============================================
     105    76647048 :     aux_help = interc + precip
     106    76647048 :     if (aux_help >= interc_max) then
     107    21699895 :       throughfall = aux_help - interc_max
     108    21699895 :       interc = interc_max
     109             :     else
     110    54947153 :       throughfall = 0.0_dp
     111    54947153 :       interc = aux_help
     112             :     end if
     113             : 
     114             :     ! New module for evaporation from canopy surface
     115             :     ! [power (2/3) is based on the paper of Liang et al. 1994 & Deardorf, 1978]
     116    76647048 :     if (interc_max > eps_dp) then
     117    76647048 :       evap_canopy = pet * (interc / interc_max)**twothird_dp
     118             :     else
     119             :       ! in case interc_max is
     120           0 :       evap_canopy = 0.0_dp
     121             :     end if
     122             : 
     123             :     ! numerical problem
     124    76647048 :     if (evap_canopy < 0.0_dp) evap_canopy = 0.0_dp ! this should never appear
     125             : 
     126    76647048 :     if (interc > evap_canopy) then
     127    42496093 :       interc = interc - evap_canopy
     128             :     else
     129    34150955 :       evap_canopy = interc
     130    34150955 :       interc = 0.0_dp
     131             :     end if
     132             : 
     133    76647048 :   END SUBROUTINE canopy_interc
     134             : 
     135             : END MODULE mo_canopy_interc

Generated by: LCOV version 1.16