Line data Source code
1 : !> \file mo_mhm.f90
2 : !> \brief \copybrief mo_mhm
3 : !> \details \copydetails mo_mhm
4 :
5 : !> \brief Call all main processes of mHM.
6 : !> \details This module calls all processes of mHM for a given configuration.
7 : !! The configuration of the model is stored in the a process matrix.
8 : !! This configuration is specified in the namelist mhm.nml.
9 : !!
10 : !! The processes are executed in ascending order. At the moment only
11 : !! process 5 and 8 have options.
12 : !!
13 : !! Currently the following processes are implemented:
14 : !!
15 : !! Process | Name | Flag | Description
16 : !! ---------- | ------------------------- | ----- | ------------------------------------------
17 : !! 1 | interception | 1 | Maximum interception
18 : !! 2 | snow and melting | 1 | Degree-day
19 : !! 3 | soil moisture | 1 | Feddes equation for ET reduction, Brooks-Corey like
20 : !! 3 | soil moisture | 2 | Jarvis equation for ET reduction, Brooks-Corey like
21 : !! 3 | soil moisture | 3 | Jarvis eq. for ET red. + FC dependency on root frac. coef.
22 : !! 4 | direct runoff | 1 | Linear reservoir exceedance
23 : !! 5 | PET | -1 | PET is input, LAI based correction, dynamic scaling func.
24 : !! 5 | PET | 0 | PET is input, Aspect based correction
25 : !! 5 | PET | 1 | Hargreaves-Samani
26 : !! 5 | PET | 2 | Priestley-Taylor
27 : !! 5 | PET | 3 | Penman-Monteith
28 : !! 6 | interflow | 1 | Nonlinear reservoir with saturation excess
29 : !! 7 | percolation and base flow | 1 | GW linear reservoir
30 : !! 8 | routing | 0 | no routing
31 : !! 8 | routing | 1 | use mRM i.e. Muskingum
32 : !! 8 | routing | 2 | use mRM i.e. adaptive timestep
33 : !> \changelog
34 : !! - Luis Samaniego, Rohini Kumar Dec 2012
35 : !! - modularization
36 : !! - Luis Samaniego Feb 2013
37 : !! - call routine
38 : !! - Rohini Kumar Feb 2013
39 : !! - MPR call and other pre-requisite variables for this call
40 : !! - Rohini Kumar May 2013
41 : !! - Error checks
42 : !! - Rohini Kumar Jun 2013
43 : !! - sealed area correction in total runoff
44 : !! - initalization of soil moist. at first timestep
45 : !! - Rohini Kumar Aug 2013
46 : !! - dynamic LAI option included, and changed within the code made accordingly (e.g., canopy intecpt.)
47 : !! - max. canopy interception is estimated outside of MPR call
48 : !! - Matthias Zink Feb 2014
49 : !! - added PET calculation: Hargreaves-Samani (Process 5)
50 : !! - Matthias Zink Mar 2014
51 : !! - added inflow from upstream areas
52 : !! - Matthias Zink Apr 2014
53 : !! - added PET calculation: Priestley-Taylor and Penman-Monteith and its parameterization (Process 5)
54 : !! - Rohini Kumar Apr 2014
55 : !! - mHM run with a single L0 grid cell, also in the routing mode
56 : !! - Stephan Thober Jun 2014
57 : !! - added flag for switching of MPR
58 : !! - Matthias Cuntz & Juliane Mai Nov 2014
59 : !! - LAI input from daily, monthly or yearly files
60 : !! - Matthias Zink Dec 2014
61 : !! - adopted inflow gauges to ignore headwater cells
62 : !! - Stephan Thober Aug 2015
63 : !! - moved routing to mRM
64 : !! - Rohini Kumar Mar 2016
65 : !! - changes for handling multiple soil database options
66 : !! - Rohini Kumar Dec 2016
67 : !! - changes for reading gridded mean monthly LAI fields
68 : !! - Stephan Thober Jan 2017
69 : !! - added prescribed weights for tavg and pet
70 : !! - Zink M. Demirel C. Mar 2017
71 : !! - added Jarvis soil water stress function at SM process(3)
72 : !! - M.Cuneyd Demirel & Simon Stisen May 2017
73 : !! - added FC dependency on root fraction coef. at SM process(3)
74 : !! - M.Cuneyd Demirel & Simon Stisen Jun 2017
75 : !! - added PET correction based on LAI at PET process(5)
76 : !! - Robert Schweppe, Stephan Thober Nov 2017
77 : !! - moved call to MPR to mhm_eval
78 : !! - Robert Schweppe Jun 2018
79 : !! - refactoring and reformatting
80 : !! - Robert Schweppe Nov 2018
81 : !! - added c2TSTu for unit conversion (moved here from MPR)
82 : !! - Rohini Kumar Oct 2021
83 : !! - Neutron count module to mHM integrate into develop branch (5.11.2)
84 : !! - Stephan Thober Jan 2022
85 : !! - added is_hourly_forcing
86 : !! - Sebastian Mueller May 2022
87 : !! - added temp_calc and prec_calc for coupling to other models
88 : !> \authors Luis Samaniego
89 : !> \date Dec 2012
90 : !> \copyright Copyright 2005-\today, the mHM Developers, Luis Samaniego, Sabine Attinger: All rights reserved.
91 : !! mHM is released under the LGPLv3+ license \license_note
92 : !> \ingroup f_mhm
93 : MODULE mo_mHM
94 :
95 : use mo_kind, only : i4, dp
96 : use mo_message, only : message
97 : !$ USE omp_lib
98 :
99 : IMPLICIT NONE
100 :
101 : PUBLIC :: mHM ! initialization sequence
102 :
103 : PRIVATE
104 :
105 : CONTAINS
106 : ! ------------------------------------------------------------------
107 :
108 : ! NAME
109 : ! mHM
110 :
111 : ! PURPOSE
112 : !> \brief Pure mHM calculations.
113 :
114 : !> \details Pure mHM calculations. All variables are allocated and initialized.
115 : !> They will be local variables within this call.
116 :
117 : ! INTENT(IN)
118 : !> \param[in] "logical :: read_states" indicated whether states have been read from
119 : !> file
120 : !> \param[in] "integer(i4) :: tt" simulation time step
121 : !> \param[in] "real(dp) :: time" current decimal Julian day
122 : !> \param[in] "integer(i4), dimension(:, :) :: processMatrix" mHM process configuration matrix
123 : !> \param[in] "real(dp), dimension(:) :: horizon_depth" Depth of each horizon in mHM
124 : !> \param[in] "integer(i4) :: nCells1" number of cells in a given domain at level L1
125 : !> \param[in] "integer(i4) :: nHorizons_mHM" Number of Horizons in mHM
126 : !> \param[in] "real(dp) :: ntimesteps_day" number of time intervals per day, transformed
127 : !> in dp
128 : !> \param[in] "real(dp), dimension(:) :: neutron_integral_AFast" tabular for neutron flux approximation
129 : !> \param[in] "real(dp), dimension(:) :: latitude" latitude on level 1
130 : !> \param[in] "real(dp), dimension(:) :: evap_coeff" Evaporation coefficent for free-water surface
131 : !> of that current month
132 : !> \param[in] "real(dp), dimension(:) :: fday_prec" [-] day ratio precipitation < 1
133 : !> \param[in] "real(dp), dimension(:) :: fnight_prec" [-] night ratio precipitation < 1
134 : !> \param[in] "real(dp), dimension(:) :: fday_pet" [-] day ratio PET < 1
135 : !> \param[in] "real(dp), dimension(:) :: fnight_pet" [-] night ratio PET < 1
136 : !> \param[in] "real(dp), dimension(:) :: fday_temp" [-] day factor mean temp
137 : !> \param[in] "real(dp), dimension(:) :: fnight_temp" [-] night factor mean temp
138 : !> \param[in] "real(dp), dimension(:, :, :) :: temp_weights" multiplicative weights for temperature (deg K)
139 : !> \param[in] "real(dp), dimension(:, :, :) :: pet_weights" multiplicative weights for potential
140 : !> evapotranspiration
141 : !> \param[in] "real(dp), dimension(:, :, :) :: pre_weights" multiplicative weights for precipitation
142 : !> \param[in] "logical :: read_meteo_weights" flag whether weights for tavg and pet have read
143 : !> and should be used
144 : !> \param[in] "real(dp), dimension(:) :: pet_in" [mm d-1] Daily potential evapotranspiration
145 : !> (input)
146 : !> \param[in] "real(dp), dimension(:) :: tmin_in" [degc] Daily minimum temperature
147 : !> \param[in] "real(dp), dimension(:) :: tmax_in" [degc] Daily maxumum temperature
148 : !> \param[in] "real(dp), dimension(:) :: netrad_in" [w m2] Daily average net radiation
149 : !> \param[in] "real(dp), dimension(:) :: absvappres_in" [Pa] Daily average absolute vapour pressure
150 : !> \param[in] "real(dp), dimension(:) :: windspeed_in" [m s-1] Daily average wind speed
151 : !> \param[in] "real(dp), dimension(:) :: prec_in" [mm d-1] Daily mean precipitation
152 : !> \param[in] "real(dp), dimension(:) :: temp_in" [degc] Daily average temperature
153 :
154 : ! INTENT(INOUT)
155 : !> \param[inout] "real(dp), dimension(:) :: fSealed1" fraction of sealed area at scale L1
156 : !> \param[inout] "real(dp), dimension(:) :: interc" Interception
157 : !> \param[inout] "real(dp), dimension(:) :: snowpack" Snowpack
158 : !> \param[inout] "real(dp), dimension(:) :: sealedStorage" Retention storage of impervious areas
159 : !> \param[inout] "real(dp), dimension(:, :) :: soilMoisture" Soil moisture of each horizon
160 : !> \param[inout] "real(dp), dimension(:) :: unsatStorage" Upper soil storage
161 : !> \param[inout] "real(dp), dimension(:) :: satStorage" Groundwater storage
162 : !> \param[inout] "real(dp), dimension(:) :: neutrons" Ground albedo neutrons
163 : !> \param[inout] "real(dp), dimension(:) :: pet_calc" [mm TS-1] estimated PET (if PET is input =
164 : !> corrected values (fAsp*PET))
165 : !> \param[inout] "real(dp), dimension(:, :) :: aet_soil" actual ET
166 : !> \param[inout] "real(dp), dimension(:) :: aet_canopy" Real evaporation intensity from canopy
167 : !> \param[inout] "real(dp), dimension(:) :: aet_sealed" Actual ET from free-water surfaces
168 : !> \param[inout] "real(dp), dimension(:) :: baseflow" Baseflow
169 : !> \param[inout] "real(dp), dimension(:, :) :: infiltration" Recharge, infiltration intensity or effective
170 : !> precipitation of each horizon
171 : !> \param[inout] "real(dp), dimension(:) :: fast_interflow" Fast runoff component
172 : !> \param[inout] "real(dp), dimension(:) :: melt" Melting snow depth
173 : !> \param[inout] "real(dp), dimension(:) :: perc" Percolation
174 : !> \param[inout] "real(dp), dimension(:) :: prec_effect" Effective precipitation depth (snow melt +
175 : !> rain)
176 : !> \param[inout] "real(dp), dimension(:) :: rain" Rain precipitation depth
177 : !> \param[inout] "real(dp), dimension(:) :: runoff_sealed" Direct runoff from impervious areas
178 : !> \param[inout] "real(dp), dimension(:) :: slow_interflow" Slow runoff component
179 : !> \param[inout] "real(dp), dimension(:) :: snow" Snow precipitation depth
180 : !> \param[inout] "real(dp), dimension(:) :: throughfall" Throughfall
181 : !> \param[inout] "real(dp), dimension(:) :: total_runoff" Generated runoff
182 : !> \param[inout] "real(dp), dimension(:) :: alpha" Exponent for the upper reservoir
183 : !> \param[inout] "real(dp), dimension(:) :: deg_day_incr" Increase of the Degree-day factor per mm of
184 : !> increase in precipitation
185 : !> \param[inout] "real(dp), dimension(:) :: deg_day_max" Maximum Degree-day factor
186 : !> \param[inout] "real(dp), dimension(:) :: deg_day_noprec" Degree-day factor with no precipitation
187 : !> \param[inout] "real(dp), dimension(:) :: deg_day" Degree-day factor
188 : !> \param[inout] "real(dp), dimension(:) :: fAsp" [1] PET correction for Aspect at level 1
189 : !> \param[inout] "real(dp), dimension(:) :: petLAIcorFactorL1" PET correction factor based on LAI at level 1
190 : !> \param[inout] "real(dp), dimension(:) :: HarSamCoeff" [1] PET Hargreaves Samani coefficient at
191 : !> level 1
192 : !> \param[inout] "real(dp), dimension(:) :: PrieTayAlpha" [1] PET Priestley Taylor coefficient at
193 : !> level 1
194 : !> \param[inout] "real(dp), dimension(:) :: aeroResist" [s m-1] PET aerodynamical resitance at level
195 : !> 1
196 : !> \param[inout] "real(dp), dimension(:) :: surfResist" [s m-1] PET bulk surface resitance at level 1
197 : !> \param[inout] "real(dp), dimension(:, :) :: frac_roots" Fraction of Roots in soil horizon
198 : !> \param[inout] "real(dp), dimension(:) :: interc_max" Maximum interception
199 : !> \param[inout] "real(dp), dimension(:) :: karst_loss" Karstic percolation loss
200 : !> \param[inout] "real(dp), dimension(:) :: k0" Recession coefficient of the upper reservoir,
201 : !> upper outlet
202 : !> \param[inout] "real(dp), dimension(:) :: k1" Recession coefficient of the upper reservoir,
203 : !> lower outlet
204 : !> \param[inout] "real(dp), dimension(:) :: k2" Baseflow recession coefficient
205 : !> \param[inout] "real(dp), dimension(:) :: kp" Percolation coefficient
206 : !> \param[inout] "real(dp), dimension(:, :) :: soil_moist_FC" Soil moisture below which actual ET is
207 : !> reduced
208 : !> \param[inout] "real(dp), dimension(:, :) :: soil_moist_sat" Saturation soil moisture for each horizon
209 : !> [mm]
210 : !> \param[inout] "real(dp), dimension(:, :) :: soil_moist_exponen" Exponential parameter to how non-linear is
211 : !> the soil water retention
212 : !> \param[inout] "real(dp), dimension(:) :: jarvis_thresh_c1" jarvis critical value for normalized soil
213 : !> water content
214 : !> \param[inout] "real(dp), dimension(:) :: temp_thresh" Threshold temperature for snow/rain
215 : !> \param[inout] "real(dp), dimension(:) :: unsat_thresh" Threshold water depth in upper reservoir
216 : !> \param[inout] "real(dp), dimension(:) :: water_thresh_sealed" Threshold water depth in impervious areas
217 : !> \param[inout] "real(dp), dimension(:, :) :: wilting_point" Permanent wilting point for each horizon
218 : !
219 : !> \param[inout] "real(dp), dimension(:) :: No_count"
220 : !> \param[inout] "real(dp), dimension(:) :: bulkDens"
221 : !> \param[inout] "real(dp), dimension(:) :: latticeWater"
222 : !> \param[inout] "real(dp), dimension(:, :) :: COSMICL3"
223 :
224 :
225 : ! HISTORY
226 : !> \authors Luis Samaniego & Rohini Kumar
227 :
228 : !> \date Dec 2012
229 2020272 : subroutine mHM(read_states, tt, time, processMatrix, horizon_depth, nCells1, nHorizons_mHM, &
230 4040544 : c2TSTu, neutron_integral_AFast, &
231 4040544 : evap_coeff, &
232 2020272 : fSealed1, interc, snowpack, &
233 4040544 : sealedStorage, soilMoisture, unsatStorage, satStorage, neutrons, &
234 2020272 : pet_calc, temp_calc, prec_calc, &
235 2020272 : aet_soil, aet_canopy, &
236 8081088 : aet_sealed, baseflow, infiltration, fast_interflow, melt, perc, prec_effect, rain, runoff_sealed, &
237 8081088 : slow_interflow, snow, throughfall, total_runoff, &
238 2020272 : alpha, deg_day_incr, deg_day_max, deg_day_noprec, &
239 2020272 : deg_day, frac_roots, &
240 8081088 : interc_max, karst_loss, k0, k1, k2, kp, soil_moist_FC, soil_moist_sat, soil_moist_exponen, &
241 8081088 : jarvis_thresh_c1, temp_thresh, unsat_thresh, water_thresh_sealed, wilting_point, &
242 4040544 : No_count, bulkDens, latticeWater, COSMICL3)
243 :
244 : use mo_julian, only : dec2date
245 : use mo_canopy_interc, only : canopy_interc
246 : use mo_neutrons, only : COSMIC, DesiletsN0
247 : use mo_runoff, only : L1_total_runoff, runoff_sat_zone, runoff_unsat_zone
248 : use mo_snow_accum_melt, only : snow_accum_melt
249 : use mo_soil_moisture, only : soil_moisture
250 :
251 : implicit none
252 :
253 : !> indicated whether states have been read from file
254 : logical, intent(in) :: read_states
255 :
256 : !> simulation time step
257 : integer(i4), intent(in) :: tt
258 :
259 : !> current decimal Julian day
260 : real(dp), intent(in) :: time
261 :
262 : !> mHM process configuration matrix
263 : integer(i4), dimension(:, :), intent(in) :: processMatrix
264 :
265 : !> Depth of each horizon in mHM
266 : real(dp), dimension(:), intent(in) :: horizon_depth
267 :
268 : !> number of cells in a given domain at level L1
269 : integer(i4), intent(in) :: nCells1
270 :
271 : !> Number of Horizons in mHM
272 : integer(i4), intent(in) :: nHorizons_mHM
273 :
274 : !> unit conversion
275 : real(dp), intent(in) :: c2TSTu
276 :
277 : !> tabular for neutron flux approximation
278 : real(dp), dimension(:), intent(in) :: neutron_integral_AFast
279 :
280 : !> Evaporation coefficent for free-water surface of that current month
281 : real(dp), dimension(:), intent(in) :: evap_coeff
282 :
283 : !> fraction of sealed area at scale L1
284 : real(dp), dimension(:), intent(in) :: fSealed1
285 :
286 : !> Interception
287 : real(dp), dimension(:), intent(inout) :: interc
288 :
289 : !> Snowpack
290 : real(dp), dimension(:), intent(inout) :: snowpack
291 :
292 : !> Retention storage of impervious areas
293 : real(dp), dimension(:), intent(inout) :: sealedStorage
294 :
295 : !> Soil moisture of each horizon
296 : real(dp), dimension(:, :), intent(inout) :: soilMoisture
297 :
298 : !> Upper soil storage
299 : real(dp), dimension(:), intent(inout) :: unsatStorage
300 :
301 : !> Groundwater storage
302 : real(dp), dimension(:), intent(inout) :: satStorage
303 :
304 : !> Ground albedo neutrons
305 : real(dp), dimension(:), intent(inout) :: neutrons
306 :
307 : !> [mm TS-1] estimated PET (if PET is input = corrected values (fAsp*PET))
308 : real(dp), dimension(:), intent(inout) :: pet_calc
309 :
310 : !> [degC] temperature for current time step
311 : real(dp), dimension(:), intent(inout) :: temp_calc
312 :
313 : !> [mm TS-1] precipitation for current time step
314 : real(dp), dimension(:), intent(inout) :: prec_calc
315 :
316 : !> actual ET
317 : real(dp), dimension(:, :), intent(inout) :: aet_soil
318 :
319 : !> Real evaporation intensity from canopy
320 : real(dp), dimension(:), intent(inout) :: aet_canopy
321 :
322 : !> Actual ET from free-water surfaces
323 : real(dp), dimension(:), intent(inout) :: aet_sealed
324 :
325 : !> Baseflow
326 : real(dp), dimension(:), intent(inout) :: baseflow
327 :
328 : !> Recharge, infiltration intensity or effective precipitation of each horizon
329 : real(dp), dimension(:, :), intent(inout) :: infiltration
330 :
331 : !> Fast runoff component
332 : real(dp), dimension(:), intent(inout) :: fast_interflow
333 :
334 : !> Melting snow depth
335 : real(dp), dimension(:), intent(inout) :: melt
336 :
337 : !> Percolation
338 : real(dp), dimension(:), intent(inout) :: perc
339 :
340 : !> Effective precipitation depth (snow melt + rain)
341 : real(dp), dimension(:), intent(inout) :: prec_effect
342 :
343 : !> Rain precipitation depth
344 : real(dp), dimension(:), intent(inout) :: rain
345 :
346 : !> Direct runoff from impervious areas
347 : real(dp), dimension(:), intent(inout) :: runoff_sealed
348 :
349 : !> Slow runoff component
350 : real(dp), dimension(:), intent(inout) :: slow_interflow
351 :
352 : !> Snow precipitation depth
353 : real(dp), dimension(:), intent(inout) :: snow
354 :
355 : !> Throughfall
356 : real(dp), dimension(:), intent(inout) :: throughfall
357 :
358 : !> Generated runoff
359 : real(dp), dimension(:), intent(inout) :: total_runoff
360 :
361 : !> Exponent for the upper reservoir
362 : real(dp), dimension(:), intent(inout) :: alpha
363 :
364 : !> Increase of the Degree-day factor per mm of increase in precipitation
365 : real(dp), dimension(:), intent(inout) :: deg_day_incr
366 :
367 : !> Maximum Degree-day factor
368 : real(dp), dimension(:), intent(inout) :: deg_day_max
369 :
370 : !> Degree-day factor with no precipitation
371 : real(dp), dimension(:), intent(inout) :: deg_day_noprec
372 :
373 : !> Degree-day factor
374 : real(dp), dimension(:), intent(inout) :: deg_day
375 :
376 : !> Fraction of Roots in soil horizon
377 : real(dp), dimension(:, :), intent(inout) :: frac_roots
378 :
379 : !> Maximum interception
380 : real(dp), dimension(:), intent(inout) :: interc_max
381 :
382 : !> Karstic percolation loss
383 : real(dp), dimension(:), intent(inout) :: karst_loss
384 :
385 : !> Recession coefficient of the upper reservoir, upper outlet
386 : real(dp), dimension(:), intent(inout) :: k0
387 :
388 : !> Recession coefficient of the upper reservoir, lower outlet
389 : real(dp), dimension(:), intent(inout) :: k1
390 :
391 : !> Baseflow recession coefficient
392 : real(dp), dimension(:), intent(inout) :: k2
393 :
394 : !> Percolation coefficient
395 : real(dp), dimension(:), intent(inout) :: kp
396 :
397 : !> Soil moisture below which actual ET is reduced
398 : real(dp), dimension(:, :), intent(inout) :: soil_moist_FC
399 :
400 : !> Saturation soil moisture for each horizon [mm]
401 : real(dp), dimension(:, :), intent(inout) :: soil_moist_sat
402 :
403 : !> Exponential parameter to how non-linear is the soil water retention
404 : real(dp), dimension(:, :), intent(inout) :: soil_moist_exponen
405 :
406 : !> jarvis critical value for normalized soil water content
407 : real(dp), dimension(:), intent(inout) :: jarvis_thresh_c1
408 :
409 : !> Threshold temperature for snow/rain
410 : real(dp), dimension(:), intent(inout) :: temp_thresh
411 :
412 : !> Threshold water depth in upper reservoir
413 : real(dp), dimension(:), intent(inout) :: unsat_thresh
414 :
415 : !> Threshold water depth in impervious areas
416 : real(dp), dimension(:), intent(inout) :: water_thresh_sealed
417 :
418 : !> Permanent wilting point for each horizon
419 : real(dp), dimension(:, :), intent(inout) :: wilting_point
420 :
421 : ! neutron count
422 : real(dp), dimension(:), intent(inout) :: No_count
423 : real(dp), dimension(:,:), intent(inout) :: bulkDens
424 : real(dp), dimension(:,:), intent(inout) :: latticeWater
425 : real(dp), dimension(:,:), intent(inout) :: COSMICL3
426 :
427 :
428 : ! Month of current day [1-12]
429 : integer(i4) :: month
430 : ! cell index
431 : integer(i4) :: k
432 :
433 6060816 : real(dp), dimension(size(infiltration, 2)) :: tmp_infiltration
434 8081088 : real(dp), dimension(size(soilMoisture, 2)) :: tmp_soilMoisture
435 8081088 : real(dp), dimension(size(aet_soil, 2)) :: tmp_aet_soil
436 :
437 : !-------------------------------------------------------------------
438 : ! date and month of this timestep
439 : !-------------------------------------------------------------------
440 2020272 : call dec2date(time, mm = month)
441 :
442 : !-------------------------------------------------------------------
443 : ! Update the inital states of soil water content for the first time
444 : ! step and when perform_mpr = FALSE
445 : ! based on the half of the derived values of Field capacity
446 : ! other states are kept at their inital values
447 : !-------------------------------------------------------------------
448 2020272 : if((tt .EQ. 1) .AND. (.not. read_states)) then
449 6972 : soilMoisture(:, :) = 0.5_dp * soil_moist_FC(:, :)
450 : end if
451 :
452 : !-------------------------------------------------------------------
453 : ! HYDROLOGICAL PROCESSES at L1-LEVEL
454 : !-------------------------------------------------------------------
455 : !$OMP parallel default(shared) &
456 : !$OMP private(k, tmp_soilmoisture, tmp_infiltration, tmp_aet_soil)
457 : !$OMP do SCHEDULE(STATIC)
458 78667320 : do k = 1, nCells1
459 :
460 76647048 : call canopy_interc(pet_calc(k), interc_max(k), prec_calc(k), & ! Intent IN
461 76647048 : interc(k), & ! Intent INOUT
462 153294096 : throughfall(k), aet_canopy(k)) ! Intent OUT
463 76647048 : call snow_accum_melt(deg_day_incr(k), deg_day_max(k) * c2TSTu, & ! Intent IN
464 76647048 : deg_day_noprec(k) * c2TSTu, prec_calc(k), temp_calc(k), temp_thresh(k), throughfall(k), & ! Intent IN
465 76647048 : snowpack(k), & ! Intent INOUT
466 76647048 : deg_day(k), & ! Intent OUT
467 153294096 : melt(k), prec_effect(k), rain(k), snow(k)) ! Intent OUT
468 :
469 229941144 : tmp_soilMoisture(:) = soilMoisture(k, :)
470 229941144 : tmp_infiltration(:) = infiltration(k, :)
471 :
472 76647048 : call soil_moisture(processMatrix(3, 1), & ! Intent IN
473 76647048 : fSealed1(k), water_thresh_sealed(k), & ! Intent IN
474 76647048 : pet_calc(k), evap_coeff(month), soil_moist_sat(k, :), frac_roots(k, :), & ! Intent IN
475 : soil_moist_FC(k, :), wilting_point(k, :), soil_moist_exponen(k, :), & ! Intent IN
476 0 : jarvis_thresh_c1(k), aet_canopy(k), & ! Intent IN
477 76647048 : prec_effect(k), runoff_sealed(k), sealedStorage(k), & ! Intent INOUT
478 : tmp_infiltration(:), tmp_soilMoisture(:), & ! Intent INOUT
479 229941144 : tmp_aet_soil(:), aet_sealed(k)) ! Intent OUT
480 :
481 229941144 : infiltration(k, :) = tmp_infiltration(:)
482 229941144 : soilMoisture(k, :) = tmp_soilMoisture(:)
483 229941144 : aet_soil(k, :) = tmp_aet_soil(:)
484 153294096 : call runoff_unsat_zone(c2TSTu / k1(k), c2TSTu / kp(k), c2TSTu / k0(k), alpha(k), karst_loss(k), & ! Intent IN
485 76647048 : infiltration(k, nHorizons_mHM), unsat_thresh(k), & ! Intent IN
486 76647048 : satStorage(k), unsatStorage(k), & ! Intent INOUT
487 229941144 : slow_interflow(k), fast_interflow(k), perc(k)) ! Intent OUT
488 76647048 : call runoff_sat_zone(c2TSTu / k2(k), & ! Intent IN
489 : satStorage(k), & ! Intent INOUT
490 76647048 : baseflow(k)) ! Intent OUT
491 : call L1_total_runoff(fSealed1(k), fast_interflow(k), slow_interflow(k), baseflow(k), & ! Intent IN
492 : runoff_sealed(k), & ! Intent IN
493 76647048 : total_runoff(k)) ! Intent OUT
494 :
495 : !-------------------------------------------------------------------
496 : ! Nested model: Neutrons state variable, related to soil moisture
497 : ! >> NOTE THAT SINCE LAST mHM layer is variable iFlag_soilDB = 0
498 : ! the neuton count is estimated only upto nHorizons_mHM-1
499 : ! set your horizon depth accordingly
500 : !-------------------------------------------------------------------
501 : ! DESLET
502 76647048 : if ( processMatrix(10, 1) .EQ. 1 ) &
503 8570016 : call DesiletsN0( soilMoisture(k,1:nHorizons_mHM-1),& ! Intent IN
504 8570016 : horizon_depth(1:nHorizons_mHM-1), & ! Intent IN
505 8570016 : bulkDens(k,1:nHorizons_mHM-1), & ! Intent IN
506 8570016 : latticeWater(k,1:nHorizons_mHM-1), No_count(k), & ! Intent IN
507 42850080 : neutrons(k) ) ! Intent INOUT
508 :
509 : ! COSMIC
510 76647048 : if ( processMatrix(10, 1) .EQ. 2 ) &
511 0 : call COSMIC( soilMoisture(k,1:nHorizons_mHM-1), horizon_depth(1:nHorizons_mHM-1),&
512 : neutron_integral_AFast(:), & ! Intent IN
513 : interc(k), snowpack(k), & ! Intent IN
514 0 : No_count(k), bulkDens(k,1:nHorizons_mHM-1), & ! Intent IN
515 0 : latticeWater(k,1:nHorizons_mHM-1), COSMICL3(k,1:nHorizons_mHM-1), & ! Intent IN
516 155314368 : neutrons(k) ) ! Intent INOUT
517 : end do
518 : !$OMP end do
519 : !$OMP end parallel
520 :
521 2020272 : end subroutine mHM
522 :
523 : END MODULE mo_mHM
|