6 SUBROUTINE hydro(HISBA, HSNOW_ISBA, HRUNOFF, HSOILFRZ, OMEB, OGLACIER,&
7 oflood, ptstep, pvegtype, &
8 prr, psr, plev, pletr, pleg, ples, &
10 pc1, pc2, pc3, pc4b, pc4ref, pwgeq, pcg, pct, &
11 pveg, plai, pwrmax, pmelt, ptauice, plegi, &
12 prunoffd, psoilwght, klayer_hort, klayer_dun, &
14 psnow_thrufal, pevapcor, psubvcor, &
16 psnowswe, psnowalb, psnowrho, &
17 pbcoef, pwsat, pcondsat, pmpotsat, pwfc, &
18 pwwilt, pf2wght, pf2, pd_g, pdzg, pdzdif, pps, &
19 pwg, pwgi, ptg, kwg_layer, &
20 pdrain, prunoff, ptopqs, &
21 pirrig, pwatsup, pthreshold, lirriday, lirrigate, &
22 hksat, hrain, hhort, pmuf, pfsat, pksat_ice, &
23 pd_ice, phorton, pdrip, pffg, pffv , pfflood, &
24 ppiflood, piflood, ppflood, prrveg, pirrig_flux, &
25 pirrig_gr, pqsb, pfwtd, pwtd, &
26 pdelheatg, pdelheatg_sfc, &
27 pdelphaseg, pdelphaseg_sfc, plvtt, plstt )
100 USE modd_csts, ONLY : xrholw, xday, xtt, xlstt, xlmtt
105 USE modd_coupling_topd, ONLY : lcoupl_topd, xas_nature, xatop, xrunoff_top, nmaskt_patch
111 USE modi_hydro_soildif
118 USE yomhook
,ONLY : lhook, dr_hook
119 USE parkind1
,ONLY : jprb
126 CHARACTER(LEN=*),
INTENT(IN) :: hisba
130 CHARACTER(LEN=*),
INTENT(IN) :: hsnow_isba
134 CHARACTER(LEN=*),
INTENT(IN) :: hrunoff
138 CHARACTER(LEN=*),
INTENT(IN) :: hsoilfrz
142 LOGICAL,
INTENT(IN) :: oglacier
147 LOGICAL,
INTENT(IN) :: omeb
150 LOGICAL,
INTENT(IN) :: oflood
152 REAL,
INTENT(IN) :: ptstep
155 REAL,
DIMENSION(:,:),
INTENT(IN) :: pvegtype
157 REAL,
DIMENSION(:),
INTENT(IN) :: prr, psr, plev, pletr, pleg, ples
165 REAL,
DIMENSION(:),
INTENT(IN) :: prunoffb
166 REAL,
DIMENSION(:),
INTENT(IN) :: plvtt, plstt
167 REAL,
DIMENSION(:),
INTENT(IN) :: pwdrain
169 REAL,
DIMENSION(:),
INTENT(IN) :: pc1, pc2, pwgeq, pcg, pct
170 REAL,
DIMENSION(:,:),
INTENT(IN) :: pc3
178 REAL,
DIMENSION(:),
INTENT(IN) :: pveg, plai, prunoffd, pwrmax
185 REAL,
DIMENSION(:),
INTENT(IN) :: pc4b, pc4ref
188 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv, ppsng
192 REAL,
DIMENSION(:),
INTENT(IN) :: ptauice, plegi
197 REAL,
DIMENSION(:),
INTENT(IN) :: psnow_thrufal, pevapcor, psubvcor
206 REAL,
DIMENSION(:),
INTENT(IN) :: pps, pf2
210 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwsat, pcondsat, pwfc, pd_g, pf2wght, pwwilt
218 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzdif, pdzg
222 REAL,
DIMENSION(:,:),
INTENT(IN) :: psoilhcapz
225 REAL,
DIMENSION(:,:),
INTENT(IN) :: psoilwght
227 INTEGER,
INTENT(IN) :: klayer_hort
228 INTEGER,
INTENT(IN) :: klayer_dun
230 REAL,
DIMENSION(:,:),
INTENT(IN) :: pmpotsat,pbcoef
234 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: ptg
237 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: pwgi, pwg
244 INTEGER,
DIMENSION(:),
INTENT(IN) :: kwg_layer
247 REAL,
DIMENSION(:),
INTENT(INOUT) :: pdelheatg, pdelheatg_sfc
251 REAL,
DIMENSION(:),
INTENT(INOUT) :: pwr, psnowswe, psnowalb, psnowrho
252 REAL,
DIMENSION(:),
INTENT(INOUT) :: pmelt
253 REAL,
DIMENSION(:),
INTENT(OUT) :: pdrain, prunoff
262 REAL,
DIMENSION(:),
INTENT(OUT) :: pdelphaseg, pdelphaseg_sfc
267 REAL ,
DIMENSION(:),
INTENT(IN) :: pirrig
268 REAL ,
DIMENSION(:),
INTENT(IN) :: pwatsup
269 REAL ,
DIMENSION(:),
INTENT(IN) :: pthreshold
270 LOGICAL,
DIMENSION(:),
INTENT(INOUT) :: lirriday
271 LOGICAL,
DIMENSION(:),
INTENT(IN) :: lirrigate
272 REAL ,
DIMENSION(:),
INTENT(INOUT) :: pirrig_flux
273 REAL ,
DIMENSION(:),
INTENT(IN) :: pirrig_gr
277 CHARACTER(LEN=*),
INTENT(IN) :: hksat
281 CHARACTER(LEN=*),
INTENT(IN) :: hrain
286 CHARACTER(LEN=*),
INTENT(IN) :: hhort
290 REAL,
DIMENSION(:),
INTENT(IN) :: pd_ice
292 REAL,
DIMENSION(:),
INTENT(IN) :: pksat_ice
294 REAL,
DIMENSION(:),
INTENT(IN) :: pmuf
295 REAL,
DIMENSION(:),
INTENT(INOUT):: pfsat
297 REAL,
DIMENSION(:),
INTENT(OUT) :: phorton
299 REAL,
DIMENSION(:),
INTENT(INOUT) :: pdrip
300 REAL,
DIMENSION(:),
INTENT(INOUT) :: prrveg
302 REAL,
DIMENSION(:),
INTENT(IN) :: pffg,pffv
303 REAL,
DIMENSION(:),
INTENT(IN) :: pfflood
304 REAL,
DIMENSION(:),
INTENT(IN) :: ppiflood
306 REAL,
DIMENSION(:),
INTENT(INOUT) :: piflood
307 REAL,
DIMENSION(:),
INTENT(INOUT) :: ppflood
309 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptopqs
310 REAL,
DIMENSION(:),
INTENT(OUT) :: pqsb
312 REAL,
DIMENSION(:),
INTENT(IN) :: pfwtd
313 REAL,
DIMENSION(:),
INTENT(IN) :: pwtd
320 INTEGER :: ini, inl, idepth
325 REAL,
DIMENSION(SIZE(PVEG)) :: zpg, zpg_melt, zdunne, &
326 zlev, zleg, zlegi, zletr, zpsnv, &
327 zrr, zdg3, zwg3, zwsat_avg, zwwilt_avg, zwfc_avg, &
328 zrunoff, zdrain, zhorton, zevapcor, zqsb
345 REAL,
DIMENSION(SIZE(PVEG)) :: zdwgi1, zdwgi2, zksfc_iveg
352 REAL,
DIMENSION(SIZE(PVEG)) :: zwgi_excess, zf2
356 REAL,
DIMENSION(SIZE(PWG,1),SIZE(PWG,2)) :: zqsat, zqsati, zti, zps
359 REAL,
DIMENSION(SIZE(PWG,1),SIZE(PWG,2)) :: zwgi0
365 REAL,
PARAMETER :: zinsolfrz_veg = 0.20
367 REAL,
PARAMETER :: zinsolfrz_lai = 30.0
369 REAL,
PARAMETER :: ztimemax = 900.
371 REAL(KIND=JPRB) :: zhook_handle
377 IF (lhook) CALL dr_hook(
'HYDRO',0,zhook_handle)
406 pdelphaseg_sfc(:)= 0.0
409 zf2(:) = max(xdenom_min,pf2(:))
425 zevapcor(:) = pevapcor(:) + psubvcor(:)
432 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
433 zlev(:) = (1.0-ppsnv(:)-pffv(:)) * plev(:)
434 zletr(:) = (1.0-ppsnv(:)-pffv(:)) * pletr(:)
435 zleg(:) = (1.0-ppsng(:)-pffg(:)) * pleg(:)
436 zlegi(:) = (1.0-ppsng(:)-pffg(:)) * plegi(:)
443 zpsnv(:) = ppsnv(:)+pffv(:)
446 zevapcor(:) = pevapcor(:)
457 IF(hisba ==
'2-L' .OR. hisba ==
'3-L')
THEN
458 zwsat_avg(:) = pwsat(:,1)
459 zwwilt_avg(:) = pwwilt(:,1)
460 zwfc_avg(:) = pwfc(:,1)
463 IF (hisba ==
'3-L')
THEN
485 IF (
SIZE(lirrigate)>0)
THEN
486 WHERE (lirrigate(:) .AND. pirrig(:)>0. .AND. pirrig(:) /= xundef .AND. (pf2(:)<pthreshold(:)) )
487 pirrig_flux(:) = pwatsup(:) / xday
488 zrr(:) = zrr(:) + pwatsup(:) / xday
496 zrr, zlev, zletr, pveg, zpsnv, &
497 pwr, pwrmax, zpg, pdrip, prrveg, plvtt )
514 pirrig_flux(:) = pirrig_flux(:) + pirrig_gr(:)
516 zpg(:) = zpg(:) + pirrig_gr(:)
530 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
532 zpg_melt(:) = zpg_melt(:) + psnow_thrufal(:)
538 pmelt(:) = pmelt(:) + psnow_thrufal(:)
544 psnowswe, psnowalb, psnowrho,zpg_melt)
557 CALL
hydro_sgh(hisba,hrunoff,hrain,hhort, &
560 pwg, pwgi, kwg_layer, &
561 zpg, zpg_melt, pmuf, &
563 pmpotsat, pksat_ice, pd_ice, &
564 pfsat, phorton, zdunne, pfflood, &
565 ppiflood, piflood, ppflood, &
566 prunoffb, prunoffd, pcg, &
567 psoilwght, oflood, klayer_hort, &
596 IF(ptstep>=ztimemax)
THEN
597 indt = max(2,nint(ptstep/ztimemax))
600 ztstep = ptstep/
REAL(indt)
609 WHERE(plai(:)/=xundef .AND. pveg(:)/=0.)
610 zksfc_iveg(:) = (1.0-zinsolfrz_veg*pveg(:)) * (1.0-(plai(:)/zinsolfrz_lai))
616 zwgi0(:,:) = pwgi(:,:)
618 IF (hisba==
'DIF')
THEN
620 ini =
SIZE(pd_g(:,:),1)
621 inl = maxval(kwg_layer(:))
633 zti(jj,jl) = min(xtt,ptg(jj,jl))
641 zqsat(:,:) =
qsat(ptg(:,:),zps(:,:),kwg_layer(:),inl)
642 zqsati(:,:) =
qsati(zti(:,:),zps(:,:),kwg_layer(:),inl)
647 zpg(:) = zpg(:) / xrholw
648 zevapcor(:) = zevapcor(:) / xrholw
649 zleg(:) = zleg(:) /(xrholw*plvtt(:))
650 zletr(:) = (zletr(:)/zf2(:))/(xrholw*plvtt(:))
651 zlegi(:) = zlegi(:) /(xrholw*plstt(:))
656 pbcoef, pwsat, pcondsat, pmpotsat, pwfc, &
657 pd_g, pdzg, pdzdif, zpg, zletr, zleg, zevapcor, &
658 pf2wght, pwg, pwgi, ptg, pps, zqsat, zqsati, &
659 zdrain, zhorton, pfsat, kwg_layer, inl, &
660 klayer_hort, ptopqs, zqsb, pfwtd, pwtd )
662 CALL
ice_soildif(ztstep, ptauice, zksfc_iveg, zlegi, &
663 psoilhcapz, pwsat, pmpotsat, pbcoef, &
664 ptg, pwgi, pwg, kwg_layer, &
667 pdrain(:) = pdrain(:) + (zdrain(:)+zqsb(:)+zwgi_excess(:))/
REAL(indt)
668 pqsb(:) = pqsb(:) + zqsb(:)/
REAL(indt)
669 phorton(:) = phorton(:) + zhorton(:)/
REAL(indt)
675 pdelphaseg_sfc(:) = (pwgi(:,1)-zwgi0(:,1))*(xlmtt*xrholw/ptstep)*pdzg(:,1) + zlegi(:)*(xrholw*xlstt)
676 pdelphaseg(:) = pdelphaseg_sfc(:)
679 pdelphaseg(jj) = pdelphaseg(jj) + (pwgi(jj,jl)-zwgi0(jj,jl))*(xlmtt*xrholw/ptstep)*pdzg(jj,jl)
682 pdelheatg_sfc(:) = pdelheatg_sfc(:) + pdelphaseg_sfc(:)
683 pdelheatg(:) = pdelheatg(:) + pdelphaseg(:)
692 CALL
ice_soilfr(hsnow_isba, hsoilfrz, ztstep, zksfc_iveg, pcg, pct, &
693 ppsng, pffg, ptauice, zdwgi1, zdwgi2, pwsat, &
694 pmpotsat, pbcoef, pd_g, ptg, pwgi, pwg )
698 zletr, zleg, zpg, zevapcor, &
700 pc1, pc2, pc3, pc4b, pc4ref, pwgeq, &
701 pd_g(:,2), zdg3, zwsat_avg, zwfc_avg, &
702 zdwgi1, zdwgi2, zlegi, pd_g(:,1), pcg, pct, &
703 ptg(:,1), ptg(:,2), &
704 pwg(:,1), pwg(:,2), zwg3(:), &
705 pwgi(:,1), pwgi(:,2), &
706 zrunoff,zdrain,hksat,zwwilt_avg )
708 pdrain(:) = pdrain(:) + zdrain(:)/
REAL(indt)
709 prunoff(:) = prunoff(:) + zrunoff(:)/
REAL(indt)
717 pdelphaseg_sfc(:) = (pwgi(:,1)-zwgi0(:,1))*(xlmtt*xrholw/ptstep)*pd_g(:,1) + zlegi(:)
718 pdelphaseg(:) = (pwgi(:,2)-zwgi0(:,2))*(xlmtt*xrholw/ptstep)*pd_g(:,2)
719 pdelheatg_sfc(:) = pdelheatg_sfc(:) + pdelphaseg_sfc(:)
720 pdelheatg(:) = pdelheatg(:) + pdelphaseg(:)
722 IF (hisba ==
'3-L') pwg(:,3) = zwg3(:)
725 IF (lcoupl_topd)
THEN
727 DO jj=1,
SIZE(nmaskt_patch)
728 IF (nmaskt_patch(jj)/=0)
THEN
729 IF ( xatop(nmaskt_patch(jj))/=xundef)
THEN
730 xrunoff_top(nmaskt_patch(jj)) = xrunoff_top(nmaskt_patch(jj)) + &
731 (prunoff(jj)+ phorton(jj))*xatop(nmaskt_patch(jj))*ptstep
732 IF (hrunoff==
'TOPD')
THEN
733 xrunoff_top(nmaskt_patch(jj)) = xrunoff_top(nmaskt_patch(jj)) + zdunne(jj)*ptstep
736 xrunoff_top(nmaskt_patch(jj)) = xrunoff_top(nmaskt_patch(jj)) + zdunne(jj)*xatop(nmaskt_patch(jj))*ptstep
751 prunoff(:) = prunoff(:) + zdunne(:) + phorton(:)
755 IF (lhook) CALL dr_hook(
'HYDRO',1,zhook_handle)
subroutine hydro_snow(OGLACIER, PTSTEP, PVEGTYPE, PSR, PLES, PMELT, PSNOWSWE, PSNOWALB, PSNOWRHO, PPG_MELT)
subroutine hydro_veg(HRAIN, PTSTEP, PMUF, PRR, PLEV, PLETR, PVEG, PPSNV, PWR, PWRMAX, PPG, PDRIP, PRRVEG, PLVTT)
subroutine hydro_soil(HISBA, PTSTEP, PLETR, PLEG, PPG, PEVAPCOR, PWDRAIN, PC1, PC2, PC3, PC4B, PC4REF, PWGEQ, PD_G2, PD_G3, PWSAT, PWFC, PDWGI1, PDWGI2, PLEGI, PD_G1, PCG, PCT, PTG, PTG2, PWG1, PWG2, PWG3, PWGI1, PWGI2, PRUNOFF, PDRAIN, HKSAT, PWWILT)
subroutine ice_soildif(PTSTEP, PTAUICE, PKSFC_IVEG, PLEGI, PSOILHCAPZ, PWSATZ, PMPOTSATZ, PBCOEFZ, PTG, PWGI, PWG, KWG_LAYER, PDZG, PWGI_EXCESS)
subroutine ice_soilfr(HSNOW_ISBA, HSOILFRZ, PTSTEP, PKSFC_IVEG, PCG, PCT, PPSNG, PFFG, PTAUICE, PDWGI1, PDWGI2, PWSATZ, PMPOTSATZ, PBCOEFZ, PD_G, PTG, PWGI, PWG)
subroutine hydro_sgh(HISBA, HRUNOFF, HRAIN, HHORT, PTSTEP, PD_G, PDZG, PWSAT, PWFC, PWWILT, PWG, PWGI, KWG_LAYER, PPG, PPG_MELT, PMUF, PCONDSAT, PBCOEF, PMPOTSAT, PKSAT_ICE, PD_ICE, PFSAT, PHORTON, PDUNNE, PFFLOOD, PPIFLOOD, PIFLOOD, PPFLOOD, PRUNOFFB, PRUNOFFD, PCG, PSOILWGHT, OFLOOD, KLAYER_HORT, KLAYER_DUN)
subroutine hydro_soildif(HRUNOFF, HHORT, PTSTEP, PBCOEF, PWSAT, PCONDSAT, PMPOTSAT, PWFC, PDG, PDZG, PDZDIF, PPG, PLETR, PLEG, PEVAPCOR, PF2WGHT, PWG, PWGI, PTG, PPS, PQSAT, PQSATI, PDRAIN, PHORTON, PFSAT, KWG_LAYER, KMAX_LAYER, KLAYER_HORT, PTOPQS, PQSB, PFWTD, PWTD)
subroutine hydro(HISBA, HSNOW_ISBA, HRUNOFF, HSOILFRZ, OMEB, OGLACIER, OFLOOD, PTSTEP, PVEGTYPE, PRR, PSR, PLEV, PLETR, PLEG, PLES, PRUNOFFB, PWDRAIN, PC1, PC2, PC3, PC4B, PC4REF, PWGEQ, PCG, PCT, PVEG, PLAI, PWRMAX, PMELT, PTAUICE, PLEGI, PRUNOFFD, PSOILWGHT, KLAYER_HORT, KLAYER_DUN, PPSNV, PPSNG, PSNOW_THRUFAL, PEVAPCOR, PSUBVCOR, PWR, PSOILHCAPZ, PSNOWSWE, PSNOWALB, PSNOWRHO, PBCOEF, PWSAT, PCONDSAT, PMPOTSAT, PWFC, PWWILT, PF2WGHT, PF2, PD_G, PDZG, PDZDIF, PPS, PWG, PWGI, PTG, KWG_LAYER, PDRAIN, PRUNOFF, PTOPQS, PIRRIG, PWATSUP, PTHRESHOLD, LIRRIDAY, LIRRIGATE, HKSAT, HRAIN, HHORT, PMUF, PFSAT, PKSAT_ICE, PD_ICE, PHORTON, PDRIP, PFFG, PFFV, PFFLOOD, PPIFLOOD, PIFLOOD, PPFLOOD, PRRVEG, PIRRIG_FLUX, PIRRIG_GR, PQSB, PFWTD, PWTD, PDELHEATG, PDELHEATG_SFC, PDELPHASEG, PDELPHASEG_SFC, PLVTT, PLSTT)