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