Soil Water Balance (SWB2)
Toggle main menu visibility
Loading...
Searching...
No Matches
actual_et__fao56.F90
Go to the documentation of this file.
1
!> @file
2
!! Contains module @ref actual_et__fao56. The module calculates actual evapotranspiration
3
!! by means of the SINGLE CROP COEFFICIENT procedure outlined in the FAO56 publication.
4
!! See @ref https://www.fao.org/3/x0490e/x0490e0b.htm for details.
5
6
!> Calculates actual evapotranspiration
7
!! by means of the SINGLE CROP COEFFICIENT procedure outlined in the FAO56 publication.
8
!! See @ref https://www.fao.org/3/x0490e/x0490e0b.htm for details.
9
module
actual_et__fao56
10
11
use
iso_c_binding,
only
: c_short, c_int, c_float, c_double
12
use
constants_and_conversions
,
only
:
in_to_mm
,
true
,
false
,
near_zero
13
use
parameters
,
only
:
params
14
implicit none
15
16
real
(c_float),
allocatable
::
depletion_fraction
(:)
17
18
contains
19
20
subroutine
initialize_actual_et_fao56
( )
21
22
call
params
%get_parameters( skey=
"Depletion_Fraction"
, fvalues=
depletion_fraction
, lfatal=
true
)
23
24
end subroutine
initialize_actual_et_fao56
25
26
!> Adjust the depletion fraction based on current reference ET0.
27
!!
28
!! From FAO-56: "The fraction p is a function of the evaporation power of the atmosphere.
29
!! At low rates of ETc, the p values listed in Table 22 are higher than at high rates of ETc.
30
!! For hot dry weather conditions, where ETc is high, p is 10-25% less than the values
31
!! presented in Table 22, and the soil is still relatively wet when the stress starts to occur.
32
!! When the crop evapotranspiration is low, p will be up to 20% more than the listed values.
33
!!
34
!! @param[in] p_table_22 This is the unadjusted depletion fraction value; FAO-56
35
!! table 22 gives values of the depletion fraction relative to a reference ET0 value of 5mm.
36
!! @param[in] reference_et0 The reference ET0 to which the depletion fraction will be
37
!! adjusted.
38
!! @note Discussed as a footnote to Table 22, FAO-56, Allen and others.
39
!! See @ref http://www.fao.org/docrep/x0490e/x0490e0e.htm#TopOfPage for details.
40
41
elemental
function
adjust_depletion_fraction_p
( p_table_22, reference_et0 )
result
( p )
42
43
real
(c_float),
intent(in)
:: p_table_22
44
real
(c_double),
intent(in)
:: reference_et0
45
real
(c_float) :: p
46
47
p = real(p_table_22 + 0.04_c_float * ( 5.0_c_float -
in_to_mm
( reference_et0 ) ), c_float)
48
49
p = min( p, 0.8_c_float )
50
p = max( p, 0.1_c_float )
51
52
end function
adjust_depletion_fraction_p
53
54
!----------------------------------------------------------------------------------------------------
55
56
elemental
subroutine
calculate_actual_et_fao56
( actual_et, &
57
adjusted_depletion_fraction_p, &
58
soil_storage, &
59
depletion_fraction_p, &
60
soil_storage_max, &
61
infiltration, &
62
crop_etc )
63
64
65
real
(c_double),
intent(inout)
:: actual_et
66
real
(c_double),
intent(inout)
:: adjusted_depletion_fraction_p
67
real
(c_float),
intent(in)
:: depletion_fraction_p
68
real
(c_double),
intent(in)
:: soil_storage
69
real
(c_float),
intent(in)
:: soil_storage_max
70
real
(c_float),
intent(in)
:: infiltration
71
real
(c_float),
intent(in)
:: crop_etc
72
73
! [ LOCALS ]
74
real
(c_float) :: p
75
real
(c_double) :: interim_soil_storage
76
real
(c_float) :: fraction_full_pet
77
real
(c_float) :: root_constant_ci
78
79
if
( soil_storage_max >= 0.0_c_float .and. soil_storage_max <=
near_zero
)
then
80
81
! by convention, if the soil_storage_max is approximately zero, we are dealing
82
! with a water body and the actual et should be the potential/crop et
83
actual_et = crop_etc
84
85
else
86
87
p =
adjust_depletion_fraction_p
( p_table_22=depletion_fraction_p, &
88
reference_et0=real(crop_etc, c_double))
89
90
adjusted_depletion_fraction_p = p
91
92
! soil storage value at which actual et begins to decline
93
root_constant_ci = ( 1.0_c_float - p ) * soil_storage_max
94
95
interim_soil_storage = soil_storage + infiltration
96
97
! root constant of 0 implies a depletion fraction of 1; in other words,
98
! there is no declining portion of the AET/PET to AW/AWC relation.
99
! ENTIRE DAY at PET
100
if
( root_constant_ci <= 0.0_c_float )
then
101
102
actual_et = min( real(crop_etc, c_double), interim_soil_storage )
103
104
! ALL or PARTIAL DAY at PET
105
elseif
( interim_soil_storage > root_constant_ci )
then
106
107
! calculate fraction of day that would be at full reference ET values
108
if
( crop_etc > 0.0_c_float )
then
109
110
fraction_full_pet = real((interim_soil_storage - root_constant_ci) / crop_etc, c_float)
111
112
else
113
114
fraction_full_pet = 99.
115
116
endif
117
118
! there is enough soil storage to cover withdrawal of soil moisture at full reference ET values
119
! for the entire day
120
if
( fraction_full_pet >= 1 )
then
121
122
actual_et = crop_etc
123
124
! part of day at full PET
125
else
126
127
actual_et = crop_etc * fraction_full_pet &
128
+ root_constant_ci &
129
* ( 1.0_c_float - exp( - crop_etc * ( 1.0_c_float - fraction_full_pet ) &
130
/ root_constant_ci ) )
131
132
endif
133
134
! ENTIRE DAY at LESS THAN PET
135
else
136
137
actual_et = interim_soil_storage * ( 1.0_c_float - exp( - crop_etc / root_constant_ci ) )
138
139
endif
140
141
endif
142
143
end subroutine
calculate_actual_et_fao56
144
145
146
end module
actual_et__fao56
actual_et__fao56
Calculates actual evapotranspiration by means of the SINGLE CROP COEFFICIENT procedure outlined in th...
Definition
actual_et__fao56.F90:9
actual_et__fao56::calculate_actual_et_fao56
elemental subroutine calculate_actual_et_fao56(actual_et, adjusted_depletion_fraction_p, soil_storage, depletion_fraction_p, soil_storage_max, infiltration, crop_etc)
Definition
actual_et__fao56.F90:63
actual_et__fao56::initialize_actual_et_fao56
subroutine initialize_actual_et_fao56()
Definition
actual_et__fao56.F90:21
actual_et__fao56::adjust_depletion_fraction_p
elemental real(c_float) function adjust_depletion_fraction_p(p_table_22, reference_et0)
Adjust the depletion fraction based on current reference ET0.
Definition
actual_et__fao56.F90:42
actual_et__fao56::depletion_fraction
real(c_float), dimension(:), allocatable depletion_fraction
Definition
actual_et__fao56.F90:16
constants_and_conversions
This module contains physical constants and convenience functions aimed at performing unit conversion...
Definition
constants_and_conversions.F90:8
constants_and_conversions::true
logical(c_bool), parameter, public true
Definition
constants_and_conversions.F90:38
constants_and_conversions::near_zero
real(c_float), parameter, public near_zero
Definition
constants_and_conversions.F90:41
constants_and_conversions::false
logical(c_bool), parameter, public false
Definition
constants_and_conversions.F90:39
parameters
Definition
parameters.F90:1
parameters::params
type(parameters_t), public params
Definition
parameters.F90:68
constants_and_conversions::in_to_mm
Definition
constants_and_conversions.F90:176
src
actual_et__fao56.F90
Generated on
for Soil Water Balance (SWB2) by
1.17.0