7 pps,pcg,pct,pcv,pwrvn,pwr, &
8 ptdeep_a,ptdeep_b,pd_g,psoilcondz,psoilhcapz, &
9 psnowdz,psnowcondz,psnowhcapz, &
10 pswnet_v,pswnet_g,pswnet_n,ptau_n, &
11 plwnet_v,plwnet_g,plwnet_n, &
12 plwnet_v_dtv,plwnet_v_dtg,plwnet_v_dtn, &
13 plwnet_g_dtv,plwnet_g_dtg,plwnet_g_dtn, &
14 plwnet_n_dtv,plwnet_n_dtg,plwnet_n_dtn, &
15 ppew_a_coef,ppew_b_coef,ppet_a_coef,ppeq_a_coef,ppet_b_coef,ppeq_b_coef, &
16 pthrma_ta,pthrmb_ta,pthrma_tc,pthrmb_tc, &
17 pthrma_tg,pthrmb_tg,pthrma_tv,pthrmb_tv,pthrma_tn,pthrmb_tn, &
18 pqsat_g,pqsat_v,pqsati_n, &
19 pff,pffrozen,ppsn,ppsna,ppsncv, &
20 pcheatv,pcheatg,pcheatn, &
21 pleg_delta,plegi_delta,phug,phugi,phvg,phvn,pfrozen1, &
22 pflxc_c_a,pflxc_g_c,pflxc_vg_c,pflxc_vn_c,pflxc_n_c,pflxc_n_a, &
25 pflxc_v_c,phvgs,phvns, &
26 pdqsat_g,pdqsat_v,pdqsati_n, &
27 ptc,pqc,pta_ic,pqa_ic,pustar2_ic,pvmod, &
28 pdeltat_g,pdeltat_v,pdeltat_n,pgrndflux,pcps,plvtt,plstt, &
29 phpsnow,pmeltadv,prestore,pdeep_flux, &
30 pdelheatv_sfc,pdelheatg_sfc,pdelheatg )
94 USE modd_csts, ONLY : xlvtt, xlstt, xtt, xcpd, xcpv, xcl, &
103 USE modi_tridiag_ground_rm_coefs
104 USE modi_tridiag_ground_rm_soln
106 USE yomhook
,ONLY : lhook, dr_hook
107 USE parkind1
,ONLY : jprb
113 CHARACTER(LEN=*),
INTENT(IN) :: hisba
118 CHARACTER(LEN=*),
INTENT(IN) :: hcpsurf
122 REAL,
INTENT(IN) :: ptstep
125 REAL,
DIMENSION(:),
INTENT(IN) :: pct, pcv, pwrvn, pwr, pcg
132 REAL,
DIMENSION(:),
INTENT(IN) :: ptdeep_a, ptdeep_b
144 REAL,
DIMENSION(:),
INTENT(IN) :: pps
147 REAL,
DIMENSION(:,:),
INTENT(IN) :: pd_g, psoilcondz, psoilhcapz
152 REAL,
DIMENSION(:,:),
INTENT(IN) :: psnowdz, psnowcondz, psnowhcapz
157 REAL,
DIMENSION(:),
INTENT(IN) :: pswnet_v, pswnet_g, pswnet_n
162 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptau_n
169 REAL,
DIMENSION(:),
INTENT(IN) :: plwnet_v, plwnet_g, plwnet_n
174 REAL,
DIMENSION(:),
INTENT(IN) :: plwnet_v_dtv, plwnet_v_dtg, plwnet_v_dtn
178 REAL,
DIMENSION(:),
INTENT(IN) :: plwnet_g_dtv, plwnet_g_dtg, plwnet_g_dtn
182 REAL,
DIMENSION(:),
INTENT(IN) :: plwnet_n_dtv, plwnet_n_dtg, plwnet_n_dtn
186 REAL,
DIMENSION(:),
INTENT(IN) :: pthrma_ta, pthrmb_ta, pthrma_tc, pthrmb_tc, &
187 pthrma_tg, pthrmb_tg, pthrma_tv, pthrmb_tv, pthrma_tn, pthrmb_tn
201 REAL,
DIMENSION(:),
INTENT(IN) :: ppet_a_coef, ppeq_a_coef, ppet_b_coef, ppeq_b_coef, &
202 ppew_a_coef, ppew_b_coef
210 REAL,
DIMENSION(:),
INTENT(IN) :: pqsat_g, pqsat_v, pqsati_n
215 REAL,
DIMENSION(:),
INTENT(IN) :: pff, pffrozen, ppsn, ppsna, ppsncv
222 REAL,
DIMENSION(:),
INTENT(IN) :: pleg_delta, plegi_delta, phug, phugi, phvg, phvn, pfrozen1
231 REAL,
DIMENSION(:),
INTENT(IN) :: pflxc_c_a, pflxc_g_c, pflxc_vg_c, pflxc_vn_c, pflxc_n_c, pflxc_n_a, pflxc_mom
241 REAL,
DIMENSION(:,:),
INTENT(INOUT):: ptn
244 REAL,
DIMENSION(:),
INTENT(INOUT):: ptv
247 REAL,
DIMENSION(:,:),
INTENT(INOUT):: ptg
250 REAL,
DIMENSION(:),
INTENT(OUT) :: pcheatv, pcheatg, pcheatn
255 REAL,
DIMENSION(:),
INTENT(OUT) :: pdqsat_g, pdqsat_v, pdqsati_n
263 REAL,
DIMENSION(:),
INTENT(OUT) :: pflxc_v_c, phvgs, phvns
271 REAL,
DIMENSION(:),
INTENT(OUT) :: ptc, pqc, pta_ic, pqa_ic, pustar2_ic, pvmod
281 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeltat_v, pdeltat_n, pdeltat_g
286 REAL,
DIMENSION(:),
INTENT(OUT) :: pgrndflux
289 REAL,
DIMENSION(:),
INTENT(OUT) :: pcps, plvtt, plstt
294 REAL,
DIMENSION(:),
INTENT(OUT) :: phpsnow, pmeltadv, prestore
300 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeep_flux
302 REAL,
DIMENSION(:),
INTENT(OUT) :: pdelheatv_sfc, pdelheatg_sfc, pdelheatg
310 INTEGER :: jnsnow, jngrnd, jnpts, jj, jk, jl
314 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: ztgo
316 REAL,
DIMENSION(SIZE(PTN,1),SIZE(PTN,2)) :: ztno
318 REAL,
DIMENSION(SIZE(PTG,1)) :: ztvo
320 REAL,
DIMENSION(SIZE(PPS)) :: zhn, zhs, zhvs
322 REAL,
DIMENSION(SIZE(PPS)) :: zpsnag, zwork, zfff, zgcond1
324 REAL,
DIMENSION(SIZE(PPS)) :: zpet_a_coef_p, zpet_b_coef_p, zpet_c_coef_p
326 REAL,
DIMENSION(SIZE(PPS)) :: zpeq_a_coef_p, zpeq_b_coef_p, zpeq_c_coef_p
328 REAL,
DIMENSION(SIZE(PPS)) :: zcoefa_tc, zcoefb_tc, zcoefc_tc, zcoefd_tc, &
329 zcoefa_qc, zcoefb_qc, zcoefc_qc, zcoefd_qc
331 REAL,
DIMENSION(SIZE(PPS)) :: zbeta_v, zalpha_v, zgamma_v, &
332 zbeta_g, zalpha_g, zgamma_g, &
333 zbeta_n, zalpha_n, zgamma_n, &
334 zbeta_p_v, zalpha_p_v, zbeta_p_n, zalpha_p_n
336 REAL,
DIMENSION(SIZE(PPS)) :: zrnet_nn, zrnet_n_dtnn, zrnet_n_dtgn, zrnet_n_dtvn
338 REAL,
DIMENSION(SIZE(PPS)) :: zvmod, zustar2, zpsna
340 REAL,
DIMENSION(SIZE(PPS)) :: ztconda_delz_g, ztconda_delz_n, ztconda_delz_ng
342 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: zsoil_coef_a, zsoil_coef_b
344 REAL,
DIMENSION(SIZE(PSNOWDZ,1),SIZE(PSNOWDZ,2)):: zsnow_coef_a, zsnow_coef_b, zsnowdz
346 REAL,
DIMENSION(SIZE(PD_G,1),SIZE(PD_G,2)+SIZE(PSNOWDZ,2)) :: zd, zt, zhcapz, zcondz, &
347 zcoef_a, zcoef_b, zsource
349 REAL(KIND=JPRB) :: zhook_handle
352 REAL,
PARAMETER :: zertol = 1.0e-6
353 REAL,
PARAMETER :: zertol_flx_c = 1.0e-12
360 IF (lhook) CALL dr_hook(
'E_BUDGET_MEB',0,zhook_handle)
369 zpsna(:) = min(1.0-zertol, ppsna(:))
379 zsoil_coef_a(:,:) = 0.0
380 zsoil_coef_b(:,:) = 0.0
381 zsnow_coef_a(:,:) = 0.0
382 zsnow_coef_b(:,:) = 0.0
390 pcheatg(:) = 1/pct(:)
394 pcheatn(:) = psnowhcapz(:,1)*psnowdz(:,1)
398 pdqsat_g(:) =
dqsat(ztgo(:,1), pps(:),pqsat_g(:) )
399 pdqsat_v(:) =
dqsat(ztvo(:), pps(:),pqsat_v(:) )
400 pdqsati_n(:) =
dqsati(ztno(:,1), pps(:),pqsati_n(:) )
430 zustar2(:) = (pflxc_mom(:)*ppew_b_coef(:))/ &
431 (1.0-pflxc_mom(:)*ppew_a_coef(:))
433 zvmod(:) = ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
435 pvmod(:) = max(zvmod,0.)
437 WHERE (ppew_a_coef(:) /= 0.)
438 zustar2(:) = max(0., ( pvmod(:) - ppew_b_coef(:) ) / ppew_a_coef(:) )
441 pustar2_ic(:)= zustar2(:)
447 IF(hisba ==
'DIF')
THEN
456 zsource(:,1:jngrnd),ptdeep_a,ptdeep_b,ztconda_delz_g,zsoil_coef_a,zsoil_coef_b)
469 zsnowdz(:,:) = max(xsnowdzmin, psnowdz(:,:))
473 zd(:,jl) = zsnowdz(:,1)
475 zhcapz(:,jl) = psnowhcapz(:,1)
476 zcondz(:,jl) = psnowcondz(:,1)
481 zd(jj,jl) = zsnowdz(jj,jk)
482 zt(jj,jl) = ztno(jj,jk)
483 zhcapz(jj,jl) = psnowhcapz(jj,jk)
484 zcondz(jj,jl) = psnowcondz(jj,jk)
485 zsource(jj,jl) = pswnet_n(jj)*(ptau_n(jj,jk-1)-ptau_n(jj,jk))
491 zhcapz(:,jl) = pcheatg(:)/pd_g(:,1)
492 zcondz(:,jl) = psoilcondz(:,1)
493 zsource(:,jl) = pswnet_n(:)*ptau_n(:,jnsnow)
497 zd(jj,jl) = pd_g(jj,jk)
498 zt(jj,jl) = ztgo(jj,jk)
499 zhcapz(jj,jl) = psoilhcapz(jj,jk)
500 zcondz(jj,jl) = psoilcondz(jj,jk)
508 zsource,ptdeep_a,ptdeep_b,ztconda_delz_n,zcoef_a,zcoef_b)
510 zsnow_coef_a(:,2) = zcoef_a(:,2)
511 zsnow_coef_b(:,2) = zcoef_b(:,2)
513 zgcond1(:) = psoilcondz(:,1)
517 zsoil_coef_a(:,2) = (ptstep/xday)/(1.0 + ptstep/xday)
518 zsoil_coef_b(:,2) = ztgo(:,2) /(1.0 + ptstep/xday)
520 ztconda_delz_g(:) = (2*xpi/xday)/pct(:)
527 zgcond1(:) = (4*xpi/xday)/( pcg(:)*pcg(:)/(pd_g(:,1)*pct(:)) )
531 zd(:,jl) = zsnowdz(:,1)
533 zhcapz(:,jl) = psnowhcapz(:,1)
534 zcondz(:,jl) = psnowcondz(:,1)
539 zd(jj,jl) = zsnowdz(jj,jk)
540 zt(jj,jl) = ztno(jj,jk)
541 zhcapz(jj,jl) = psnowhcapz(jj,jk)
542 zcondz(jj,jl) = psnowcondz(jj,jk)
543 zsource(jj,jl) = pswnet_n(jj)*(ptau_n(jj,jk-1)-ptau_n(jj,jk))
549 zhcapz(:,jl) = 1/pct(:)
550 zcondz(:,jl) = zgcond1(:)
551 zsource(:,jl) = pswnet_n(:)*ptau_n(:,jnsnow)
556 zhcapz(:,1:jl),zcondz(:,1:jl),zsource(:,1:jl), &
557 ptdeep_a,ptdeep_b,ztconda_delz_n,zcoef_a(:,1:jl),zcoef_b(:,1:jl))
559 zsnow_coef_a(:,2) = zcoef_a(:,2)
560 zsnow_coef_b(:,2) = zcoef_b(:,2)
566 ztconda_delz_ng(:) = 2/((zsnowdz(:,jnsnow)/psnowcondz(:,jnsnow))+(pd_g(:,1)/zgcond1(:) ))
575 pflxc_v_c(:) = pflxc_vg_c(:)*(1.-ppsn(:)) + pflxc_vn_c(:)*ppsn(:)*(1.-zpsna(:))
576 pflxc_v_c(:) = max(pflxc_v_c(:), zertol_flx_c)
580 zfff(:) = pff(:)*( 1.0 - pffrozen(:)*(1.0 - (xlstt/xlvtt)) )
582 zhn(:) = (1.0-ppsn(:)-zfff(:))*( &
583 pleg_delta(:) *(1.0-pfrozen1(:)) &
584 + plegi_delta(:)* pfrozen1(:)*(xlstt/xlvtt) ) + zfff(:)
586 zhs(:) = (1.0-ppsn(:)-zfff(:))*( &
587 phug(:) *pleg_delta(:) *(1.0-pfrozen1(:)) &
588 + phugi(:)*plegi_delta(:)* pfrozen1(:)*(xlstt/xlvtt) ) + zfff(:)
592 zhn(:) = zhn(:)/max(1.0 - ppsn(:) , zertol)
594 zhs(:) = zhs(:)/max(1.0 - ppsn(:) , zertol)
598 phvgs(:) = (1.-zpsna(:))*ppsn(:) *phvn(:)*(pflxc_vn_c(:)/pflxc_v_c(:)) + &
599 (1.-ppsn(:))*phvg(:)*(pflxc_vg_c(:)/pflxc_v_c(:))
601 phvns(:) = (1.-zpsna(:))*ppsn(:) * (pflxc_vn_c(:)/pflxc_v_c(:)) + &
602 (1.-ppsn(:))* (pflxc_vg_c(:)/pflxc_v_c(:))
606 zhvs(:) = (1.-ppsncv(:))*phvgs(:) + ppsncv(:)*(xlstt/xlvtt)*phvns(:)
623 zpsnag(:) = 1.0 - ppsn(:)*ppsna(:)
627 zwork(:) = pthrma_ta(:)*( 1.0 + ppet_a_coef(:)*( &
628 pflxc_c_a(:)*zpsnag(:) + pflxc_n_a(:)*ppsn(:)*ppsna(:)) )
629 zpet_a_coef_p(:) = ppet_a_coef(:)*pflxc_c_a(:)*zpsnag(:)*pthrma_tc(:) /zwork(:)
630 zpet_b_coef_p(:) = ( ppet_b_coef(:) - pthrmb_ta(:) + &
631 ppet_a_coef(:)*(pflxc_c_a(:)*zpsnag(:)*(pthrmb_tc(:)-pthrmb_ta(:)) + &
632 pflxc_n_a(:)*ppsn(:)*ppsna(:)*(pthrmb_tn(:)-pthrmb_ta(:)) ) ) /zwork(:)
633 zpet_c_coef_p(:) = ppet_a_coef(:)*pflxc_n_a(:)*ppsn(:)*ppsna(:)*pthrma_tn(:) /zwork(:)
637 zwork(:) = 1.0 + ppeq_a_coef(:)*(pflxc_c_a(:)*zpsnag(:) + &
638 pflxc_n_a(:)*ppsn(:)*ppsna(:)*zhns)
639 zpeq_a_coef_p(:) = ppeq_a_coef(:)*pflxc_c_a(:)*zpsnag(:) /zwork(:)
640 zpeq_b_coef_p(:) = ppeq_b_coef(:) /zwork(:)
641 zpeq_c_coef_p(:) = ppeq_a_coef(:)*pflxc_n_a(:)*ppsn(:)*ppsna(:)*zhns/zwork(:)
650 zwork(:) = pflxc_c_a(:) *(pthrma_tc(:)-pthrma_ta(:)*zpet_a_coef_p(:))*zpsnag(:) &
651 + pflxc_v_c(:) *pthrma_tc(:) &
652 + pflxc_g_c(:) *pthrma_tc(:)*(1.0-ppsn(:)) &
653 + pflxc_n_c(:) *pthrma_tc(:)* ppsn(:) *(1.0-ppsna(:))
655 zcoefa_tc(:) = (pflxc_c_a(:) * zpsnag(:) *(pthrma_ta(:)*zpet_b_coef_p(:)-pthrmb_tc(:)+pthrmb_ta(:)) &
656 + pflxc_v_c(:) * (pthrmb_tv(:)-pthrmb_tc(:)) &
657 + pflxc_g_c(:) * (pthrmb_tg(:)-pthrmb_tc(:))*(1.0-ppsn(:)) &
658 + pflxc_n_c(:) * (pthrmb_tn(:)-pthrmb_tc(:))* ppsn(:) *(1.0-ppsna(:)) &
661 zcoefb_tc(:) = pflxc_v_c(:)*pthrma_tv(:) /zwork(:)
663 zcoefc_tc(:) = pflxc_g_c(:)*pthrma_tg(:)*(1.0-ppsn(:)) /zwork(:)
665 zcoefd_tc(:) =(pflxc_n_c(:)*pthrma_tn(:)* ppsn(:)*(1.0-ppsna(:)) + &
666 pflxc_c_a(:) *pthrma_ta(:)*zpet_c_coef_p(:)*zpsnag(:) ) /zwork(:)
671 zwork(:) = pflxc_c_a(:) *(1.-zpeq_a_coef_p(:))*zpsnag(:) &
672 + pflxc_v_c(:)* zhvs(:) &
673 + pflxc_g_c(:) *zhn(:) *(1.0-ppsn(:)) &
674 + pflxc_n_c(:) *zhns * ppsn(:) *(1.0-ppsna(:))
675 zwork(:) = max(zertol, zwork(:))
677 zcoefa_qc(:) = ( pflxc_c_a(:) *zpeq_b_coef_p(:)*zpsnag(:) &
678 + pflxc_v_c(:) *zhvs(:)*(pqsat_v(:)-pdqsat_v(:)*ztvo(:) ) &
679 + pflxc_g_c(:) *zhs(:) *(pqsat_g(:)-pdqsat_g(:)*ztgo(:,1))*(1.0-ppsn(:)) &
680 + pflxc_n_c(:) *zhns *(pqsati_n(:)-pdqsati_n(:)*ztno(:,1))* &
681 ppsn(:)*(1.0-ppsna(:)) &
684 zcoefb_qc(:) = pflxc_v_c(:) *zhvs(:)*pdqsat_v(:) /zwork(:)
686 zcoefc_qc(:) = pflxc_g_c(:) *zhs(:) *pdqsat_g(:)*(1.0-ppsn(:)) /zwork(:)
688 zcoefd_qc(:) = pflxc_n_c(:) *zhns *pdqsati_n(:)* ppsn(:)*(1.0-ppsna(:))/zwork(:)
696 zwork(:) = 1/max(zertol, ppsn(:))
698 zrnet_nn(:) = (pswnet_n(:) + plwnet_n(:))*zwork(:)
699 zrnet_n_dtnn(:) = plwnet_n_dtn(:) *zwork(:)
700 zrnet_n_dtgn(:) = plwnet_n_dtg(:) *zwork(:)
701 zrnet_n_dtvn(:) = plwnet_n_dtv(:) *zwork(:)
706 zwork(:) = (pcheatv(:)/ptstep) - plwnet_v_dtv(:) &
707 + pflxc_v_c(:)*(pthrma_tv(:) - pthrma_tc(:)*zcoefb_tc(:) &
708 + xlvtt*zhvs(:)*(pdqsat_v(:) - zcoefb_qc(:)) )
710 zbeta_v(:) = ( (pcheatv(:)/ptstep)*ztvo(:) + plwnet_v(:) + pswnet_v(:) &
711 - plwnet_v_dtv(:)*ztvo(:) - plwnet_v_dtg(:)*ztgo(:,1) - plwnet_v_dtn(:)*ztno(:,1) &
712 - pflxc_v_c(:)*( pthrmb_tv(:)-pthrmb_tc(:)-pthrma_tc(:)*zcoefa_tc(:) &
713 + xlvtt*zhvs(:)*(pqsat_v(:) - pdqsat_v(:)*ztvo(:) &
714 - zcoefa_qc(:)) ) )/zwork(:)
716 zalpha_v(:) = (plwnet_v_dtg(:) + pflxc_v_c(:)*(pthrma_tc(:)*zcoefc_tc(:) &
717 + xlvtt*zhvs(:)*zcoefc_qc(:) ) )/zwork(:)
719 zgamma_v(:) = (plwnet_v_dtn(:) + pflxc_v_c(:)*(pthrma_tc(:)*zcoefd_tc(:) &
720 + xlvtt*zhvs(:)*zcoefd_qc(:) ) )/zwork(:)
724 zwork(:) = (pcheatg(:)/ptstep) - plwnet_g_dtg(:) &
725 + (1.0-ppsn(:))*pflxc_g_c(:)*( (pthrma_tg(:) - pthrma_tc(:)*zcoefc_tc(:)) &
726 + xlvtt*(zhs(:)*pdqsat_g(:) - zhn(:)*zcoefc_qc(:)) ) &
727 + ztconda_delz_g(:)*(1.0-zsoil_coef_a(:,2)) &
728 + ppsn(:)*ztconda_delz_ng(:)
730 zbeta_g(:) = ( (pcheatg(:)/ptstep)*ztgo(:,1) + plwnet_g(:) + pswnet_g(:) &
731 - plwnet_g_dtv(:)*ztvo(:) - plwnet_g_dtg(:)*ztgo(:,1) - plwnet_g_dtn(:)*ztno(:,1) &
732 - (1.0-ppsn(:))*pflxc_g_c(:)*( pthrmb_tg(:)-pthrmb_tc(:)-pthrma_tc(:)*zcoefa_tc(:) &
733 + xlvtt*(zhs(:)*(pqsat_g(:) - pdqsat_g(:)*ztgo(:,1)) &
734 - zhn(:)*zcoefa_qc(:)) ) &
735 + ztconda_delz_g(:)*zsoil_coef_b(:,2) &
736 + ppsn(:)*ztconda_delz_ng(:)*ztno(:,jnsnow) )/zwork(:)
738 zalpha_g(:) = (plwnet_g_dtv(:) + pflxc_g_c(:)*(1.0-ppsn(:))*( pthrma_tc(:)*zcoefb_tc(:) &
739 + xlvtt*zhn(:)*zcoefb_qc(:) ) )/zwork(:)
741 zgamma_g(:) = (plwnet_g_dtn(:) + pflxc_g_c(:)*(1.0-ppsn(:))*( pthrma_tc(:)*zcoefd_tc(:) &
742 + xlvtt*zhn(:)*zcoefd_qc(:) ) )/zwork(:)
746 zwork(:) = (pcheatn(:)/ptstep) - zrnet_n_dtnn(:) &
747 + pflxc_n_c(:)*(1.-ppsna(:))*( pthrma_tn(:) - pthrma_tc(:)*zcoefd_tc(:) &
748 + (xlvtt*zhns)*(pdqsati_n(:) - zcoefd_qc(:)) ) &
749 + pflxc_n_a(:)* ppsna(:)*( &
750 pthrma_tn(:) - pthrma_ta(:)*(zpet_a_coef_p(:)*zcoefd_tc(:) + zpet_c_coef_p(:)) &
751 + (xlvtt*zhns)*(pdqsati_n(:)*(1.0-zpeq_c_coef_p(:)) - zpeq_a_coef_p(:)*zcoefd_qc(:)) ) &
752 + ztconda_delz_n(:)*(1.0-zsnow_coef_a(:,2))
754 zbeta_n(:) = ( (pcheatn(:)/ptstep)*ztno(:,1) + zrnet_nn(:) + phpsnow(:) + pmeltadv(:) &
755 - zrnet_n_dtvn(:)*ztvo(:) - zrnet_n_dtgn(:)*ztgo(:,1) - zrnet_n_dtnn(:)*ztno(:,1) &
756 - pflxc_n_c(:)*(1.-ppsna(:))*( pthrmb_tn(:) - pthrmb_tc(:) - pthrma_tc(:)*zcoefa_tc(:) &
757 + (xlvtt*zhns)*(pqsati_n(:) - pdqsati_n(:)*ztno(:,1) &
759 - pflxc_n_a(:)*ppsna(:)*( pthrmb_tc(:) - pthrmb_ta(:) - &
760 pthrma_ta(:)*(zpet_b_coef_p(:) + zcoefa_tc(:)*zpet_a_coef_p(:)) &
761 + (xlvtt*zhns)*((pqsati_n(:) - pdqsati_n(:)*ztno(:,1))*(1.0-zpeq_c_coef_p(:)) &
762 - zpeq_b_coef_p(:) - zpeq_a_coef_p(:)*zcoefa_qc(:)) ) &
763 + ztconda_delz_n(:)*zsnow_coef_b(:,2) )/zwork(:)
765 zalpha_n(:) = ( zrnet_n_dtvn(:) + pflxc_n_c(:)*(1.-ppsna(:))*( pthrma_tc(:)*zcoefb_tc(:) &
766 + (xlvtt*zhns)*zcoefb_qc(:) ) &
767 + pflxc_n_a(:)* ppsna(:) *( pthrma_ta(:)*zcoefb_tc(:)*zpet_a_coef_p(:) &
768 + (xlvtt*zhns)*zcoefb_qc(:)*zpeq_a_coef_p(:) ) )/zwork(:)
770 zgamma_n(:) = ( zrnet_n_dtgn(:) + pflxc_n_c(:)*(1.-ppsna(:))*( pthrma_tc(:)*zcoefc_tc(:) &
771 + (xlvtt*zhns)*zcoefc_qc(:)) &
772 + pflxc_n_a(:)* ppsna(:) *( pthrma_ta(:)*zcoefc_tc(:)*zpet_a_coef_p(:) &
773 + (xlvtt*zhns)*zcoefc_qc(:)*zpeq_a_coef_p(:) ) )/zwork(:)
784 zwork(:) = 1.0 - zalpha_v(:)*zalpha_g(:)
785 zbeta_p_v(:) = (zbeta_v(:) + zalpha_v(:)*zbeta_g(:) )/zwork(:)
786 zalpha_p_v(:) = (zgamma_v(:) + zalpha_v(:)*zgamma_g(:))/zwork(:)
788 zwork(:) = 1.0 - zgamma_g(:)*zgamma_n(:)
789 zbeta_p_n(:) = (zbeta_n(:) + zgamma_n(:)*zbeta_g(:) )/zwork(:)
790 zalpha_p_n(:) = (zalpha_n(:) + zgamma_n(:)*zalpha_g(:))/zwork(:)
792 ptn(:,1) = (zbeta_p_n(:) + zalpha_p_n(:)*zbeta_p_v(:))/ &
793 (1.0 - zalpha_p_n(:)*zalpha_p_v(:) )
800 ptn(:,1) = min(xtt, ptn(:,1))
802 ptv(:) = zbeta_p_v(:) + zalpha_p_v(:)*ptn(:,1)
804 ptg(:,1) = zbeta_g(:) + zalpha_g(:)*ptv(:) + zgamma_g(:)*ptn(:,1)
806 ptc(:) = zcoefa_tc(:) + zcoefb_tc(:)*ptv(:) + zcoefc_tc(:)*ptg(:,1) + zcoefd_tc(:)*ptn(:,1)
808 pqc(:) = zcoefa_qc(:) + zcoefb_qc(:)*ptv(:) + zcoefc_qc(:)*ptg(:,1) + zcoefd_qc(:)*ptn(:,1)
812 pta_ic(:) = zpet_b_coef_p(:) + zpet_a_coef_p(:) *ptc(:) + zpet_c_coef_p(:) *ptn(:,1)
817 zwork(:) = zhns*( pqsati_n(:) + pdqsati_n(:)*(ptn(:,1) - ztno(:,1)) )
819 pqa_ic(:) = zpeq_b_coef_p(:) + zpeq_a_coef_p(:) *pqc(:) + zpeq_c_coef_p(:) *zwork(:)
827 ptg(:,1) = (zbeta_g(:) + zalpha_g(:)*zbeta_v(:))/ &
828 (1.0 - zalpha_g(:)*zalpha_v(:) )
830 ptv(:) = zbeta_v(:) + zalpha_v(:)*ptg(:,1)
832 ptc(:) = zcoefa_tc(:) + zcoefb_tc(:)*ptv(:) + zcoefc_tc(:)*ptg(:,1)
834 pqc(:) = zcoefa_qc(:) + zcoefb_qc(:)*ptv(:) + zcoefc_qc(:)*ptg(:,1)
838 pta_ic(:) = zpet_b_coef_p(:) + zpet_a_coef_p(:) *ptc(:)
842 pqa_ic(:) = zpeq_b_coef_p(:) + zpeq_a_coef_p(:) *pqc(:)
862 ptn(:,jk) = min(xtt,zt(:,jk))
872 IF(hisba ==
'DIF')
THEN
875 ptg(:,2) = zsoil_coef_b(:,2) + zsoil_coef_a(:,2)*ptg(:,1)
881 WHERE(ptdeep_b(:) == xundef)
884 zwork(:) = psoilcondz(:,jngrnd)*2/(pd_g(:,jngrnd)-pd_g(:,jngrnd-1))
885 pdeep_flux(:) = zwork(:)*(ptdeep_b(:) - ptg(:,jngrnd))/ &
886 (1. - zwork(:)*ptdeep_a(:))
895 pdeltat_g(:) = ptg(:,1) - ztgo(:,1)
896 pdeltat_v(:) = ptv(:) - ztvo(:)
897 pdeltat_n(:) = ptn(:,1) - ztno(:,1)
910 pgrndflux(:) = ppsn(:)*ztconda_delz_ng(:)*( ptn(:,jnsnow) - ptg(:,1) )
916 pdelheatg_sfc(:) = pcheatg(:)*pdeltat_g(:)/ptstep
917 pdelheatv_sfc(:) = pcheatv(:)*pdeltat_v(:)/ptstep
919 IF(hisba ==
'DIF')
THEN
923 prestore(:) = (ptg(:,1) - ptg(:,2))* 2/( ((pd_g(:,2)-pd_g(:,1))/psoilcondz(:,2)) + &
924 ( pd_g(:,1) /psoilcondz(:,1)) )
933 pdelheatg(:) = pdelheatg_sfc(:)
936 pdelheatg(jj) = pdelheatg(jj) + psoilhcapz(jj,jk)*(pd_g(jj,jk)-pd_g(jj,jk-1))* &
937 (ptg(jj,jk) - ztgo(jj,jk))/ptstep
948 prestore(:) = (2*xpi/xday)*(ptg(:,1) - ptg(:,2))/pct(:)
952 pdelheatg(:) = pdelheatg_sfc(:) + prestore(:)
963 IF (hcpsurf==
'DRY')
THEN
965 ELSEIF(.NOT.lcpl_arp)
THEN
966 pcps(:) = xcpd + ( xcpv - xcpd ) * pqc(:)
973 IF (lhook) CALL dr_hook(
'E_BUDGET_MEB',1,zhook_handle)
subroutine tridiag_ground_rm_soln(PSOLN, PA_COEF, PB_COEF)
subroutine e_budget_meb(HISBA, HCPSURF, PTSTEP, PPS, PCG, PCT, PCV, PWRVN, PWR, PTDEEP_A, PTDEEP_B, PD_G, PSOILCONDZ, PSOILHCAPZ, PSNOWDZ, PSNOWCONDZ, PSNOWHCAPZ, PSWNET_V, PSWNET_G, PSWNET_N, PTAU_N, PLWNET_V, PLWNET_G, PLWNET_N, PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN, PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN, PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PTHRMA_TA, PTHRMB_TA, PTHRMA_TC, PTHRMB_TC, PTHRMA_TG, PTHRMB_TG, PTHRMA_TV, PTHRMB_TV, PTHRMA_TN, PTHRMB_TN, PQSAT_G, PQSAT_V, PQSATI_N, PFF, PFFROZEN, PPSN, PPSNA, PPSNCV, PCHEATV, PCHEATG, PCHEATN, PLEG_DELTA, PLEGI_DELTA, PHUG, PHUGI, PHVG, PHVN, PFROZEN1, PFLXC_C_A, PFLXC_G_C, PFLXC_VG_C, PFLXC_VN_C, PFLXC_N_C, PFLXC_N_A, PFLXC_MOM, PTG, PTV, PTN, PFLXC_V_C, PHVGS, PHVNS, PDQSAT_G, PDQSAT_V, PDQSATI_N, PTC, PQC, PTA_IC, PQA_IC, PUSTAR2_IC, PVMOD, PDELTAT_G, PDELTAT_V, PDELTAT_N, PGRNDFLUX, PCPS, PLVTT, PLSTT, PHPSNOW, PMELTADV, PRESTORE, PDEEP_FLUX, PDELHEATV_SFC, PDELHEATG_SFC, PDELHEATG)
subroutine tridiag_ground_rm_coefs(PTSTEP, PDEPTH, PTEMP, PHEATCAP, PCONDTRM, PSOURCE, PTDEEP_A, PTDEEP_B, PCONDA_DELZ, PA_COEF, PB_COEF)