5.13.2-dev0
mHM
The mesoscale Hydrological Model
Loading...
Searching...
No Matches
mo_canopy_interc.f90
Go to the documentation of this file.
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
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
29CONTAINS
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 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 REAL(dp) :: aux_help
98
99
100 !===============================================
101 ! Canopy Interception
102 ! Canopy storage (actualize)
103 ! 1st rains -> 2nd Interception -> 3rd ETP
104 !===============================================
105 aux_help = interc + precip
106 if (aux_help >= interc_max) then
107 throughfall = aux_help - interc_max
108 interc = interc_max
109 else
110 throughfall = 0.0_dp
111 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 if (interc_max > eps_dp) then
117 evap_canopy = pet * (interc / interc_max)**twothird_dp
118 else
119 ! in case interc_max is
120 evap_canopy = 0.0_dp
121 end if
122
123 ! numerical problem
124 if (evap_canopy < 0.0_dp) evap_canopy = 0.0_dp ! this should never appear
125
126 if (interc > evap_canopy) then
127 interc = interc - evap_canopy
128 else
129 evap_canopy = interc
130 interc = 0.0_dp
131 end if
132
133 END SUBROUTINE canopy_interc
134
135END MODULE mo_canopy_interc
Canopy interception.
elemental pure subroutine, public canopy_interc(pet, interc_max, precip, interc, throughfall, evap_canopy)
Canopy interception.
Provides constants commonly used by mHM, mRM and MPR.
real(dp), parameter, public eps_dp
epsilon(1.0) in double precision