6 SUBROUTINE e_budget(IO, KK, PK, PEK, DK, DMK, HIMPLICIT_WIND, &
7 PTSTEP, PUREF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, &
8 PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PVMOD, PTSM, PT2M, &
9 PSW_RAD, PLW_RAD, PTA, PQA, PPS, PRHOA, PEXNS, PEXNA, &
10 PHUI, PLEG_DELTA, PLEGI_DELTA, PGRNDFLUX, PFLUX_COR, &
11 PSOILCONDZ, PSOILHCAPZ, PALBT, PEMIST, PQSAT, PDQSAT, &
12 PFROZEN1, PTDEEP_A,PTA_IC, PQA_IC, PUSTAR2_IC, PDEEP_FLUX, &
92 USE modd_snow_par
, ONLY : xemissn, xemcrin
99 USE modi_soil_temp_arp
113 TYPE(
diag_t),
INTENT(INOUT) :: DK
116 CHARACTER(LEN=*),
INTENT(IN) :: HIMPLICIT_WIND
119 REAL,
INTENT(IN) :: PTSTEP
121 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
122 REAL,
DIMENSION(:),
INTENT (IN) :: PSW_RAD, PLW_RAD, PPS, PRHOA, PTA, PQA
133 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF, PPEW_B_COEF,
143 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNS, PEXNA
144 REAL,
DIMENSION(:),
INTENT(IN) :: PHUI
146 REAL,
DIMENSION(:),
INTENT(IN) :: PFROZEN1
148 REAL,
DIMENSION(:),
INTENT(IN) :: PTDEEP_A
151 REAL,
DIMENSION(:),
INTENT(IN) :: PGRNDFLUX
155 REAL,
DIMENSION(:,:),
INTENT(IN) :: PFLUX_COR
158 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSOILCONDZ, PSOILHCAPZ
162 REAL,
DIMENSION(:),
INTENT(INOUT) :: PLEG_DELTA, PLEGI_DELTA
166 REAL,
DIMENSION(:),
INTENT (OUT) :: PQA_IC, PTA_IC, PUSTAR2_IC
173 REAL,
DIMENSION(:),
INTENT (IN) :: PTSM, PT2M
179 REAL,
DIMENSION(:),
INTENT(OUT) :: PALBT, PEMIST, PDQSAT
183 REAL,
DIMENSION(:),
INTENT(IN) :: PQSAT
186 REAL,
DIMENSION(:),
INTENT(OUT) :: PDEEP_FLUX
188 REAL,
DIMENSION(:),
INTENT(OUT) :: PRESTORE
194 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZRORA,
202 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZCONDAVG, ZCOND1, ZCOND2, ZTERM2
206 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZPET_A_COEF, ZPEQ_A_COEF, ZPET_B_COEF
215 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZUSTAR2, ZVMOD
218 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZXCPV_XCL_AVG
219 REAL,
DIMENSION(SIZE(PEK%XSNOWFREE_ALB)) :: ZCNHUMA, ZPEQA2, ZDKQB, ZCDQSAT
225 REAL(KIND=JPRB) :: ZHOOK_HANDLE
248 pdqsat(:) =
dqsat(pek%XTG(:,1),pps(:),pqsat(:))
254 ztemp(:) = dk%XCD(:)*pvmod(:)
256 IF(himplicit_wind==
'OLD')
THEN 258 zustar2(:) = ztemp(:) * ppew_b_coef(:) / (1.0- ztemp(:)*prhoa(:)*ppew_a_coef
261 zustar2(:) = ztemp(:) * (2.*ppew_b_coef(:)-pvmod(:)) / (1.0-2.0*ztemp(
265 zvmod(:) = prhoa(:)*ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
266 zvmod(:) = max(zvmod(:),0.)
268 WHERE(ppew_a_coef(:)/= 0.)
269 zustar2(:) = max( ( zvmod(:) - ppew_b_coef(:) ) / (prhoa(:)*ppew_a_coef
272 zustar2(:) = max(zustar2(:),0.)
274 zrora(:) = prhoa(:) / pek%XRESA(:)
282 ztemp(:) = ppet_a_coef(:)*zrora(:)
283 z_ccoef(:) = (1.0 - ztemp(:))/pexna(:)
285 zpet_a_coef(:) = - ztemp(:)/pexns(:)/z_ccoef(:)
287 zpet_b_coef(:) = ppet_b_coef(:)/z_ccoef(:)
296 zfv(:) = pek%XVEG(:) *(1-pek%XPSNV(:)-kk%XFFV(:))
297 zfg(:) = (1.-pek%XVEG(:))*(1.-pek%XPSNG(:)-kk%XFFG(:))
298 zfnfrz(:) = (1.-kk%XFFROZEN(:))*kk%XFF(:) + zfv + zfg(:)*(1.-pfrozen1(:)
313 zlavg(:) = pk%XLVTT(:)*zfnfrz(:) + pk%XLSTT(:)*zffrz(:)
321 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO' .OR. io%CISBA
'DIF'THEN 323 zfnsnow(:) = 1. - pek%XPSN(:)
334 zfgnfrz(:) = zfg(:) * (1.-pfrozen1(:)) * pleg_delta(:)
335 zfgfrz(:) = zfg(:) * pfrozen1(:) * plegi_delta(:)
337 zhuma(:) = zlvtt(:)/zlavg(:) * ((1.-kk%XFFROZEN(:))*kk%XFF(:) + zfv(:)*dmk%XHV
340 zhums(:) = zlvtt(:)/zlavg(:) * ((1.-kk%XFFROZEN(:))*kk%XFF(:) + zfv(:)*dmk%XHV
343 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO' .OR. io%CISBA
'DIF'THEN 347 zhumad(:) = kk%XFF(:) + zfv(:)*dmk%XHV(:) + zfgnfrz(:) + zfgfrz(:)
348 zhumsd(:) = kk%XFF(:) + zfv(:)*dmk%XHV(:) + zfgnfrz(:)*dk%XHUG(:) + zfgfrz
361 ztemp(:) = ppeq_a_coef(:)*zrora(:)
362 z_ccoef(:) = 1.0 - ztemp(:)*zhumad(:)
364 zpeq_a_coef(:) = - ztemp(:)*pdqsat(:)*zhumsd(:)/z_ccoef(:)
366 zpeq_b_coef(:) = ( ppeq_b_coef(:) - ztemp(:)*zhumsd(:)* (pqsat(:) - pdqsat
374 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO' .OR. io%CISBA
'DIF'THEN 379 IF(.NOT.io%LFLOOD)
THEN 381 palbt (:) = pek%XSNOWFREE_ALB(:)
382 pemist(:) = pek%XEMIS(:)
390 WHERE(pek%XPSN(:)<1.0)
391 palbt (:) = ((1.-kk%XFF(:)-pek%XPSN(:))*pek%XSNOWFREE_ALB(:) + kk%XFF
394 palbt (:) = pek%XSNOWFREE_ALB(:)
395 pemist(:) = pek%XEMIS(:)
405 IF(pek%TSNOW%SCHEME==
'EBA')
THEN 407 palbt(:) = (1-pek%XVEG(:)) * (pek%XSNOWFREE_ALB_SOIL(:)*(1-pek%XPSNG
412 pemist(:) = pek%XEMIS(:)-pek%XPSN(:)*(pek%XEMIS(:)-xemcrin)
416 palbt(:) = ( 1.-pek%XPSN(:)-kk%XFF(:))* pek%XSNOWFREE_ALB(:) + &
417 pek%XPSN(:) * pek%TSNOW%ALB(:) + kk%XFF
419 pemist(:) = ( 1.-pek%XPSN(:)-kk%XFF(:))* pek%XEMIS(:) + &
420 pek%XPSN(:) * xemissn + kk%XFF(:)*kk%XEMISF
434 ztrad(:) = pemist(:) *
xstefan * (pek%XTG(:,1)**3)
435 zchums(:) = zrora(:)*zlavg(:)*zhums(:)
436 zchuma(:) = zrora(:)*zlavg(:)*zhuma(:)
438 zpeta2(:) = 1./pexns(:) - zpet_a_coef(:)/pexna(:)
439 zpetb2(:) = zpet_b_coef(:)/pexna(:)
451 za(:) = 1. / ptstep + dmk%XCT(:) * &
453 ( 4.*ztrad(:) + zrora(:)*zcps(:)*zpeta2(:) )) &
454 + zchums(:)*pdqsat(:) - zchuma(:)*zpeq_a_coef(:)) &
457 zb(:) = 1. / ptstep + dmk%XCT(:) * ( zfnsnow(:)* 3.*ztrad(:) + zchums(:)
459 zc(:) = 2. *
xpi * pek%XTG(:,2) /
xday + dmk%XCT(:) * &
461 ( zrora(:)*zcps(:)*zpetb2(:) &
462 + psw_rad(:)*(1.-palbt(:)) + plw_rad(:)*pemist(:)) &
463 - (zchums(:)*pqsat(:) - zchuma(:)*zpeq_b_coef(:)))
465 IF(pek%TSNOW%SCHEME ==
'3-L' .OR. pek%TSNOW%SCHEME ==
'CRO' .OR. io%CISBA
'DIF'THEN 470 zc(:) = zc(:) + dmk%XCT(:)*(pek%XPSN(:)*pgrndflux(:)+pflux_cor(:,1))
477 zcdqsat(:) = (
xcpv-
xcpd)*zhums(:)*pdqsat(:)
478 zincr(:)= dmk%XCT(:) * zrora(:) * &
479 (zcdqsat(:) * ( zpeta2(:)*pek%XTG(:,1) - zpetb2(:)) + &
481 (zhums(:)*pqsat(:) - zhuma(:) * (zpeq_b_coef(:) + zpeq_a_coef(
489 za(:) = za(:) + zincr(:)
491 zb(:) = zb(:) + zincr(:)
498 zcnhuma(:)=(
xcpv-
xcpd)*(1.-zhuma(:))
499 zpeqa2(:)=zcnhuma(:)*zpeq_a_coef(:)*zpeta2(:)*pek%XTG(:,1)
500 zdkqb(:)=zpeq_b_coef(:)-pqa(:)
502 za(:) = za(:) + dmk%XCT(:) * zrora(:) * &
504 zcnhuma(:) * (zdkqb(:)*zpeta2(:) - zpeq_a_coef(:)*zpetb2(:)
519 IF(io%CISBA ==
'DIF')
THEN 525 zcond1(:) = pk%XDZG(:,1)/((pk%XDZG(:,1)+pk%XDZG(:,2))*psoilcondz(:,1)
528 zcondavg(:) = 1.0/(zcond1(:)+zcond2(:))
530 za(:) = za(:) - (2. *
xpi /
xday) + zcondavg(:)*dmk%XCG(:)/pk%XDZDIF
536 CALL soil_heatdif(ptstep,pk%XDZG(:,:),pk%XDZDIF(:,:),psoilcondz, &
537 psoilhcapz,dmk%XCG,zterm1,zterm2, ptdeep_a, &
538 kk%XTDEEP, pek%XTG(:,:), pdeep_flux, pflux_cor )
544 prestore(:) = zcondavg(:)*(pek%XTG(:,1)-pek%XTG(:,2))/pk%XDZDIF(:,1)
550 CALL soil_temp_arp(ptstep,za,zb,zc,kk%XGAMMAT,kk%XTDEEP,io%XSODELX,pek%XTG
553 prestore(:) = 2.0 *
xpi * (pek%XTG(:,1)-pek%XTG(:,2)) / &
554 ( dmk%XCT(:)*
xday*io%XSODELX(1)*(io%XSODELX(1)+io%XSODELX
558 pek%XTG(:,1) = ( pek%XTG(:,1)*zb(:) + zc(:) ) / za(:)
560 WHERE(kk%XTDEEP(:) /=
xundef .AND. kk%XGAMMAT(:) /=
xundef)
561 pek%XTG(:,2) = (pek%XTG(:,2) + (ptstep/
xday)*(pek%XTG(:,1) + kk%XGAMMAT
564 pek%XTG(:,2) = (pek%XTG(:,2) + (ptstep/
xday)*pek%XTG(:,1)) /
569 prestore(:) = 2.0*
xpi*(pek%XTG(:,1)-pt2m(:))/(dmk%XCT(:)*
xday)
581 pqa_ic(:) = zpeq_a_coef(:)*pek%XTG(:,1) + zpeq_b_coef(:)
583 pta_ic(:) = zpet_a_coef(:)*pek%XTG(:,1) + zpet_b_coef(:)
585 pustar2_ic(:) = zustar2(:)
594 pk%XCPS(:) = pk%XCPS(:) + (
xcpv-
xcpd) *zhums(:)*pdqsat(:)*(pek%XTG(
599 pk%XCPS(:) = pk%XCPS(:) + (
xcpv-
xcpd) *zhums(:)*pdqsat(:)*(pek%XTG(
603 pk%XLSTT(:) = pk%XLSTT(:) + (
xcpv-
xci)*(pek%XTG(:,1)-ptsm(:))
605 pk%XLVTT(:) = pk%XLVTT(:) + (
xcpv-
xcl)*(pek%XTG(:,1)-ptsm(:))
subroutine soil_temp_arp(PTSTEP, PA, PB, PC, PGAMMAT, PTDEEP, PSODELX, PT
subroutine e_budget(IO, KK, PK, PEK, DK, DMK, HIMPLICIT_WIND, PTSTEP, PUREF, PPEW_A_COEF, PPEW_B_COEF, PPET_
subroutine soil_heatdif(PTSTEP, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PCT, PTERM1, PTERM2, PTDEEP_A, PTDEEP_B, PTG, PDEEP_FLUX, PFLUX_COR)