7 PTSTEP, PLTT, PPS, PCT, PTDEEP_A, PD_G, PSOILCONDZ, &
8 PSOILHCAPZ, PSNOWRHO, PSNOWCONDZ, PSNOWHCAPZ, PTAU_N, &
9 PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN, &
10 PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN, &
11 PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN, &
12 PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, &
13 PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, &
14 PTHRMA_TA, PTHRMB_TA, PTHRMA_TC, PTHRMB_TC, &
15 PTHRMA_TG, PTHRMB_TG, PTHRMA_TV, PTHRMB_TV, &
16 PTHRMA_TN, PTHRMB_TN, PQSAT_G, PQSAT_V, &
17 PQSATI_N, PPSNA, PPSNCV, PCHEATV, PCHEATG, &
18 PCHEATN, PLEG_DELTA, PLEGI_DELTA, PHUGI, &
19 PHVG, PHVN, PFROZEN1, PFLXC_C_A, PFLXC_G_C, &
20 PFLXC_VG_C, PFLXC_VN_C, PFLXC_N_C, PFLXC_N_A,&
21 PFLXC_MOM, PTG, PSNOWLIQ, PFLXC_V_C, PHVGS, PHVNS, &
22 PDQSAT_G, PDQSAT_V, PDQSATI_N, PTA_IC, &
23 PQA_IC, PUSTAR2_IC, PVMOD, PDELTAT_G, &
24 PDELTAT_V, PDELTAT_N, PGRNDFLUX, PDEEP_FLUX, &
25 PDELHEATV_SFC, PDELHEATG_SFC, PDELHEATG )
105 USE modi_tridiag_ground_rm_coefs
106 USE modi_tridiag_ground_rm_soln
119 TYPE(
diag_t),
INTENT(INOUT) :: DK
123 REAL,
INTENT(IN) :: PTSTEP
126 REAL,
DIMENSION(:),
INTENT(IN) :: PCT
129 REAL,
DIMENSION(:),
INTENT(IN) :: PTDEEP_A
135 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
138 REAL,
DIMENSION(:,:),
INTENT(IN) :: PD_G, PSOILCONDZ, PSOILHCAPZ
143 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSNOWCONDZ, PSNOWHCAPZ, PSNOWRHO
148 REAL,
DIMENSION(:,:),
INTENT(IN) :: PTAU_N
155 REAL,
DIMENSION(:),
INTENT(IN) :: PLWNET_V_DTV, PLWNET_V_DTG, PLWNET_V_DTN
159 REAL,
DIMENSION(:),
INTENT(IN) :: PLWNET_G_DTV, PLWNET_G_DTG, PLWNET_G_DTN
163 REAL,
DIMENSION(:),
INTENT(IN) :: PLWNET_N_DTV, PLWNET_N_DTG, PLWNET_N_DTN
167 REAL,
DIMENSION(:),
INTENT(IN) :: PTHRMA_TA, PTHRMB_TA, PTHRMA_TC, PTHRMB_TC
182 REAL,
DIMENSION(:),
INTENT(IN) :: PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF
191 REAL,
DIMENSION(:),
INTENT(IN) :: PQSAT_G, PQSAT_V, PQSATI_N
196 REAL,
DIMENSION(:),
INTENT(IN) :: PPSNA, PPSNCV
201 REAL,
DIMENSION(:),
INTENT(IN) :: PLEG_DELTA, PLEGI_DELTA, PHUGI, PHVG
209 REAL,
DIMENSION(:),
INTENT(IN) :: PFLXC_C_A, PFLXC_G_C, PFLXC_VG_C, PFLXC_VN_C
219 REAL,
DIMENSION(:),
INTENT(IN) :: PLTT
222 REAL,
DIMENSION(:,:),
INTENT(INOUT):: PTG
225 REAL,
DIMENSION(:,:),
INTENT(INOUT):: PSNOWLIQ
228 REAL,
DIMENSION(:),
INTENT(OUT) :: PCHEATV, PCHEATG, PCHEATN
233 REAL,
DIMENSION(:),
INTENT(OUT) :: PDQSAT_G, PDQSAT_V, PDQSATI_N
241 REAL,
DIMENSION(:),
INTENT(OUT) :: PFLXC_V_C, PHVGS, PHVNS
249 REAL,
DIMENSION(:),
INTENT(OUT) :: PTA_IC, PQA_IC, PUSTAR2_IC, PVMOD
257 REAL,
DIMENSION(:),
INTENT(OUT) :: PDELTAT_V, PDELTAT_N, PDELTAT_G
262 REAL,
DIMENSION(:),
INTENT(OUT) :: PGRNDFLUX
265 REAL,
DIMENSION(:),
INTENT(OUT) :: PDEEP_FLUX
267 REAL,
DIMENSION(:),
INTENT(OUT) :: PDELHEATV_SFC, PDELHEATG_SFC, PDELHEATG
275 INTEGER :: JNSNOW, JNGRND, JNPTS, JJ, JK
277 REAL,
DIMENSION(SIZE(PPS)) :: ZHN, ZHS, ZHVS, ZHNS
279 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: ZTGO
281 REAL,
DIMENSION(SIZE(DMK%XSNOWTEMP,1),SIZE(DMK%XSNOWTEMP,2)) :: ZTNO
283 REAL,
DIMENSION(SIZE(PTG,1)) :: ZTVO
285 REAL,
DIMENSION(SIZE(PPS)) :: ZPSNAG, ZWORK, ZFFF, ZGCOND1
287 REAL,
DIMENSION(SIZE(PPS)) :: ZPET_A_COEF_P, ZPET_B_COEF_P
289 REAL,
DIMENSION(SIZE(PPS)) :: ZPEQ_A_COEF_P, ZPEQ_B_COEF_P
291 REAL,
DIMENSION(SIZE(PPS)) :: ZCOEFA_TC, ZCOEFB_TC, ZCOEFC_TC
294 REAL,
DIMENSION(SIZE(PPS)) :: ZBETA_V, ZALPHA_V, ZGAMMA_V
299 REAL,
DIMENSION(SIZE(PPS)) :: ZRNET_NN, ZRNET_N_DTNN, ZRNET_N_DTGN
301 REAL,
DIMENSION(SIZE(PPS)) :: ZVMOD, ZUSTAR2, ZPSNA
303 REAL,
DIMENSION(SIZE(PPS)) :: ZTCONDA_DELZ_G, ZTCONDA_DELZ_N
305 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: ZSOIL_COEF_A, ZSOIL_COEF_B
307 REAL,
DIMENSION(SIZE(DMK%XSNOWDZ,1),SIZE(DMK%XSNOWDZ,2)):: ZSNOW_COEF_A,
309 REAL,
DIMENSION(SIZE(DMK%XSNOWDZ,1),SIZE(DMK%XSNOWDZ,2)):: ZWHOLDMAX
311 REAL,
DIMENSION(SIZE(PD_G,1),SIZE(PD_G,2)+SIZE(DMK%XSNOWDZ,2)) :: ZD, ZT
314 REAL(KIND=JPRB) :: ZHOOK_HANDLE
317 REAL,
PARAMETER :: ZERTOL = 1.0e-6
318 REAL,
PARAMETER :: ZERTOL_FLX_C = 1.0e-12
328 ztno(:,:) = dmk%XSNOWTEMP(:,:)
334 zpsna(:) = min(1.0-zertol, ppsna(:))
336 jnsnow =
SIZE(dmk%XSNOWTEMP,2)
342 zsoil_coef_a(:,:) = 0.0
343 zsoil_coef_b(:,:) = 0.0
344 zsnow_coef_a(:,:) = 0.0
345 zsnow_coef_b(:,:) = 0.0
353 pcheatg(:) = 1/pct(:)
357 pcheatn(:) = psnowhcapz(:,1)*dmk%XSNOWDZ(:,1)
361 pdqsat_g(:) =
dqsat(ztgo(:,1), pps(:),pqsat_g(:) )
362 pdqsat_v(:) =
dqsat(ztvo(:), pps(:),pqsat_v(:) )
363 pdqsati_n(:) =
dqsati(ztno(:,1), pps(:),pqsati_n(:) )
389 dek%XMELTADV(:) = 0.0
393 zustar2(:) = (pflxc_mom(:)*ppew_b_coef(:))/ &
394 (1.0-pflxc_mom(:)*ppew_a_coef(:))
396 zvmod(:) = ppew_a_coef(:)*zustar2(:) + ppew_b_coef(:)
398 pvmod(:) = max(zvmod,0.)
400 WHERE (ppew_a_coef(:) /= 0.)
401 zustar2(:) = max(0., ( pvmod(:) - ppew_b_coef(:) ) / ppew_a_coef(:)
404 pustar2_ic(:)= zustar2(:)
410 IF(io%CISBA ==
'DIF')
THEN 434 zd(:,jl) = dmk%XSNOWDZ(:,1)
436 zhcapz(:,jl) = psnowhcapz(:,1)
437 zcondz(:,jl) = psnowcondz(:,1)
442 zd(jj,jl) = zd(jj,jl-1) + dmk%XSNOWDZ(jj,jk)
443 zt(jj,jl) = ztno(jj,jk)
444 zhcapz(jj,jl) = psnowhcapz(jj,jk)
445 zcondz(jj,jl) = psnowcondz(jj,jk)
446 zsource(jj,jl) = dek%XSWNET_NS(jj)*(ptau_n(jj,jk-1)-ptau_n(jj
452 zhcapz(:,jl) = pcheatg(:)/pd_g(:,1)
453 zcondz(:,jl) = psoilcondz(:,1)
454 zsource(:,jl) = dek%XSWNET_NS(:)*ptau_n(:,jnsnow)
458 zd(jj,jl) = pd_g(jj,jk)
459 zt(jj,jl) = ztgo(jj,jk)
460 zhcapz(jj,jl) = psoilhcapz(jj,jk)
461 zcondz(jj,jl) = psoilcondz(jj,jk)
471 zsnow_coef_a(:,2) = zcoef_a(:,2)
472 zsnow_coef_b(:,2) = zcoef_b(:,2)
474 zgcond1(:) = psoilcondz(:,1)
478 zsoil_coef_a(:,2) = (ptstep/
xday)/(1.0 + ptstep/
xday)
479 zsoil_coef_b(:,2) = ztgo(:,2) /(1.0 + ptstep/
xday)
481 ztconda_delz_g(:) = (2*
xpi/
xday)/pct(:)
488 zgcond1(:) = (4*
xpi/
xday)/( dmk%XCG(:)*dmk%XCG(:)/(pd_g(:,
500 zd(jj,jl) = zd(jj,jl-1) + dmk%XSNOWDZ(jj,jk)
501 zt(jj,jl) = ztno(jj,jk)
502 zhcapz(jj,jl) = psnowhcapz(jj,jk)
503 zcondz(jj,jl) = psnowcondz(jj,jk)
504 zsource(jj,jl) = dek%XSWNET_NS(jj)*(ptau_n(jj,jk-1)-ptau_n(jj,jk
510 zhcapz(:,jl) = 1/pct(:)
511 zcondz(:,jl) = zgcond1(:)
512 zsource(:,jl) = dek%XSWNET_NS(:)*ptau_n(:,jnsnow)
527 ztconda_delz_ng(:) = 2/((dmk%XSNOWDZ(:,jnsnow)/psnowcondz(:,jnsnow))+(pd_g
536 pflxc_v_c(:) = pflxc_vg_c(:)*(1.-pek%XPSN(:)) + pflxc_vn_c(:)*pek%XPSN
541 zfff(:) = kk%XFF(:)*( (1.0 - kk%XFFROZEN(:))*(
xlvtt/pltt(:)) +
554 zhn(:) = zhn(:)/max(1.0 - pek%XPSN(:) , zertol)
556 zhs(:) = zhs(:)/max(1.0 - pek%XPSN(:) , zertol)
560 phvgs(:) = (1.-zpsna(:))*pek%XPSN(:) *phvn(:)*(pflxc_vn_c(:)/pflxc_v_c
568 zhvs(:) = (1.-ppsncv(:))*(
xlvtt/pltt(:))*phvgs(:) + &
569 ppsncv(:) *(
xlstt/pltt(:))*phvns(:)
575 zhns = (
xlstt/pltt(:))
586 zpsnag(:) = 1.0 - pek%XPSN(:)*ppsna(:)
590 zwork(:) = pthrma_ta(:)*( 1.0 + ppet_a_coef(:)*(
600 zwork(:) = 1.0 + ppeq_a_coef(:)*(pflxc_c_a(:)*zpsnag(:) +
613 zwork(:) = pflxc_c_a(:) *(pthrma_tc(:)-pthrma_ta(:)*zpet_a_coef_p(:)
633 zwork(:) = pflxc_c_a(:) *(1.-zpeq_a_coef_p(:))*zpsnag(:)
658 zwork(:) = 1/max(zertol, pek%XPSN(:))
660 zrnet_nn(:) = (dek%XSWNET_NS(:) + dek%XLWNET_N(:))*zwork(:)
661 zrnet_n_dtnn(:) = plwnet_n_dtn(:) *zwork(:)
662 zrnet_n_dtgn(:) = plwnet_n_dtg(:) *zwork(:)
663 zrnet_n_dtvn(:) = plwnet_n_dtv(:) *zwork(:)
668 zwork(:) = (pcheatv(:)/ptstep) - plwnet_v_dtv(:)
686 zwork(:) = (pcheatg(:)/ptstep) - plwnet_g_dtg(:)
708 zwork(:) = (pcheatn(:)/ptstep) - zrnet_n_dtnn(:)
744 WHERE(pek%XPSN(:) > 0.0)
746 zwork(:) = 1.0 - zalpha_v(:)*zalpha_g(:)
747 zbeta_p_v(:) = (zbeta_v(:) + zalpha_v(:)*zbeta_g(:) )/zwork(:)
748 zalpha_p_v(:) = (zgamma_v(:) + zalpha_v(:)*zgamma_g(:))/zwork(:)
750 zwork(:) = 1.0 - zgamma_g(:)*zgamma_n(:)
751 zbeta_p_n(:) = (zbeta_n(:) + zgamma_n(:)*zbeta_g(:) )/zwork(:)
752 zalpha_p_n(:) = (zalpha_n(:) + zgamma_n(:)*zalpha_g(:))/zwork(:)
754 dmk%XSNOWTEMP(:,1) = (zbeta_p_n(:) + zalpha_p_n(:)*zbeta_p_v(:))
762 psnowliq(:,1) = psnowliq(:,1) + &
763 max(0., (dmk%XSNOWTEMP(:,1)-
xtt)*psnowhcapz(:,1)*dmk%XSNOWDZ
765 dmk%XSNOWTEMP(:,1) = min(
xtt, dmk%XSNOWTEMP(:,1))
767 pek%XTV(:) = zbeta_p_v(:) + zalpha_p_v(:)*dmk%XSNOWTEMP(:,1)
769 ptg(:,1) = zbeta_g(:) + zalpha_g(:)*pek%XTV(:) + zgamma_g(:)*dmk%XSNOWTEMP
777 pta_ic(:) = zpet_b_coef_p(:) + zpet_a_coef_p(:) *pek%XTC(:) + zpet_c_coef_p
782 zwork(:) = zhns(:)*( pqsati_n(:) + pdqsati_n(:)*(dmk%XSNOWTEMP(:
784 pqa_ic(:) = zpeq_b_coef_p(:) + zpeq_a_coef_p(:) *pek%XQC(:) + zpeq_c_coef_p
792 ptg(:,1) = (zbeta_g(:) + zalpha_g(:)*zbeta_v(:))/ &
793 (1.0 - zalpha_g(:)*zalpha_v(:) )
795 pek%XTV(:) = zbeta_v(:) + zalpha_v(:)*ptg(:,1)
797 pek%XTC(:) = zcoefa_tc(:) + zcoefb_tc(:)*pek%XTV(:) + zcoefc_tc
803 pta_ic(:) = zpet_b_coef_p(:) + zpet_a_coef_p(:) *pek%XTC(:)
807 pqa_ic(:) = zpeq_b_coef_p(:) + zpeq_a_coef_p(:) *pek%XQC(:)
811 dmk%XSNOWTEMP(:,1) =
xtt 834 IF(pek%XPSN(jj) > 0.0)
THEN 835 psnowliq(jj,jk) = psnowliq(jj,jk) + max(0., (zt(jj,jk)-
xtt)
837 dmk%XSNOWTEMP(jj,jk) = min(
xtt,zt(jj,jk))
846 zwholdmax(:,:) =
snow3lhold(psnowrho,dmk%XSNOWDZ)
847 zwork(:) = max(0., psnowliq(:,1)-zwholdmax(:,1))
848 psnowliq(:,1) = psnowliq(:,1) - zwork(:)
851 psnowliq(jj,jk) = psnowliq(jj,jk) + zwork(jj)
852 zwork(jj) = max(0., psnowliq(jj,jk)-zwholdmax(jj,jk))
853 psnowliq(jj,jk) = psnowliq(jj,jk) - zwork(jj)
856 psnowliq(:,:) = max(0.0, psnowliq(:,:))
863 IF(pek%XPSN(jj) > 0.0)
THEN 864 dmk%XSNOWTEMP(jj,jk) = dmk%XSNOWTEMP(jj,jk) + psnowliq(jj,jk)*(
xlmtt 866 zwork(jj) = max(0., (
xtt-dmk%XSNOWTEMP(jj,jk))*
868 psnowliq(jj,jk) = psnowliq(jj,jk) - zwork(jj)
869 dmk%XSNOWTEMP(jj,jk) = min(
xtt,dmk%XSNOWTEMP(jj,jk))
879 IF(io%CISBA ==
'DIF')
THEN 882 ptg(:,2) = zsoil_coef_b(:,2) + zsoil_coef_a(:,2)*ptg(:,1)
888 WHERE(kk%XTDEEP(:) ==
xundef)
891 zwork(:) = psoilcondz(:,jngrnd)*2/(pd_g(:,jngrnd)-pd_g(:,jngrnd-
892 pdeep_flux(:) = zwork(:)*(kk%XTDEEP(:) - ptg(:,jngrnd))/
902 pdeltat_g(:) = ptg(:,1) - ztgo(:,1)
903 pdeltat_v(:) = pek%XTV(:) - ztvo(:)
904 pdeltat_n(:) = dmk%XSNOWTEMP(:,1) - ztno(:,1)
917 pgrndflux(:) = pek%XPSN(:)*ztconda_delz_ng(:)*( dmk%XSNOWTEMP(:,jnsnow
923 pdelheatg_sfc(:) = pcheatg(:)*pdeltat_g(:)/ptstep
924 pdelheatv_sfc(:) = pcheatv(:)*pdeltat_v(:)/ptstep
926 IF(io%CISBA ==
'DIF')
THEN 930 dek%XRESTORE(:) = (ptg(:,1) - ptg(:,2))* 2/( ((pd_g(:,2)-pd_g(:,1))/psoilcondz
940 pdelheatg(:) = pdelheatg_sfc(:)
943 pdelheatg(jj) = pdelheatg(jj) + psoilhcapz(jj,jk)*(pd_g(jj,jk)
955 dek%XRESTORE(:) = (2*
xpi/
xday)*(ptg(:,1) - ptg(:,2))/pct(:)
959 pdelheatg(:) = pdelheatg_sfc(:) + dek%XRESTORE(:)
970 IF (io%CCPSURF==
'DRY')
THEN 979 pk%XLVTT(:) = pltt(:)
980 pk%XLSTT(:) = pltt(:)
subroutine tridiag_ground_rm_soln(PSOLN, PA_COEF, PB_COEF)
subroutine e_budget_meb(IO, KK, PK, PEK, DK, DEK, DMK, PTSTEP, PLTT, PPS, PCT, PTDEEP_A, PD_G, PS
subroutine tridiag_ground_rm_coefs(PTSTEP, PDEPTH, PTEMP, PHEATCAP, PCONDTRM, PSOURCE, PTDEEP_A, PTDEEP_B, PCONDA_DELZ, PA_COEF, PB_COEF)