6 SUBROUTINE hydro_soil(IO, KK, PK, PEK, DMK, PTSTEP, &
7 PLETR, PLEG, PPG, PEVAPCOR, PD_G3, &
8 PWSAT, PWFC, PDWGI1, PDWGI2, PLEGI,&
9 PWG3, PRUNOFF, PDRAIN, PWWILT )
76 USE modd_isba_par
, ONLY : xwgmin
91 REAL,
INTENT(IN) :: PTSTEP
94 REAL,
DIMENSION(:),
INTENT(IN) :: PLETR, PLEG, PPG, PEVAPCOR
101 REAL,
DIMENSION(:),
INTENT(IN) :: PD_G3, PWSAT, PWFC
108 REAL,
DIMENSION(:),
INTENT(IN) :: PDWGI1, PDWGI2, PLEGI
115 REAL,
DIMENSION(:),
INTENT(INOUT) :: PWG3
118 REAL,
DIMENSION(:),
INTENT(OUT) :: PRUNOFF, PDRAIN
122 REAL,
DIMENSION(:),
INTENT(IN) :: PWWILT
128 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZWGI1M, ZWG2M, ZWG3M, ZWGI2M
135 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZETR, ZEG
140 REAL,
DIMENSION(SIZE(PEK%XTG,1)) :: ZWSAT, ZWFC
144 REAL,
DIMENSION(SIZE(PWG3)) :: ZC4
145 REAL,
DIMENSION(SIZE(PWG3)) :: ZWAVG, ZSINK2,
150 REAL,
DIMENSION(SIZE(PWG3)) :: ZEXCESSF, ZA2, ZB2, ZC2, ZA3, ZB3, ZC3, ZWDRAIN
152 REAL,
DIMENSION(SIZE(PWG3)) :: ZWLIM2, ZWLIM3, ZWWILT
155 REAL(KIND=JPRB) :: ZHOOK_HANDLE
192 zwg2m(:) = pek%XWG(:,2)
194 zwgi1m(:) = pek%XWGI(:,1)
195 zwgi2m(:) = pek%XWGI(:,2)
199 DO jj=1,
SIZE(pek%XTG,1)
204 zwsat(jj) = pwsat(jj) - zwgi2m(jj)
207 zwfc(jj) = pwfc(jj) * zwsat(jj) / pwsat(jj)
209 zwwilt(jj) = pwwilt(jj) * zwsat(jj) / pwsat(jj)
214 zetr(jj) = pletr(jj) /
xlvtt 226 zeg(jj) = pleg(jj) /
xlvtt + pevapcor(jj)
235 pek%XWG(jj,1) = (pek%XWG(jj,1) - ptstep * &
236 (dmk%XC1(jj)*(zeg(jj)-ppg(jj))/
xrholw - dmk%XC2(jj)*dmk%XWGEQ
242 IF(io%CKSAT==
'SGH' .OR. io%CKSAT==
'EXP')
THEN 258 IF (io%CISBA==
'2-L')
THEN 260 DO jj=1,
SIZE(pek%XTG,1)
262 pek%XWG(jj,2) = zwg2m(jj) - ptstep*(zeg(jj) + zetr(jj) - ppg(jj)) /
267 zwdrain(jj) = kk%XWDRAIN(jj) * &
268 max(0.0, min(zwfc(jj),pek%XWG(jj,2))-zwlim2(jj))/(zwfc(jj)-zwlim2
276 pek%XWG(jj,2) = pek%XWG(jj,2) - zdrain2(jj)
278 pdrain(jj) = zdrain2(jj)*pk%XDG(jj,2)*
xrholw/ptstep
284 DO jj=1,
SIZE(pek%XTG,1)
289 IF (pk%XDG(jj,2) >= pd_g3(jj))
THEN 291 pek%XWG(jj,2) = zwg2m(jj) - ptstep*(zeg(jj) + zetr(jj) - ppg(jj))
298 zwdrain(jj) = kk%XWDRAIN(jj) * &
299 max(0.0, min(zwfc(jj),pek%XWG(jj,2))-zwlim2(jj))/(zwfc(jj)
320 zwdrain2(jj) = kk%XWDRAIN(jj)* max(0.0, min(zwfc(jj),zwg2m(jj))-zwlim2
326 IF ( zwg2m(jj) - zwfc(jj) > zwdrain2(jj) ) zdelta2(jj) = 1.0
329 IF ( zwg3m(jj) - pwfc(jj) > zwdrain3(jj) ) zdelta3(jj) = 1.0
335 zwavg(jj) = ( ( (zwg2m(jj)**6)* pk%XDG(jj,2) +
345 zsink2(jj) = -(zeg(jj) + zetr(jj) - ppg(jj) )/(pk%XDG(jj,2)*
xrholw 352 zdraincf2(jj) = pk%XC3(jj,1) / (pk%XDG(jj,2) *
xday)
353 zdelta22(jj) = zdelta2(jj)*zwfc(jj) - (1.0-zdelta2(jj))*zwdrain2(jj
358 zdraincf3(jj) = pk%XC3(jj,2) / ( (pd_g3(jj)-pk%XDG(jj,2)) *
xday)
359 zdelta33(jj) = zdelta3(jj)*pwfc(jj) - (1.0-zdelta3(jj))*zwdrain3(jj
369 pek%XWG(jj,2) = ( za2(jj)+zb2(jj)*za3(jj) )/(1.0 - zb2(jj)*zb3(jj)
381 pdrain(jj) = max(0.0, zwdrain(jj))
382 pwg3(jj) = pwg3(jj) + (pdrain(jj) - zwdrain(jj))*ptstep/((pd_g3
390 DO jj=1,
SIZE(pek%XTG,1)
401 pek%XWGI(jj,1) = zwgi1m(jj) + pdwgi1(jj) - plegi(jj)*ptstep/(
xlstt*pk%XDG
405 pek%XWG(jj,1) = pek%XWG(jj,1) - pdwgi1(jj)
418 zexcessf(jj) = max(0.0, - pek%XWGI(jj,1))
419 pek%XWG(jj,1) = pek%XWG(jj,1) - zexcessf(jj)
420 pek%XWGI(jj,1) = pek%XWGI(jj,1) + zexcessf(jj)
421 zexcessfc(jj)= zexcessfc(jj) - zexcessf(jj)
430 zexcessf(jj) = min(0.0, pwsat(jj) - xwgmin - pek%XWGI(jj,1))
431 pek%XWG(jj,1) = pek%XWG(jj,1) - zexcessf(jj)
432 pek%XWGI(jj,1) = pek%XWGI(jj,1) + zexcessf(jj)
433 zexcessfc(jj)= zexcessfc(jj) - zexcessf(jj)
441 zexcessf(jj) = max(0.0, xwgmin - pek%XWG(jj,1))
442 pek%XWGI(jj,1) = pek%XWGI(jj,1) - zexcessf(jj)
443 pek%XWG(jj,1) = pek%XWG(jj,1) + zexcessf(jj)
444 zexcessfc(jj)= zexcessfc(jj) + zexcessf(jj)
448 IF(pek%XWGI(jj,1) < 1.0e-10)
THEN 449 zexcessf(jj) = pek%XWGI(jj,1)
450 pek%XWG(jj,1) = pek%XWG(jj,1) + zexcessf(jj)
452 zexcessfc(jj) = zexcessfc(jj) + zexcessf(jj)
457 pek%XTG(jj,1) = pek%XTG(jj,1) - zexcessfc(jj)*
xlmtt*dmk%XCT(jj)*
xrholw 467 pek%XWGI(jj,2) = zwgi2m(jj) + pdwgi2(jj) - plegi(jj)*ptstep/(
xlstt*pk%XDG
471 pek%XWG(jj,2) = pek%XWG(jj,2) - pdwgi2(jj)
478 zexcessf(jj) = max(0.0, -pek%XWGI(jj,2))
479 pek%XWG(jj,2) = pek%XWG(jj,2) - zexcessf(jj)
480 pek%XWGI(jj,2) = pek%XWGI(jj,2) + zexcessf(jj)
481 zexcessfc(jj)= zexcessfc(jj) - zexcessf(jj)
488 zexcessf(jj) = max(0.0, xwgmin - pek%XWG(jj,2))
489 pek%XWGI(jj,2) = pek%XWGI(jj,2) - zexcessf(jj)
490 pek%XWG(jj,2) = pek%XWG(jj,2) + zexcessf(jj)
491 zexcessfc(jj)= zexcessfc(jj) + zexcessf(jj)
495 IF (pek%XWGI(jj,2) < 1.0e-10 * ptstep)
THEN 496 zexcessf(jj) = pek%XWGI(jj,2)
497 pek%XWG(jj,2) = pek%XWG(jj,2) + zexcessf(jj)
499 zexcessfc(jj)= zexcessfc(jj) + zexcessf(jj)
504 pek%XTG(jj,2) = pek%XTG(jj,2) - zexcessfc(jj)*
xlmtt*dmk%XCG(jj)*
xrholw 516 prunoff(:) = max( 0., pek%XWG(:,2)+pek%XWGI(:,2)-pwsat(:) )*pk%XDG(:,2)
520 pek%XWG(:,1) = min( pek%XWG(:,1), pwsat(:) - pek%XWGI(:,1) )
521 pek%XWG(:,1) = max( pek%XWG(:,1), xwgmin )
523 pek%XWG(:,2) = min( pek%XWG(:,2), pwsat(:) - pek%XWGI(:,2) )
524 pek%XWG(:,2) = max( pek%XWG(:,2), xwgmin )
528 IF (io%CISBA==
'3-L')
THEN 529 pdrain(:) = pdrain(:) + max( 0., pwg3(:)-pwsat(:) )* (pd_g3(:)-pk%XDG
subroutine hydro_soil(IO, KK, PK, PEK, DMK, PTSTEP, PLETR, PLEG, PPG, PEVAPCOR, PD_G3, PWSAT, PWFC, PDWGI1, PDWGI2, PLEGI, PWG3, PRUNOFF, PDRAIN, PWWILT)