6 SUBROUTINE e_budget(HISBA, HSNOW_ISBA, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, &
7 ptstep, psodelx, puref, ppew_a_coef, ppew_b_coef, &
8 ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
10 ptg, ptsm, pt2m, psnowalbm, &
11 psw_rad, plw_rad, pta, pqa, pps, prhoa, &
12 pexns, pexna, pcps, plvtt, plstt, &
13 pveg, phug, phui, phv, &
14 pleg_delta, plegi_delta, &
16 pct, pcg, ppsn, ppsnv, ppsng, &
17 pgrndflux, pflux_cor, &
18 pd_g, pdzg, pdzdif, psoilcondz, psoilhcapz, &
19 palbt, pemist, pqsat, pdqsat, &
20 pfrozen1, ptdeep_a, ptdeep_b, pgammat, &
21 pta_ic, pqa_ic, pustar2_ic, &
22 psnowfree_alb_veg, ppsnv_a,psnowfree_alb_soil, &
23 pffg, pffv, pff, pffrozen, pfalb, pfemis, pdeep_flux,&
95 USE modd_csts, ONLY : xlvtt, xlstt, xstefan, xcpd, xpi, xday, &
104 USE modi_soil_heatdif
105 USE modi_soil_temp_arp
107 USE yomhook
,ONLY : lhook, dr_hook
108 USE parkind1
,ONLY : jprb
116 CHARACTER(LEN=*),
INTENT(IN) :: hisba
121 CHARACTER(LEN=*),
INTENT(IN) :: hsnow_isba
125 LOGICAL,
INTENT(IN) :: oflood
126 LOGICAL,
INTENT(IN) :: otemp_arp
129 CHARACTER(LEN=*),
INTENT(IN) :: himplicit_wind
133 REAL,
INTENT(IN) :: ptstep
136 REAL,
DIMENSION(:),
INTENT (IN) :: psodelx
139 REAL,
DIMENSION(:),
INTENT(IN) :: puref
140 REAL,
DIMENSION(:),
INTENT(IN) :: psnowalbm
145 REAL,
DIMENSION(:),
INTENT (IN) :: psw_rad, plw_rad, pps, prhoa, pta, pqa, pcd, pvmod
157 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_a_coef, ppew_b_coef, &
158 ppet_a_coef, ppeq_a_coef, ppet_b_coef, &
167 REAL,
DIMENSION(:),
INTENT(IN) :: pexns, pexna
168 REAL,
DIMENSION(:),
INTENT(IN) :: pveg, phug, phui, phv
169 REAL,
DIMENSION(:),
INTENT(IN) :: pemis, palb, pct, pcg
170 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv, ppsng, ppsn
182 REAL,
DIMENSION(:),
INTENT(IN) :: pfrozen1
185 REAL,
DIMENSION(:),
INTENT(IN) :: ptdeep_a, ptdeep_b, pgammat
202 REAL,
DIMENSION(:),
INTENT(IN) :: pgrndflux
206 REAL,
DIMENSION(:,:),
INTENT(IN) :: pflux_cor
209 REAL,
DIMENSION(:,:),
INTENT(IN) :: pd_g, psoilcondz, psoilhcapz
213 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzg
214 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzdif
217 REAL,
DIMENSION(:),
INTENT(IN) :: psnowfree_alb_veg
218 REAL,
DIMENSION(:),
INTENT(IN) :: psnowfree_alb_soil
219 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv_a
221 REAL,
DIMENSION(:),
INTENT(INOUT) :: pleg_delta, plegi_delta
225 REAL,
DIMENSION(:),
INTENT (OUT) :: pqa_ic, pta_ic, pustar2_ic
232 REAL,
DIMENSION(:),
INTENT(IN) :: pra
236 REAL,
DIMENSION(:,:),
INTENT(INOUT):: ptg
239 REAL,
DIMENSION(:),
INTENT (IN) :: ptsm, pt2m
245 REAL,
DIMENSION(:),
INTENT(INOUT) :: pcps
248 REAL,
DIMENSION(:),
INTENT(OUT) :: palbt, pemist, pdqsat
252 REAL,
DIMENSION(:),
INTENT(IN) :: pqsat
255 REAL,
DIMENSION(:),
INTENT(IN) :: pffv, pff, pffg, pfalb, pfemis, pffrozen
262 REAL,
DIMENSION(:),
INTENT(INOUT) :: plstt, plvtt
264 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeep_flux
266 REAL,
DIMENSION(:),
INTENT(OUT) :: prestore
272 REAL,
DIMENSION(SIZE(PALB)) :: zrora, &
280 REAL,
DIMENSION(SIZE(PALB)) :: zcondavg, zcond1, zcond2, zterm2, zterm1
284 REAL,
DIMENSION(SIZE(PALB)) :: zpet_a_coef, zpeq_a_coef, zpet_b_coef, &
285 zpeq_b_coef, z_ccoef, zhums, zhuma, zlavg, &
293 REAL,
DIMENSION(SIZE(PALB)) :: zustar2, zvmod
296 REAL,
DIMENSION(SIZE(PALB)) :: zxcpv_xcl_avg
297 REAL,
DIMENSION(SIZE(PALB)) :: zcnhuma, zpeqa2, zdpqb, zcdqsat, zincr, ztrad, &
298 zchums, zchuma, zpeta2, zpetb2,ztemp, zfgnfrz, &
299 zfgfrz, zfv, zfg, zfnfrz, zffrz, zfnsnow, zcps,&
303 REAL(KIND=JPRB) :: zhook_handle
310 IF (lhook) CALL dr_hook(
'E_BUDGET',0,zhook_handle)
326 pdqsat(:) =
dqsat(ptg(:,1),pps(:),pqsat(:))
332 ztemp(:) = pcd(:)*pvmod(:)
334 IF(himplicit_wind==
'OLD')
THEN
336 zustar2(:) = ztemp(:) * ppew_b_coef(:) / (1.0- ztemp(:)*prhoa(:)*ppew_a_coef(:))
339 zustar2(:) = ztemp(:) * (2.*ppew_b_coef(:)-pvmod(:)) / (1.0-2.0*ztemp(:)*prhoa(:)*ppew_a_coef(:))
343 zvmod(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
344 zvmod(:) = max(zvmod(:),0.)
346 WHERE(ppew_a_coef(:)/= 0.)
347 zustar2(:) = max( ( zvmod(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef(:)), 0.)
350 zustar2(:) = max(zustar2(:),0.)
352 zrora(:) = prhoa(:) / pra(:)
360 ztemp(:) = ppet_a_coef(:)*zrora(:)
361 z_ccoef(:) = (1.0 - ztemp(:))/pexna(:)
363 zpet_a_coef(:) = - ztemp(:)/pexns(:)/z_ccoef(:)
365 zpet_b_coef(:) = ppet_b_coef(:)/z_ccoef(:)
374 zfv(:) = pveg(:) * (1-ppsnv(:)-pffv(:))
375 zfg(:) = (1.-pveg(:))*(1.-ppsng(:)-pffg(:))
376 zfnfrz(:) = (1.-pffrozen(:))*pff(:) + zfv + zfg(:)*(1.-pfrozen1(:))
377 zffrz(:) = pffrozen(:)*pff(:) + zfg(:)*pfrozen1(:) + ppsn(:)
391 zlavg(:) = plvtt(:)*zfnfrz(:) + plstt(:)*zffrz(:)
392 zxcpv_xcl_avg(:)= (xcpv-xcl)*zfnfrz(:) + (xcpv-xci)*zffrz(:)
399 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
401 zfnsnow(:) = 1. - ppsn(:)
405 zlavg(:) = xlvtt*zfnfrz(:) + xlstt*zffrz(:)
412 zfgnfrz(:) = zfg(:)*(1.-pfrozen1(:))*pleg_delta(:)
413 zfgfrz(:) = zfg(:)*pfrozen1(:)*plegi_delta(:)
415 zhuma(:) = zlvtt(:)/zlavg(:) * ((1.-pffrozen(:))*pff(:) + zfv(:)*phv(:) + zfgnfrz(:)) + &
416 zlstt(:)/zlavg(:) * (pffrozen(:)*pff(:) + zfgfrz(:) + zsnow*ppsn(:) )
418 zhums(:) = zlvtt(:)/zlavg(:) * ((1.-pffrozen(:))*pff(:) + zfv(:)*phv(:) + zfgnfrz(:)*phug(:)) + &
419 zlstt(:)/zlavg(:) * (pffrozen(:)*pff(:) + zfgfrz(:)*phui(:) + zsnow*ppsn(:) )
421 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
425 zhumad(:) = pff(:) + zfv(:)*phv(:) + zfgnfrz(:) + zfgfrz(:)
426 zhumsd(:) = pff(:) + zfv(:)*phv(:) + zfgnfrz(:)*phug(:) + zfgfrz(:)*phui(:)
439 ztemp(:) = ppeq_a_coef(:)*zrora(:)
440 z_ccoef(:) = 1.0 - ztemp(:)*zhumad(:)
442 zpeq_a_coef(:) = - ztemp(:)*pdqsat(:)*zhumsd(:)/z_ccoef(:)
444 zpeq_b_coef(:) = ( ppeq_b_coef(:) - ztemp(:)*zhumsd(:)* &
445 (pqsat(:) - pdqsat(:)*ptg(:,1)) )/z_ccoef(:)
453 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
470 palbt(:) = ((1.-pff(:)-ppsn(:))*palb(:) + pff(:)*pfalb(:))/(1.-ppsn(:))
471 pemist(:) = ((1.-pff(:)-ppsn(:))*pemis(:) + pff(:)*pfemis(:))/(1.-ppsn(:))
484 IF(hsnow_isba==
'EBA')
THEN
486 palbt(:) = (1-pveg(:))*(psnowfree_alb_soil(:)*(1-ppsng(:))+psnowalbm(:)*ppsng(:)) + &
487 pveg(:)*(psnowfree_alb_veg(:)*(1-ppsnv_a(:)) + &
488 psnowalbm(:)*ppsnv_a(:))
490 pemist(:) = pemis(:)-ppsn(:)*(pemis(:)-xemcrin)
494 palbt(:) = ( 1.-ppsn(:)-pff(:))*palb(:) + ppsn(:)*psnowalbm(:) + pff(:)*pfalb(:)
496 pemist(:) = ( 1.-ppsn(:)-pff(:))*pemis(:) + ppsn(:)*xemissn + pff(:)*pfemis(:)
510 ztrad(:) = pemist(:) * xstefan * (ptg(:,1)**3)
511 zchums(:) = zrora(:)*zlavg(:)*zhums(:)
512 zchuma(:) = zrora(:)*zlavg(:)*zhuma(:)
514 zpeta2(:) = 1./pexns(:) - zpet_a_coef(:)/pexna(:)
515 zpetb2(:) = zpet_b_coef(:)/pexna(:)
527 za(:) = 1. / ptstep + pct(:) * &
529 ( 4.*ztrad(:) + zrora(:)*zcps(:)*zpeta2(:) )) &
530 + zchums(:)*pdqsat(:) - zchuma(:)*zpeq_a_coef(:)) &
533 zb(:) = 1. / ptstep + pct(:) * ( zfnsnow(:)* 3.*ztrad(:) + zchums(:)*pdqsat(:) )
535 zc(:) = 2. * xpi * ptg(:,2) / xday + pct(:) * &
537 ( zrora(:)*zcps(:)*zpetb2(:) &
538 + psw_rad(:)*(1.-palbt(:)) + plw_rad(:)*pemist(:)) &
539 - (zchums(:)*pqsat(:) - zchuma(:)*zpeq_b_coef(:)))
541 IF(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO' .OR. hisba ==
'DIF')
THEN
546 zc(:) = zc(:) + pct(:)*(ppsn(:)*pgrndflux(:)+pflux_cor(:,1))
548 ELSEIF (lcpl_arp)
THEN
553 zcdqsat(:) = (xcpv-xcpd)*zhums(:)*pdqsat(:)
554 zincr(:)= pct(:) * zrora(:) * &
555 (zcdqsat(:) * ( zpeta2(:)*ptg(:,1) - zpetb2(:)) + &
557 (zhums(:)*pqsat(:) - zhuma(:) * (zpeq_b_coef(:) + zpeq_a_coef(:) * ptg(:,1))))
565 za(:) = za(:) + zincr(:)
567 zb(:) = zb(:) + zincr(:)
574 zcnhuma(:)=(xcpv-xcpd)*(1.-zhuma(:))
575 zpeqa2(:)=zcnhuma(:)*zpeq_a_coef(:)*zpeta2(:)*ptg(:,1)
576 zdpqb(:)=zpeq_b_coef(:)-pqa(:)
578 za(:) = za(:) + pct(:) * zrora(:) * &
580 zcnhuma(:) * (zdpqb(:)*zpeta2(:) - zpeq_a_coef(:)*zpetb2(:) ))
582 zb(:) = zb(:) + pct(:) * zrora(:) * zpeqa2(:)
584 zc(:) = zc(:) + pct(:)*zrora(:)*zcnhuma(:) *zdpqb(:)*zpetb2(:)
595 IF(hisba ==
'DIF')
THEN
601 zcond1(:) = pdzg(:,1)/((pdzg(:,1)+pdzg(:,2))*psoilcondz(:,1))
602 zcond2(:) = pdzg(:,2)/((pdzg(:,1)+pdzg(:,2))*psoilcondz(:,2))
604 zcondavg(:) = 1.0/(zcond1(:)+zcond2(:))
606 za(:) = za(:) - (2. * xpi / xday) + zcondavg(:)*pcg(:)/pdzdif(:,1)
607 zterm2(:) = zcondavg(:)*pcg(:)/(za(:)*pdzdif(:,1))
608 zterm1(:) = (ptg(:,1)*zb(:) + (zc(:) - (2. * xpi * ptg(:,2) / xday)) )/za(:)
613 psoilhcapz,pcg,zterm1,zterm2, &
614 ptdeep_a,ptdeep_b,ptg,pdeep_flux, &
621 prestore(:) = zcondavg(:)*(ptg(:,1)-ptg(:,2))/pdzdif(:,1)
627 CALL
soil_temp_arp(ptstep,za,zb,zc,pgammat,ptdeep_b,psodelx,ptg)
630 prestore(:)=2.0*xpi*(ptg(:,1)-ptg(:,2))/(pct(:)*xday*psodelx(1)*(psodelx(1)+psodelx(2)))
634 ptg(:,1) = ( ptg(:,1)*zb(:) + zc(:) ) / za(:)
636 WHERE(ptdeep_b(:) /= xundef .AND. pgammat(:) /= xundef)
637 ptg(:,2) = (ptg(:,2) + (ptstep/xday)*(ptg(:,1) + pgammat(:)*ptdeep_b(:)))/ &
638 (1.+(ptstep/xday)*(1.0+pgammat(:)))
640 ptg(:,2) = (ptg(:,2) + (ptstep/xday)*ptg(:,1))/ &
645 prestore(:) = 2.0*xpi*(ptg(:,1)-pt2m(:))/(pct(:)*xday)
657 pqa_ic(:) = zpeq_a_coef(:)*ptg(:,1) + zpeq_b_coef(:)
659 pta_ic(:) = zpet_a_coef(:)*ptg(:,1) + zpet_b_coef(:)
661 pustar2_ic(:) = zustar2(:)
669 IF (.NOT.lqvnplus)
THEN
670 pcps(:) = pcps(:) + (xcpv-xcpd) *zhums(:)*pdqsat(:)*(ptg(:,1)-ptsm(:))
675 pcps(:) = pcps(:) + (xcpv-xcpd) *zhums(:)*pdqsat(:)*(ptg(:,1)-ptsm(:)) &
676 + (xcpv-xcpd) *(1-zhuma(:))*(pqa_ic(:)-pqa(:))
679 plstt(:) = plstt(:) + (xcpv-xci)*(ptg(:,1)-ptsm(:))
681 plvtt(:) = plvtt(:) + (xcpv-xcl)*(ptg(:,1)-ptsm(:))
686 IF (lhook) CALL dr_hook(
'E_BUDGET',1,zhook_handle)
subroutine e_budget(HISBA, HSNOW_ISBA, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, PTSTEP, PSODELX, PUREF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PVMOD, PCD, PTG, PTSM, PT2M, PSNOWALBM, PSW_RAD, PLW_RAD, PTA, PQA, PPS, PRHOA, PEXNS, PEXNA, PCPS, PLVTT, PLSTT, PVEG, PHUG, PHUI, PHV, PLEG_DELTA, PLEGI_DELTA, PEMIS, PALB, PRA, PCT, PCG, PPSN, PPSNV, PPSNG, PGRNDFLUX, PFLUX_COR, PD_G, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PALBT, PEMIST, PQSAT, PDQSAT, PFROZEN1, PTDEEP_A, PTDEEP_B, PGAMMAT, PTA_IC, PQA_IC, PUSTAR2_IC, PSNOWFREE_ALB_VEG, PPSNV_A, PSNOWFREE_ALB_SOIL, PFFG, PFFV, PFF, PFFROZEN, PFALB, PFEMIS, PDEEP_FLUX, PRESTORE)
subroutine soil_temp_arp(PTSTEP, PA, PB, PC, PGAMMAT, PTDEEP, PSODELX, PTG)
subroutine soil_heatdif(PTSTEP, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PCT, PTERM1, PTERM2, PTDEEP_A, PTDEEP_B, PTG, PDEEP_FLUX, PFLUX_COR)