6 SUBROUTINE hydro_sgh(IO, KK, PK, PEK, DEK, DMK, PTSTEP, PPG, PPG_MELT, PDUNNE )
38 USE modd_isba_par
, ONLY : xwgmin, xsphsoil, xdrywght
64 REAL,
INTENT(IN) :: PTSTEP
67 REAL,
DIMENSION(:),
INTENT(INOUT):: PPG
68 REAL,
DIMENSION(:),
INTENT(IN) :: PPG_MELT
72 REAL,
DIMENSION(:),
INTENT(OUT) :: PDUNNE
77 REAL,
PARAMETER :: ZEICE = 6.0
79 REAL,
DIMENSION(SIZE(PPG)) :: ZPG_INI, ZFROZEN, ZIMAX_ICE
86 REAL,
DIMENSION(SIZE(PPG)) :: ZWG2_AVG, ZWGI2_AVG, ZWSAT_AVG
90 REAL,
DIMENSION(SIZE(PK%XDG,1),SIZE(PK%XDG,2)) :: ZWSAT, ZWFC, ZFRZ
92 REAL,
DIMENSION(SIZE(PPG)) :: ZPG_WORK, ZRUISDT, ZNL_HORT
94 REAL,
DIMENSION(SIZE(PPG)) :: ZRUNOFF_TOPD
96 REAL :: ZEFFICE, ZLOG10, ZLOG, ZS,
98 REAL :: ZTDIURN, ZSOILHEATCAP
102 INTEGER :: INJ, INL, JJ, JL, IDEPTH
103 REAL(KIND=JPRB) :: ZHOOK_HANDLE
142 zrunoff_topd(:) = 0.0
145 zpg_ini(:) = ppg(:) + ppg_melt(:)
149 inl=maxval(pk%NWG_LAYER)
156 IF( io%CRUNOFF==
'DT92' .OR. io%CRUNOFF ==
'TOPD' )
THEN 165 IF (io%CISBA ==
'DIF')
THEN 169 DO jl=1,io%NLAYER_DUN
171 idepth=pk%NWG_LAYER(jj)
173 zwg2_avg(jj) = zwg2_avg(jj) + pk%XSOILWGHT(jj,jl)*pek%XWG
183 zwg2_avg(:) = pek%XWG (:,2)
184 zwgi2_avg(:) = pek%XWGI(:,2)
185 zwsat_avg(:) = kk%XWSAT (:,1)
186 zwwilt_avg(:) = kk%XWWILT(:,1)
190 IF(io%CHORT==
'SGH')
THEN 196 zs = min(1.0,(zwg2_avg(jj)+zwgi2_avg(jj)-zwwilt_avg(jj))/(zwsat_avg
205 IF(io%CHORT==
'SGH'.OR.io%LFLOOD)
THEN 207 IF(io%CISBA ==
'DIF')
THEN 212 DO jl=1,io%NLAYER_HORT
217 zwsat(jj,jl) = max(xwgmin, kk%XWSAT(jj,jl)-pek%XWGI(jj,jl))
218 zwfc(jj,jl) = kk%XWFC(jj,jl)*zwsat(jj,jl)/kk%XWSAT(jj,jl)
221 zfrz(jj,jl) = exp(zlog10*(-zeice*(pek%XWGI(jj,jl)/(pek%XWGI(jj,jl
227 zimax(:) =
infmax_func(pek%XWG, zwsat, zfrz, pk%XCONDSAT, kk%XMPOTSAT
236 zsoilheatcap =
xcl*
xrholw*pek%XWG (jj,2) +
243 ztdiurn = min(pk%XDG(jj,2), 4./(zsoilheatcap*dmk%XCG(jj)))
247 zeffice = pk%XDG(jj,2)*pek%XWGI(jj,2)/(pek%XWGI(jj,2)+pek%XWG(jj,2
252 zwsat(jj,1) = max(xwgmin, kk%XWSAT(jj,1)-pek%XWGI(jj,2))
256 zfrozen(jj) = min(1.,zeffice/max(pk%XD_ICE(jj),ztdiurn))
260 zfrz(jj,1) = exp(zlog10*(-zeice*min(1.,zeffice/ztdiurn)))
266 zs =min(1.,zwsat(jj,1)/kk%XWSAT(jj,1))
267 zimax_ice(jj)=zfrz(jj,1)*pk%XKSAT_ICE(jj)*(zs**(2*kk%XBCOEF(jj,1)+
271 zs =min(1.,pek%XWG(jj,2)/zwsat(jj,1))
272 zd_h =min(0.10,pk%XDG(jj,2))
273 zimax(jj)=pk%XCONDSAT(jj,1)*(kk%XBCOEF(jj,1)*kk%XMPOTSAT(jj,1)*(zs
281 IF(io%CHORT==
'SGH')
THEN 285 IF(io%CRAIN==
'SGH')
THEN 288 zhort_r(:) = (1.- zfrozen(:))* ppg(:)/((zimax(:)*
xrholw*kk%XMUF
289 + zfrozen(:) * ppg(:)/((zimax_ice(:)*
xrholw*kk%XMUF
294 zhort_r(:) = (1.- zfrozen(:))* max(0.,ppg(:)-zimax(:)*
xrholw)
295 + zfrozen(:) * max(0.,ppg(:)-zimax_ice(:)*
xrholw)
301 zhort_m(:) = (1.- zfrozen(:))* max(0.,ppg_melt(:)-zimax(:)*
xrholw)
302 + zfrozen(:) * max(0.,ppg_melt(:)-zimax_ice(:)*
xrholw)
306 WHERE(kk%XFFLOOD(:)<=kk%XFSAT(:))
307 dek%XHORT(:) = (1. - kk%XFSAT(:)) * (zhort_r(:) + zhort_m(:))
309 dek%XHORT(:) = (1. - kk%XFFLOOD(:)) * (zhort_r(:) + zhort_m(:))
320 ppg(:) = ppg(:) + ppg_melt(:)
329 dek%XPFLOOD(:)=kk%XFFLOOD(:)*max(0.0,ppg(:))
334 IF(io%CRUNOFF==
'SGH ')
THEN 338 pdunne(:) = max(ppg(:),0.0) * max(kk%XFSAT(:)-kk%XFFLOOD(:),0.0)
340 ELSEIF (io%CRUNOFF==
'DT92' .OR. io%CRUNOFF==
'TOPD')
THEN 347 zpg_work(:) = ppg(:) - dek%XHORT(:) - dek%XPFLOOD(:)
363 CALL hydro_dt92(ptstep, kk%XRUNOFFB, zwwilt_avg, pk%XRUNOFFD, zwsat_avg
366 pdunne(:) = zruisdt(:)*pk%XRUNOFFD(:)*
xrholw/ptstep
375 WHERE(kk%XFFLOOD(:)>=kk%XFSAT(:).AND.kk%XFFLOOD(:)>0.0)pdunne(:) = 0
389 ppg(:) = ppg(:) - pdunne(:) - dek%XHORT(:) - dek%XPFLOOD(:)
393 WHERE (zpg_ini(:)<0.0)
407 zpifldmax(:) = min(kk%XPIFLOOD(:),
xrholw/
xday)
409 zif_max(:) = max(0.,(1.- zfrozen(:))) * zimax(:)*
xrholw &
410 + zfrozen(:) * zimax_ice(:)*
xrholw 412 IF(io%CISBA ==
'DIF')
THEN 414 DO jl=1,io%NLAYER_HORT
417 zsoilmax(jj) = zsoilmax(jj)+max(0.0,zwfc(jj,jl)-pek%XWG(jj,jl)
424 zwsat(jj,1) = max(xwgmin, kk%XWSAT(jj,1)-pek%XWGI(jj,2))
425 zsoilmax(jj) = max(0.0,zwsat(jj,1)-pek%XWG(jj,2))*pk%XDG(jj,2)*
xrholw 429 zsoilmax(:) = min(zsoilmax(:),zif_max(:))
431 dek%XIFLOOD(:) = max(0.0,(kk%XFFLOOD(:)-kk%XFSAT(:))) * min(zpifldmax(
441 ppg(:) = ppg(:) + dek%XIFLOOD(:)
integer, dimension(:), allocatable nmaskt_patch
real, dimension(:), allocatable xas_nature
subroutine hydro_sgh(IO, KK, PK, PEK, DEK, DMK, PTSTEP, PPG, PPG_M
subroutine hydro_dt92(PTSTEP, PRUNOFFB, PWWILT, PRUNOFFD, PWSAT, PWG2, PWGI2, PPG, PRUISDT)
real, dimension(:), allocatable xatop
real, parameter xhort_depth