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
13 implicit none
14
15contains
16
18 actual_et, &
19 soil_storage, &
20 soil_storage_max, &
21 infiltration, &
22 crop_etc )
23
24 real (c_double), intent(inout) :: actual_et
25 real (c_double), intent(in) :: soil_storage
26 real (c_float), intent(in) :: soil_storage_max
27 real (c_float), intent(in) :: infiltration
28 real (c_float), intent(in) :: crop_etc
29
30 ! [ LOCALS ]
31 real (c_double) :: p_minus_pe
32 real (c_double) :: soil_storage_temp
33
34 p_minus_pe = real(infiltration, c_double) - real(crop_etc, c_double)
35
36 if ( p_minus_pe >= 0.0_c_double ) then
37
38 actual_et = crop_etc
39
40 elseif ( p_minus_pe < 0.0_c_double ) then
41
42 if ( soil_storage_max > near_zero ) then
43
44! soil_storage_temp = max( 0.0, min( soil_storage_max, precipitation + soil_storage ) )
45! actual_et = soil_storage_temp * ( 1.0_c_float - exp( -crop_etc / soil_storage_max ) )
46
47 ! NOTE: there is a difference in approaches between various practitioners... the Hawaii Water Budget code
48 ! calculates actual et on a temporary soil moisture value that includes the moisture received
49 ! on the current day. Alley calculates actual et on the basis of the previous days' soil moisture
50
51 soil_storage_temp = soil_storage * exp( p_minus_pe / real(soil_storage_max, c_double))
52 actual_et = soil_storage - soil_storage_temp
53
54 else
55 ! open water - limit actual et to the lesser of the reference ET *or* the amount of water 'infiltrated'
56
57 actual_et = min(real(infiltration, c_double), real(crop_etc, c_double))
58
59 endif
60
61 endif
62
64
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)
This module contains physical constants and convenience functions aimed at performing unit conversion...
real(c_float), parameter, public near_zero