8 psw_rad, plw_rad, pta, pqa, &
9 prhoa, pexns, pexna, pcps, plvtt, plstt, &
10 pveg, phug, phui, phv, &
11 pleg_delta, plegi_delta, pdelta, pra, &
12 pf5, prs, pcs, pcg, pct, psnowswe, ptsm, pt2m, &
13 ppsn, ppsnv, ppsng, pfrozen1, &
14 palbt, pemist, pqsat, pdqsat, psnow_thrufal, &
15 prn, ph, ple, pleg, plegi, plev, &
16 ples, pler, pletr, pevap, &
17 pgflux, pmeltadv, pmelt, &
18 psoilcondz, pd_g, pdzg, ptg, &
20 pffg, pffv, pff, pffrozen, &
21 ple_flood, plei_flood, psnowtemp )
93 USE modd_csts, ONLY : xstefan, xcpd, xlstt, xlvtt, xcl, xtt, xpi, xday, &
94 xci, xrholi, xlmtt, xrholw, xg, xcl, xcondi
103 USE yomhook
,ONLY : lhook, dr_hook
104 USE parkind1
,ONLY : jprb
110 CHARACTER(LEN=*),
INTENT(IN) :: hisba
115 CHARACTER(LEN=*),
INTENT(IN) :: hsnow_isba
120 LOGICAL,
INTENT(IN) :: otemp_arp
124 REAL,
INTENT (IN) :: ptstep
127 REAL,
DIMENSION(:),
INTENT(IN) :: psodelx
129 REAL,
DIMENSION(:),
INTENT (IN) :: psw_rad, plw_rad, pta, pqa, prhoa
136 REAL,
DIMENSION(:),
INTENT(IN) :: pexns, pexna
137 REAL,
DIMENSION(:),
INTENT(IN) :: pveg
138 REAL,
DIMENSION(:),
INTENT(IN) :: phug, phui, phv, pdelta, pra, prs, pf5
139 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn, ppsnv, ppsng, pfrozen1
140 REAL,
DIMENSION(:),
INTENT(IN) :: palbt, pemist
141 REAL,
DIMENSION(:),
INTENT(IN) :: pqsat, pdqsat
142 REAL,
DIMENSION(:),
INTENT(IN) :: pleg_delta, plegi_delta
166 REAL,
DIMENSION(:),
INTENT (IN) :: pcs, pcg, pct, pt2m, ptsm, psnowswe
177 REAL,
DIMENSION(:),
INTENT(IN) :: psnow_thrufal
180 REAL,
DIMENSION(:),
INTENT(IN) :: psr
182 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv_a
185 REAL,
DIMENSION(:,:),
INTENT(IN) :: pd_g, psoilcondz
189 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzg
192 REAL,
DIMENSION(:),
INTENT(IN) :: pcps, plvtt, plstt
195 REAL,
DIMENSION(:),
INTENT(IN) :: pffv
196 REAL,
DIMENSION(:),
INTENT(IN) :: pff
197 REAL,
DIMENSION(:),
INTENT(IN) :: pffg
198 REAL,
DIMENSION(:),
INTENT(IN) :: pffrozen
200 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: ptg
203 REAL,
DIMENSION(:),
INTENT(OUT) :: ple_flood, plei_flood
204 REAL,
DIMENSION(:),
INTENT(OUT) :: psnowtemp
206 REAL,
DIMENSION(:),
INTENT(OUT) :: prn, ph, ple, pleg, plev, ples
207 REAL,
DIMENSION(:),
INTENT(OUT) :: pler, pletr, pevap, pgflux, pmeltadv, pmelt
225 REAL,
DIMENSION(:),
INTENT(OUT) :: plegi
233 REAL,
DIMENSION(SIZE(PTA)) :: zzhv, ztn, zdt
241 REAL,
DIMENSION(SIZE(PTA)) :: zpsn, zpsnv, zpsng, zfrac
251 REAL,
DIMENSION(SIZE(PTA)) :: znextsnow
255 REAL,
DIMENSION(SIZE(PTA)) :: zcondavg
268 REAL,
DIMENSION(SIZE(PTA)) :: zwork1, zwork2, zwork3
270 REAL(KIND=JPRB) :: zhook_handle
277 IF (lhook) CALL dr_hook(
'ISBA_FLUXES',0,zhook_handle)
279 IF (hsnow_isba ==
'EBA') zeps1=1.0e-8
291 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
297 zpsng(:) = ppsng(:)+pffg(:)
298 zpsnv(:) = ppsnv(:)+pffv(:)
309 zdt(jj) = ptg(jj,1) - ptsm(jj)
313 prn(jj) = (1. - palbt(jj)) * psw_rad(jj) + pemist(jj) * &
314 (plw_rad(jj) - xstefan * (ptsm(jj)** 3)*(4.*ptg(jj,1) - 3.*ptsm(jj)))
318 ph(jj) = prhoa(jj) * pcps(jj) * (ptg(jj,1) - pta(jj)*pexns(jj)/pexna(jj)) &
319 / pra(jj) / pexns(jj)
321 zwork1(jj) = prhoa(jj) * (1.-pveg(jj))*(1.-zpsng(jj)) / pra(jj)
322 zwork2(jj) = pqsat(jj)+pdqsat(jj)*zdt(jj)
326 plegi(jj) = zwork1(jj) * plstt(jj) * ( phui(jj) * zwork2(jj) - pqa(jj)) * pfrozen1(jj) * plegi_delta(jj)
331 pleg(jj) = zwork1(jj) * plvtt(jj) * ( phug(jj) * zwork2(jj) - pqa(jj)) * (1.-pfrozen1(jj)) * pleg_delta(jj)
333 zwork2(jj) = prhoa(jj) * (zwork2(jj) - pqa(jj))
334 zwork3(jj) = zwork2(jj) / pra(jj)
338 ples(jj) = plstt(jj) * zpsn(jj) * zwork3(jj)
343 plev(jj) = plvtt(jj) * pveg(jj)*(1.-zpsnv(jj)) * phv(jj) * zwork3(jj)
347 zzhv(jj) = max(0., sign(1.,pqsat(jj) - pqa(jj)))
348 pletr(jj) = zzhv(jj) * (1. - pdelta(jj)) * plvtt(jj) * pveg(jj)*(1-zpsnv(jj)) &
349 * zwork2(jj) *( (1/(pra(jj) + prs(jj))) - ((1.-pf5(jj))/(pra(jj) + xrs_max)) )
352 pler(jj) = plev(jj) - pletr(jj)
356 ple_flood(jj) = plvtt(jj) * (1.-pffrozen(jj)) * pff(jj) * zwork3(jj)
358 plei_flood(jj) = plstt(jj) * pffrozen(jj) * pff(jj) * zwork3(jj)
363 ple(jj) = pleg(jj) + plev(jj) + ples(jj) + plegi(jj)
368 pgflux(jj) = prn(jj) - ph(jj) - ple(jj)
373 pmeltadv(jj) = psnow_thrufal(jj)*xcl*(xtt - ptg(jj,1))
380 pevap(jj) = ((plev(jj) + pleg(jj))/plvtt(jj)) + ((plegi(jj) + ples(jj))/plstt(jj))
388 IF(hsnow_isba ==
'D95')
THEN
390 ple(jj) = ple(jj) + ple_flood(jj) + plei_flood(jj)
391 pgflux(jj) = pgflux(jj) - ple_flood(jj) - plei_flood(jj)
392 pevap(jj) = pevap(jj) + ple_flood(jj)/plvtt(jj) + plei_flood(jj)/plstt(jj)
401 IF( (hsnow_isba ==
'D95' .OR. hsnow_isba ==
'EBA') .AND. hisba /=
'DIF' )
THEN
404 IF (hsnow_isba ==
'D95')
THEN
406 ztn(:) = (1.-pveg(:))*ptg(:,1) + pveg(:)*pt2m(:)
409 psnowtemp(:) = ztn(:)
416 WHERE ( ztn(:) > xtt .AND. psnowswe(:) > 0.0 )
417 pmelt(:) = zpsn(:)*(ztn(:)-xtt) / (pcs(:)*xlmtt*max(xtau_smelt,ptstep))
423 znextsnow(:) = psnowswe(:) + ptstep * (psr(:) - ples(:) / plstt(:))
425 WHERE ( pmelt(:) > 0.0 )
427 pmelt(:)=min(pmelt(:),znextsnow(:)/ptstep)
428 znextsnow(:) = znextsnow(:) - ptstep * pmelt
432 WHERE(zfrac(:)<1.0e-4)
433 pmelt(:) = pmelt(:) + znextsnow(:) / ptstep
438 ELSEIF (hsnow_isba ==
'EBA')
THEN
440 pmelt(:)=min( psnowswe(:)/ptstep + psr(:) - ples(:)/plstt(:) , &
441 max(0.0,(ptg(:,1)-xtt)) / max(zeps1,pct*ptstep) / xlmtt )
449 ptg(:,1) = ptg(:,1) - pct(:)*xlmtt*pmelt(:)*ptstep
454 IF (lhook) CALL dr_hook(
'ISBA_FLUXES',1,zhook_handle)
real function, dimension(size(pwsnow)) snow_frac_ground(PWSNOW)
subroutine isba_fluxes(HISBA, HSNOW_ISBA, OTEMP_ARP, PTSTEP, PSODELX, PSW_RAD, PLW_RAD, PTA, PQA, PRHOA, PEXNS, PEXNA, PCPS, PLVTT, PLSTT, PVEG, PHUG, PHUI, PHV, PLEG_DELTA, PLEGI_DELTA, PDELTA, PRA, PF5, PRS, PCS, PCG, PCT, PSNOWSWE, PTSM, PT2M, PPSN, PPSNV, PPSNG, PFROZEN1, PALBT, PEMIST, PQSAT, PDQSAT, PSNOW_THRUFAL, PRN, PH, PLE, PLEG, PLEGI, PLEV, PLES, PLER, PLETR, PEVAP, PGFLUX, PMELTADV, PMELT, PSOILCONDZ, PD_G, PDZG, PTG, PSR, PPSNV_A, PFFG, PFFV, PFF, PFFROZEN, PLE_FLOOD, PLEI_FLOOD, PSNOWTEMP)