6 SUBROUTINE isba_fluxes(IO, KK, PK, PEK, DMK, PTSTEP, &
7 PSW_RAD, PLW_RAD, PTA, PQA, PRHOA, PEXNS, PEXNA, &
8 PHUG, PHUI, PLEG_DELTA, PLEGI_DELTA, PDELTA, PF5, PCS, PTSM, PT2M, &
9 PFROZEN1, PALBT, PEMIST, PQSAT, PDQSAT, PSNOW_THRUFAL, &
10 PRN, PH, PLE, PLEG, PLEGI, PLEV, PLES, PLER, PLETR, PEVAP, &
11 PGFLUX, PMELTADV, PMELT, PSOILCONDZ, PLE_FLOOD, PLEI_FLOOD)
90 USE modd_isba_par
, ONLY : xwgmin, xsphsoil, xdrywght, xrs_max
91 USE modd_snow_par
, ONLY : xtau_smelt
110 REAL,
INTENT (IN) :: PTSTEP
112 REAL,
DIMENSION(:),
INTENT (IN) :: PSW_RAD, PLW_RAD, PTA, PQA, PRHOA
119 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNS, PEXNA
120 REAL,
DIMENSION(:),
INTENT(IN) :: PHUG, PHUI, PDELTA, PF5
121 REAL,
DIMENSION(:),
INTENT(IN) :: PFROZEN1
122 REAL,
DIMENSION(:),
INTENT(IN) :: PALBT, PEMIST
123 REAL,
DIMENSION(:),
INTENT(IN) :: PQSAT, PDQSAT
124 REAL,
DIMENSION(:),
INTENT(IN) :: PLEG_DELTA, PLEGI_DELTA
138 REAL,
DIMENSION(:),
INTENT (IN) :: PCS, PT2M, PTSM
144 REAL,
DIMENSION(:),
INTENT(IN) :: PSNOW_THRUFAL
147 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSOILCONDZ
150 REAL,
DIMENSION(:),
INTENT(OUT) :: PLE_FLOOD, PLEI_FLOOD
152 REAL,
DIMENSION(:),
INTENT(OUT) :: PRN, PH, PLE, PLEG, PLEV, PLES
153 REAL,
DIMENSION(:),
INTENT(OUT) :: PLER, PLETR, PEVAP, PGFLUX, PMELTADV
171 REAL,
DIMENSION(:),
INTENT(OUT) :: PLEGI
179 REAL,
DIMENSION(SIZE(PTA)) :: ZZHV, ZTN, ZDT
187 REAL,
DIMENSION(SIZE(PTA)) :: ZPSN, ZPSNV, ZPSNG, ZFRAC
197 REAL,
DIMENSION(SIZE(PTA)) :: ZNEXTSNOW
201 REAL,
DIMENSION(SIZE(PTA)) :: ZCONDAVG
214 REAL,
DIMENSION(SIZE(PTA)) :: ZWORK1, ZWORK2, ZWORK3
216 REAL(KIND=JPRB) :: ZHOOK_HANDLE
225 IF (pek%TSNOW%SCHEME ==
'EBA') zeps1=1.0e-8
237 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO' .OR. io%CISBA
'DIF'THEN 242 zpsn(:) = pek%XPSN(:)
243 zpsng(:) = pek%XPSNG(:)+kk%XFFG(:)
244 zpsnv(:) = pek%XPSNV(:)+kk%XFFV(:)
245 zfrac(:) = pek%XPSNG(:)
253 DO jj=1,
SIZE(pek%XTG,1)
255 zdt(jj) = pek%XTG(jj,1) - ptsm(jj)
259 prn(jj) = (1. - palbt(jj)) * psw_rad(jj) + pemist(jj) * &
260 (plw_rad(jj) -
xstefan * (ptsm(jj)** 3)*(4.*pek%XTG(jj,1) - 3
264 ph(jj) = prhoa(jj) * pk%XCPS(jj) * (pek%XTG(jj,1) - pta(jj)*pexns(jj)/pexna
267 zwork1(jj) = prhoa(jj) * (1.-pek%XVEG(jj))*(1.-zpsng(jj)) / pek%XRESA(jj
272 plegi(jj) = zwork1(jj) * pk%XLSTT(jj) * ( phui(jj) * zwork2(jj) - pqa(jj
277 pleg(jj) = zwork1(jj) * pk%XLVTT(jj) * ( phug(jj) * zwork2(jj) - pqa(jj
279 zwork2(jj) = prhoa(jj) * (zwork2(jj) - pqa(jj))
280 zwork3(jj) = zwork2(jj) / pek%XRESA(jj)
284 ples(jj) = pk%XLSTT(jj) * zpsn(jj) * zwork3(jj)
289 plev(jj) = pk%XLVTT(jj) * pek%XVEG(jj)*(1.-zpsnv(jj)) * dmk%XHV(jj
293 zzhv(jj) = max(0., sign(1.,pqsat(jj) - pqa(jj)))
294 pletr(jj) = zzhv(jj) * (1. - pdelta(jj)) * pk%XLVTT(jj) * pek%XVEG(jj)
298 pler(jj) = plev(jj) - pletr(jj)
302 ple_flood(jj) = pk%XLVTT(jj) * (1.-kk%XFFROZEN(jj)) * kk%XFF(jj) * zwork3
304 plei_flood(jj) = pk%XLSTT(jj) * kk%XFFROZEN(jj) * kk%XFF(jj) * zwork3(jj
309 ple(jj) = pleg(jj) + plev(jj) + ples(jj) + plegi(jj)
314 pgflux(jj) = prn(jj) - ph(jj) - ple(jj)
319 pmeltadv(jj) = psnow_thrufal(jj)*
xcl*(
xtt - pek%XTG(jj,1))
326 pevap(jj) = ((plev(jj) + pleg(jj))/pk%XLVTT(jj)) + ((plegi(jj) + ples
334 IF(pek%TSNOW%SCHEME ==
'D95')
THEN 335 DO jj=1,
SIZE(pek%XTG,1)
336 ple(jj) = ple(jj) + ple_flood(jj) + plei_flood(jj)
337 pgflux(jj) = pgflux(jj) - ple_flood(jj) - plei_flood(jj)
338 pevap(jj) = pevap(jj) + ple_flood(jj)/pk%XLVTT(jj) + plei_flood
347 IF( (pek%TSNOW%SCHEME ==
'D95' .OR. pek%TSNOW%SCHEME ==
'EBA') .AND. io%CISBA
'DIF'THEN 350 IF (pek%TSNOW%SCHEME ==
'D95')
THEN 352 ztn(:) = (1.-pek%XVEG(:))*pek%XTG(:,1) + pek%XVEG(:)*pt2m(:)
355 dmk%XSNOWTEMP(:,1) = ztn(:)
362 WHERE ( ztn(:) >
xtt .AND. pek%TSNOW%WSNOW(:,1) > 0.0 )
363 pmelt(:) = zpsn(:)*(ztn(:)-
xtt) / (pcs(:)*
xlmtt*max(xtau_smelt,ptstep
369 znextsnow(:) = pek%TSNOW%WSNOW(:,1) + ptstep * (dmk%XSRSFC(:) - ples
371 WHERE ( pmelt(:) > 0.0 )
373 pmelt(:)=min(pmelt(:),znextsnow(:)/ptstep)
374 znextsnow(:) = znextsnow(:) - ptstep * pmelt
378 WHERE(zfrac(:)<1.0e-4)
379 pmelt(:) = pmelt(:) + znextsnow(:) / ptstep
384 ELSEIF (pek%TSNOW%SCHEME ==
'EBA')
THEN 386 pmelt(:)=min( pek%TSNOW%WSNOW(:,1)/ptstep + dmk%XSRSFC(:) - ples(:
395 pek%XTG(:,1) = pek%XTG(:,1) - dmk%XCT(:)*
xlmtt*pmelt(:)*ptstep
real function, dimension(size(pwsnow)) snow_frac_ground(PWSNOW)
subroutine isba_fluxes(IO, KK, PK, PEK, DMK, PTSTEP, PSW_RAD, PLW_RAD, PTA, PQA, PRHOA, PEXNS, P