Soil Water Balance (SWB2)
Loading...
Searching...
No Matches
actual_et__thornthwaite_mather.F90
Go to the documentation of this file.
1!> @file
2!> Contains a single module, \ref actual_et__thornthwaite_mather, which
3!> provides support for calculating actual evapotranspiration by means of an
4!> approximation to the Thornthwaite-Mather soil-moisture retention tables.
5
6!> Calculate actual ET by means of an approximation to the Thornthwaite-Mather
7!> soil-moisture-retention tables.
9
10
11 use iso_c_binding, only : c_short, c_int, c_float, c_double
12 implicit none
13
14 real (c_float), parameter :: near_zero = 1.0e-9_c_float
15
16contains
17
19 actual_et, &
20 soil_storage, &
21 soil_storage_max, &
22 infiltration, &
23 crop_etc )
24
25 real (c_double), intent(inout) :: actual_et
26 real (c_double), intent(in) :: soil_storage
27 real (c_float), intent(in) :: soil_storage_max
28 real (c_float), intent(in) :: infiltration
29 real (c_float), intent(in) :: crop_etc
30
31 ! [ LOCALS ]
32 real (c_double) :: p_minus_pe
33 real (c_double) :: soil_storage_temp
34
35 p_minus_pe = real(infiltration, c_double) - real(crop_etc, c_double)
36
37 if ( p_minus_pe >= 0.0_c_double ) then
38
39 actual_et = crop_etc
40
41 elseif ( p_minus_pe < 0.0_c_double ) then
42
43 if ( soil_storage_max > near_zero ) then
44
45! soil_storage_temp = max( 0.0, min( soil_storage_max, precipitation + soil_storage ) )
46! actual_et = soil_storage_temp * ( 1.0_c_float - exp( -crop_etc / soil_storage_max ) )
47
48 ! NOTE: there is a difference in approaches between various practitioners... the Hawaii Water Budget code
49 ! calculates actual et on a temporary soil moisture value that includes the moisture received
50 ! on the current day. Alley calculates actual et on the basis of the previous days' soil moisture
51
52 soil_storage_temp = soil_storage * exp( p_minus_pe / real(soil_storage_max, c_double))
53 actual_et = soil_storage - soil_storage_temp
54
55 else
56 ! open water - limit actual et to the lesser of the reference ET *or* the amount of water 'infiltrated'
57
58 actual_et = min(real(infiltration, c_double), real(crop_etc, c_double))
59
60 endif
61
62 endif
63
65
Calculate actual ET by means of an approximation to the Thornthwaite-Mather soil-moisture-retention t...
elemental subroutine calculate_actual_et_thornthwaite_mather(actual_et, soil_storage, soil_storage_max, infiltration, crop_etc)