5.13.2-dev0
mHM
The mesoscale Hydrological Model
Loading...
Searching...
No Matches
mo_mhm.f90
Go to the documentation of this file.
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
93MODULE 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
105CONTAINS
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 subroutine mhm(read_states, tt, time, processMatrix, horizon_depth, nCells1, nHorizons_mHM, &
230 c2TSTu, neutron_integral_AFast, &
231 evap_coeff, &
232 fSealed1, interc, snowpack, &
233 sealedStorage, soilMoisture, unsatStorage, satStorage, neutrons, &
234 pet_calc, temp_calc, prec_calc, &
235 aet_soil, aet_canopy, &
236 aet_sealed, baseflow, infiltration, fast_interflow, melt, perc, prec_effect, rain, runoff_sealed, &
237 slow_interflow, snow, throughfall, total_runoff, &
238 alpha, deg_day_incr, deg_day_max, deg_day_noprec, &
239 deg_day, frac_roots, &
240 interc_max, karst_loss, k0, k1, k2, kp, soil_moist_FC, soil_moist_sat, soil_moist_exponen, &
241 jarvis_thresh_c1, temp_thresh, unsat_thresh, water_thresh_sealed, wilting_point, &
242 No_count, bulkDens, latticeWater, COSMICL3)
243
244 use mo_julian, only : dec2date
246 use mo_neutrons, only : cosmic, desiletsn0
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 real(dp), dimension(size(infiltration, 2)) :: tmp_infiltration
434 real(dp), dimension(size(soilMoisture, 2)) :: tmp_soilmoisture
435 real(dp), dimension(size(aet_soil, 2)) :: tmp_aet_soil
436
437 !-------------------------------------------------------------------
438 ! date and month of this timestep
439 !-------------------------------------------------------------------
440 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 if((tt .EQ. 1) .AND. (.not. read_states)) then
449 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 do k = 1, ncells1
459
460 call canopy_interc(pet_calc(k), interc_max(k), prec_calc(k), & ! Intent IN
461 interc(k), & ! Intent INOUT
462 throughfall(k), aet_canopy(k)) ! Intent OUT
463 call snow_accum_melt(deg_day_incr(k), deg_day_max(k) * c2tstu, & ! Intent IN
464 deg_day_noprec(k) * c2tstu, prec_calc(k), temp_calc(k), temp_thresh(k), throughfall(k), & ! Intent IN
465 snowpack(k), & ! Intent INOUT
466 deg_day(k), & ! Intent OUT
467 melt(k), prec_effect(k), rain(k), snow(k)) ! Intent OUT
468
469 tmp_soilmoisture(:) = soilmoisture(k, :)
470 tmp_infiltration(:) = infiltration(k, :)
471
472 call soil_moisture(processmatrix(3, 1), & ! Intent IN
473 fsealed1(k), water_thresh_sealed(k), & ! Intent IN
474 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 jarvis_thresh_c1(k), aet_canopy(k), & ! Intent IN
477 prec_effect(k), runoff_sealed(k), sealedstorage(k), & ! Intent INOUT
478 tmp_infiltration(:), tmp_soilmoisture(:), & ! Intent INOUT
479 tmp_aet_soil(:), aet_sealed(k)) ! Intent OUT
480
481 infiltration(k, :) = tmp_infiltration(:)
482 soilmoisture(k, :) = tmp_soilmoisture(:)
483 aet_soil(k, :) = tmp_aet_soil(:)
484 call runoff_unsat_zone(c2tstu / k1(k), c2tstu / kp(k), c2tstu / k0(k), alpha(k), karst_loss(k), & ! Intent IN
485 infiltration(k, nhorizons_mhm), unsat_thresh(k), & ! Intent IN
486 satstorage(k), unsatstorage(k), & ! Intent INOUT
487 slow_interflow(k), fast_interflow(k), perc(k)) ! Intent OUT
488 call runoff_sat_zone(c2tstu / k2(k), & ! Intent IN
489 satstorage(k), & ! Intent INOUT
490 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 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 if ( processmatrix(10, 1) .EQ. 1 ) &
503 call desiletsn0( soilmoisture(k,1:nhorizons_mhm-1),& ! Intent IN
504 horizon_depth(1:nhorizons_mhm-1), & ! Intent IN
505 bulkdens(k,1:nhorizons_mhm-1), & ! Intent IN
506 latticewater(k,1:nhorizons_mhm-1), no_count(k), & ! Intent IN
507 neutrons(k) ) ! Intent INOUT
508
509 ! COSMIC
510 if ( processmatrix(10, 1) .EQ. 2 ) &
511 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 no_count(k), bulkdens(k,1:nhorizons_mhm-1), & ! Intent IN
515 latticewater(k,1:nhorizons_mhm-1), cosmicl3(k,1:nhorizons_mhm-1), & ! Intent IN
516 neutrons(k) ) ! Intent INOUT
517 end do
518 !$OMP end do
519 !$OMP end parallel
520
521 end subroutine mhm
522
523END MODULE mo_mhm
Python bindings of mHM.
Definition __init__.py:1
Canopy interception.
elemental pure subroutine, public canopy_interc(pet, interc_max, precip, interc, throughfall, evap_canopy)
Canopy interception.
Call all main processes of mHM.
Definition mo_mhm.f90:93
Models to predict neutron intensities above soils.
subroutine, public desiletsn0(soilmoisture, horizon_depth, bd, latwater, n0, neutrons)
Calculate neutrons from soil moisture for effective soil layer.
subroutine, public cosmic(soilmoisture, horizons, neutron_integral_afast, interc, snowpack, l1_n0, l1_bulkdens, l1_latticewater, l1_cosmicl3, neutrons)
Calculate neutrons from soil moisture in all layers.
Runoff generation.
Definition mo_runoff.f90:12
subroutine, public runoff_unsat_zone(k1, kp, k0, alpha, karst_loss, pefec_soil, unsat_thresh, sat_storage, unsat_storage, slow_interflow, fast_interflow, perc)
Runoff generation for the saturated zone.
Definition mo_runoff.f90:76
subroutine, public runoff_sat_zone(k2, sat_storage, baseflow)
Runoff generation for the saturated zone.
subroutine, public l1_total_runoff(fsealed_area_fraction, fast_interflow, slow_interflow, baseflow, direct_runoff, total_runoff)
total runoff accumulation at level 1
Snow melting and accumulation.
subroutine, public snow_accum_melt(deg_day_incr, deg_day_max, deg_day_noprec, prec, temperature, temperature_thresh, thrfall, snow_pack, deg_day, melt, prec_effect, rain, snow)
Snow melting and accumulation.
Soil moisture of the different layers.
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.