94 subroutine soil_moisture(processCase, frac_sealed, water_thresh_sealed, pet, evap_coeff, soil_moist_sat, frac_roots, &
95 soil_moist_FC, wilting_point, soil_moist_exponen, jarvis_thresh_c1, aet_canopy, prec_effec, &
96 runoff_sealed, storage_sealed, infiltration, soil_moist, aet, aet_sealed)
104 integer(i4),
intent(in) :: processcase
107 real(dp),
intent(in) :: frac_sealed
110 real(dp),
intent(in) :: water_thresh_sealed
113 real(dp),
intent(in) :: pet
116 real(dp),
intent(in) :: evap_coeff
119 real(dp),
dimension(:),
intent(in) :: soil_moist_sat
122 real(dp),
dimension(:),
intent(in) :: frac_roots
125 real(dp),
dimension(:),
intent(in) :: soil_moist_fc
128 real(dp),
dimension(:),
intent(in) :: wilting_point
131 real(dp),
dimension(:),
intent(in) :: soil_moist_exponen
134 real(dp),
intent(in) :: jarvis_thresh_c1
137 real(dp),
intent(in) :: aet_canopy
140 real(dp),
intent(in) :: prec_effec
143 real(dp),
intent(inout) :: runoff_sealed
146 real(dp),
intent(inout) :: storage_sealed
149 real(dp),
dimension(size(soil_moist_sat, 1)),
intent(inout) :: infiltration
152 real(dp),
dimension(size(soil_moist_sat, 1)),
intent(inout) :: soil_moist
155 real(dp),
dimension(size(soil_moist_sat, 1)),
intent(out) :: aet
158 real(dp),
intent(out) :: aet_sealed
164 real(dp) :: prec_effec_soil
167 real(dp) :: frac_runoff
170 real(dp) :: soil_stress_factor
179 runoff_sealed = 0.0_dp
182 if (frac_sealed > 0.0_dp)
then
183 tmp = storage_sealed + prec_effec
185 if (tmp > water_thresh_sealed)
then
186 runoff_sealed = tmp - water_thresh_sealed
187 storage_sealed = water_thresh_sealed
189 runoff_sealed = 0.0_dp
194 if(water_thresh_sealed .gt.
eps_dp)
then
195 aet_sealed = (pet / evap_coeff - aet_canopy) * (storage_sealed / water_thresh_sealed)
197 if (aet_sealed .lt. 0.0_dp) aet_sealed = 0.0_dp
199 aet_sealed = huge(1.0_dp)
203 if (storage_sealed .gt. aet_sealed)
then
204 storage_sealed = storage_sealed - aet_sealed
206 aet_sealed = storage_sealed
207 storage_sealed = 0.0_dp
215 infiltration(:) = 0.0_dp
218 prec_effec_soil = prec_effec
220 do hh = 1,
size(soil_moist_sat, 1)
222 if (hh .NE. 1) prec_effec_soil = infiltration(hh - 1)
227 if (soil_moist(hh) > soil_moist_sat(hh))
then
228 infiltration(hh) = prec_effec_soil
231 if(soil_moist(hh) >
eps_dp)
then
233 frac_runoff = exp(soil_moist_exponen(hh) * log(soil_moist(hh) / soil_moist_sat(hh)))
237 tmp = prec_effec_soil * (1.0_dp - frac_runoff)
239 if ((soil_moist(hh) + tmp) > soil_moist_sat(hh))
then
240 infiltration(hh) = prec_effec_soil + (soil_moist(hh) - soil_moist_sat(hh))
241 soil_moist(hh) = soil_moist_sat(hh)
243 infiltration(hh) = prec_effec_soil - tmp
244 soil_moist(hh) = soil_moist(hh) + tmp
254 aet(hh) = pet - aet_canopy
255 if (hh /= 1) aet(hh) = aet(hh) - sum(aet(1 : hh - 1), mask = (aet(1 : hh - 1) > 0.0_dp))
258 select case(processcase)
261 soil_stress_factor =
feddes_et_reduction(soil_moist(hh), soil_moist_fc(hh), wilting_point(hh), &
266 soil_stress_factor =
jarvis_et_reduction(soil_moist(hh), soil_moist_sat(hh), wilting_point(hh), &
267 frac_roots(hh), jarvis_thresh_c1)
270 aet(hh) = aet(hh) * soil_stress_factor
273 if(aet(hh) < 0.0_dp) aet(hh) = 0.0_dp
276 if(soil_moist(hh) > aet(hh))
then
277 soil_moist(hh) = soil_moist(hh) - aet(hh)
279 aet(hh) = soil_moist(hh) -
eps_dp
405 elemental pure FUNCTION jarvis_et_reduction(soil_moist, soil_moist_sat, wilting_point, frac_roots, jarvis_thresh_c1)
409 real(dp),
intent(in) :: soil_moist
412 real(dp),
intent(in) :: soil_moist_sat
415 real(dp),
intent(in) :: wilting_point
418 real(dp),
intent(in) :: frac_roots
421 real(dp),
intent(in) :: jarvis_thresh_c1
427 real(dp) :: theta_inorm
431 theta_inorm = (soil_moist - wilting_point) / (soil_moist_sat - wilting_point)
434 if (theta_inorm .LT. 0.0_dp) theta_inorm = 0.0_dp
435 if (theta_inorm .GT. 1.0_dp) theta_inorm = 1.0_dp
439 if (theta_inorm .GE. jarvis_thresh_c1)
then
442 else if (theta_inorm .LT. jarvis_thresh_c1)
then
elemental pure real(dp) function, public jarvis_et_reduction(soil_moist, soil_moist_sat, wilting_point, frac_roots, jarvis_thresh_c1)
stress factor for reducing evapotranspiration based on actual soil moisture
subroutine, public soil_moisture(processcase, frac_sealed, water_thresh_sealed, pet, evap_coeff, soil_moist_sat, frac_roots, soil_moist_fc, wilting_point, soil_moist_exponen, jarvis_thresh_c1, aet_canopy, prec_effec, runoff_sealed, storage_sealed, infiltration, soil_moist, aet, aet_sealed)
Soil moisture in different soil horizons.