11 use iso_c_binding,
only : c_short, c_int, c_float, c_double
58 adjusted_depletion_fraction_p, &
60 depletion_fraction_p, &
66 real (c_double),
intent(inout) :: actual_et
67 real (c_double),
intent(inout) :: adjusted_depletion_fraction_p
68 real (c_float),
intent(in) :: depletion_fraction_p
69 real (c_double),
intent(in) :: soil_storage
70 real (c_float),
intent(in) :: soil_storage_max
71 real (c_float),
intent(in) :: infiltration
72 real (c_float),
intent(in) :: crop_etc
76 real (c_float) :: depletion_amount
78 real (c_double) :: interim_soil_storage
79 real (c_float) :: fraction_full_pet
80 real (c_float) :: root_constant_ci
82 if ( soil_storage_max >= 0.0_c_float .and. soil_storage_max <=
near_zero )
then
91 reference_et0=real(crop_etc, c_double))
93 adjusted_depletion_fraction_p = p
96 root_constant_ci = ( 1.0_c_float - p ) * soil_storage_max
98 interim_soil_storage = soil_storage + infiltration
103 if ( root_constant_ci <= 0.0_c_float )
then
105 actual_et = min( crop_etc, interim_soil_storage )
108 elseif ( interim_soil_storage > root_constant_ci )
then
111 if ( crop_etc > 0.0_c_float )
then
113 fraction_full_pet = (interim_soil_storage - root_constant_ci) / crop_etc
117 fraction_full_pet = 99.
123 if ( fraction_full_pet >= 1 )
then
130 actual_et = crop_etc * fraction_full_pet &
132 * ( 1.0_c_float - exp( - crop_etc * ( 1.0_c_float - fraction_full_pet ) &
133 / root_constant_ci ) )
140 actual_et = interim_soil_storage * ( 1.0_c_float - exp( - crop_etc / root_constant_ci ) )
elemental subroutine calculate_actual_et_fao56(actual_et, adjusted_depletion_fraction_p, soil_storage, depletion_fraction_p, soil_storage_max, infiltration, crop_etc)