6 SUBROUTINE isba_ceb(HISBA, HSNOW_ISBA, HCPSURF, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, &
7 ptstep, psodelx, ppew_a_coef, ppew_b_coef, ppet_a_coef, &
8 ppeq_a_coef, ppet_b_coef, ppeq_b_coef, psnowalb, &
9 psw_rad, plw_rad, pwg, pwgi, pexns, pexna, pta, pvmod, &
10 pqa, prr, psr, pps, prs, pveg, pz0_with_snow, pz0eff, &
11 pz0h_with_snow, pwfc, pwsat, ppsn, ppsng, ppsnv, pzref, &
12 puref, pdircoszw, pf5, pffg, pffv, pff, pffg_nosnow, &
13 pffv_nosnow, pwr, prhoa, pemis, palb, pct, pcs, pcg, &
14 pd_g, pdzg, pdzdif, psoilcondz, psoilhcapz, pfrozen1, &
15 ptdeep_a, ptdeep_b, pgammat, ppsnv_a, psnowfree_alb_veg, &
16 psnowfree_alb_soil, pgrndflux, pflsn_cor, &
17 psnow_thrufal, pffrozen, pfalb, pfemis, psnowswe, psrsfc, &
18 ptg, presa, plvtt, plstt, pcps, pdelta, pch, pcd, pcdn, &
19 pri, phug, phugi, phv, phu, pqs, palbt, pemist, pdeep_flux, &
20 prn, ph, ple, pleg, plegi, plev, ples, pler, pletr, pevap, &
21 pgflux, pmeltadv, pmelt, prestore, pustar, ple_flood, &
22 plei_flood, psnowtemp, pac_agg, phu_agg )
72 USE yomhook
,ONLY : lhook, dr_hook
73 USE parkind1
,ONLY : jprb
83 CHARACTER(LEN=*),
INTENT(IN) :: hisba
87 CHARACTER(LEN=*),
INTENT(IN) :: hsnow_isba
91 CHARACTER(LEN=*),
INTENT(IN) :: hcpsurf
95 LOGICAL,
INTENT(IN) :: oflood
96 LOGICAL,
INTENT(IN) :: otemp_arp
99 CHARACTER(LEN=*),
INTENT(IN) :: himplicit_wind
103 REAL,
INTENT(IN) :: ptstep
105 REAL,
DIMENSION(:),
INTENT(IN) :: psodelx
107 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_a_coef, ppew_b_coef, &
108 ppet_a_coef, ppeq_a_coef, ppet_b_coef, &
117 REAL,
DIMENSION(:),
INTENT(IN) :: psnowalb
121 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwg, pwgi, pwfc, pwsat
127 REAL,
DIMENSION(:),
INTENT(IN) :: psw_rad, plw_rad
131 REAL,
DIMENSION(:),
INTENT(IN) :: pexna, pexns, pta, pvmod, pqa, prr, psr, pps
142 REAL,
DIMENSION(:),
INTENT(IN) :: prs, pveg
145 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn, ppsng, ppsnv
151 REAL,
DIMENSION(:),
INTENT(IN) :: pzref, puref
159 REAL,
DIMENSION(:),
INTENT(IN) :: pz0eff
160 REAL,
DIMENSION(:),
INTENT(IN) :: pz0_with_snow
162 REAL,
DIMENSION(:),
INTENT(IN) :: pz0h_with_snow
165 REAL,
DIMENSION(:),
INTENT(IN) :: pf5
167 REAL,
DIMENSION(:),
INTENT(IN) :: pdircoszw
170 REAL,
DIMENSION(:),
INTENT(IN) :: pffv, pff, pffg, pffg_nosnow, pffv_nosnow
175 REAL,
DIMENSION(:),
INTENT(IN) :: pwr, prhoa
179 REAL,
DIMENSION(:),
INTENT(IN) :: pemis, palb, pct, pcs, pcg
185 REAL,
DIMENSION(:),
INTENT(IN) :: pgrndflux, pflsn_cor, psnow_thrufal
192 REAL,
DIMENSION(:,:),
INTENT(IN) :: pd_g, psoilcondz, psoilhcapz
197 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzg
198 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzdif
200 REAL,
DIMENSION(:),
INTENT(IN) :: pfrozen1
203 REAL,
DIMENSION(:),
INTENT(IN) :: ptdeep_a, ptdeep_b, pgammat
220 REAL,
DIMENSION(:),
INTENT(IN) :: psnowfree_alb_veg
221 REAL,
DIMENSION(:),
INTENT(IN) :: psnowfree_alb_soil
222 REAL,
DIMENSION(:),
INTENT(IN) :: ppsnv_a
224 REAL,
DIMENSION(:),
INTENT(IN) :: pfalb, pfemis, pffrozen
228 REAL,
DIMENSION(:),
INTENT(IN) :: psnowswe
232 REAL,
DIMENSION(:),
INTENT(IN) :: psrsfc
237 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: ptg
239 REAL,
DIMENSION(:),
INTENT(INOUT) :: presa
241 REAL,
DIMENSION(:),
INTENT(INOUT) :: plvtt
243 REAL,
DIMENSION(:),
INTENT(INOUT) :: plstt
245 REAL,
DIMENSION(:),
INTENT(INOUT) :: pcps
247 REAL,
DIMENSION(:),
INTENT(INOUT) :: pdelta
253 REAL,
DIMENSION(:),
INTENT(OUT) :: pch, pcd, pcdn, pri
259 REAL,
DIMENSION(:),
INTENT(OUT) :: phug, phugi, phv, phu, pqs
266 REAL,
DIMENSION(:),
INTENT(OUT) :: palbt, pemist
270 REAL,
DIMENSION(:),
INTENT(OUT) :: pdeep_flux
272 REAL,
DIMENSION(:),
INTENT(OUT) :: prn, ph, ple, pleg, plev, ples
273 REAL,
DIMENSION(:),
INTENT(OUT) :: pler, pletr, pevap, pgflux, pmeltadv, pmelt, prestore
292 REAL,
DIMENSION(:),
INTENT(OUT) :: plegi, pustar
297 REAL,
DIMENSION(:),
INTENT(OUT) :: ple_flood, plei_flood
298 REAL,
DIMENSION(:),
INTENT(OUT) :: psnowtemp
300 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_agg
302 REAL,
DIMENSION(:),
INTENT(OUT) :: phu_agg
308 REAL,
PARAMETER :: zdepth_cor = 0.6
311 REAL,
PARAMETER :: zdtg1_cor = 10.0
317 REAL,
DIMENSION(SIZE(PTA)) :: zqsat
319 REAL,
DIMENSION(SIZE(PTA)) :: zdqsat
321 REAL,
DIMENSION(SIZE(PTA)) :: zta_ic, zqa_ic, zustar2_ic
324 REAL,
DIMENSION(SIZE(PTA)) :: zleg_delta
325 REAL,
DIMENSION(SIZE(PTA)) :: zlegi_delta
327 REAL,
DIMENSION(SIZE(PTA)) :: zt2m
328 REAL,
DIMENSION(SIZE(PTA)) :: ztsm
330 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: zflux_cor, zlayerhcap
333 REAL,
DIMENSION(SIZE(PTA)) :: zgrndflux, ztotalhcap, zwork
335 INTEGER :: ini, inl, ji, jl
336 LOGICAL :: lexplicit_snow
342 REAL,
DIMENSION(SIZE(PTA)) :: zdeep_flux, zle_flood, zlei_flood, &
343 zrn, zh, zle, zleg, zlev, &
344 zles, zler, zletr, zevap, &
345 zgflux, zmeltadv, zmelt, &
346 zrestore, zlegi, zustar2, &
349 REAL,
DIMENSION(SIZE(PTA)) :: zdeep_flux_sum, zle_flood_sum, zlei_flood_sum, &
350 zrn_sum, zh_sum, zle_sum, zleg_sum, zlev_sum, &
351 zles_sum, zler_sum, zletr_sum, zevap_sum, &
352 zgflux_sum, zmeltadv_sum, zmelt_sum, &
353 zrestore_sum, zlegi_sum, zustar2_sum, &
354 zac_agg_sum, zhu_agg_sum
356 REAL,
PARAMETER :: ztsplit = 300.
357 INTEGER :: itsplit, jsplit
358 REAL :: ztstep, znsplit
360 REAL(KIND=JPRB) :: zhook_handle
364 IF (lhook) CALL dr_hook(
'ISBA_CEB',0,zhook_handle)
379 zustar2_ic(:) = xundef
380 zleg_delta(:) = xundef
381 zlegi_delta(:) = xundef
384 zdeep_flux(:) = xundef
385 zle_flood(:) = xundef
386 zlei_flood(:) = xundef
418 zle_flood_sum(:) = 0.0
419 zlei_flood_sum(:) = 0.0
421 zdeep_flux_sum(:) = 0.0
422 zmeltadv_sum(:) = 0.0
424 zrestore_sum(:) = 0.0
430 zgrndflux(: ) = pgrndflux(:)
439 lexplicit_snow=(hsnow_isba ==
'3-L' .OR. hsnow_isba ==
'CRO')
441 IF(lexplicit_snow.AND.hisba/=
'DIF')
THEN
443 zflux_cor(:,1)=ppsn(:)*pflsn_cor(:)
445 ELSEIF(lexplicit_snow.AND.hisba==
'DIF')
THEN
447 zlayerhcap(:,:) = 0.0
454 zwork(:)=min(pd_g(:,inl),zdepth_cor)
456 zlayerhcap(:,1)= 1.0/pct(:)
457 ztotalhcap(: )= 1.0/pct(:)
460 zlayerhcap(ji,jl)=psoilhcapz(ji,jl)*min(pdzg(ji,jl),max(0.0,zwork(ji)-pd_g(ji,jl)+pdzg(ji,jl)))
461 ztotalhcap(ji )=ztotalhcap(ji)+zlayerhcap(ji,jl)
467 IF(ztotalhcap(ji)>0.0)
THEN
468 zflux_cor(ji,jl)=ppsn(ji)*pflsn_cor(ji)*zlayerhcap(ji,jl)/ztotalhcap(ji)
477 zwork(:)=ptstep*pct(:)*ppsn(:)*abs(pgrndflux(:))
479 WHERE(ztotalhcap(:)>0.0.AND.zwork(:)>=zdtg1_cor)
480 zgrndflux(:) = pgrndflux(:)*zlayerhcap(:,1)/ztotalhcap(:)
485 IF(ztotalhcap(ji)>0.0.AND.zwork(ji)>=zdtg1_cor)
THEN
486 zflux_cor(ji,jl)=zflux_cor(ji,jl)+ppsn(ji)*pgrndflux(ji) &
487 *zlayerhcap(ji,jl)/ztotalhcap(ji)
499 itsplit = max(1,nint(ptstep/ztsplit))
502 znsplit =
REAL(itsplit)
504 ztstep = ptstep/znsplit
524 CALL
drag(hisba, hsnow_isba, hcpsurf, ptstep, &
525 ptg(:,1), pwg(:,1), pwgi(:,1), pexns, pexna, pta, pvmod, pqa, prr, psr, &
526 pps, prs, pveg, pz0_with_snow, pz0eff, pz0h_with_snow, &
527 pwfc(:,1), pwsat(:,1), ppsng, ppsnv, pzref, puref, &
528 pdircoszw, pdelta, pf5, presa, pch, pcd, pcdn, pri, phug, phugi, &
529 phv, phu, pcps, pqs, pffg, pffv, pff, pffg_nosnow, pffv_nosnow, &
530 zleg_delta, zlegi_delta, pwr, prhoa, plvtt, pqsat=zqsat )
537 CALL
e_budget(hisba, hsnow_isba, oflood, otemp_arp, himplicit_wind, &
538 ztstep, psodelx, puref, &
539 ppew_a_coef, ppew_b_coef, ppet_a_coef, ppeq_a_coef, ppet_b_coef, &
540 ppeq_b_coef, pvmod, pcd, ptg, ztsm, zt2m, psnowalb, psw_rad, plw_rad, &
541 pta, pqa, pps, prhoa, pexns, pexna, pcps, plvtt, plstt, pveg, &
542 phug, phugi, phv, zleg_delta, zlegi_delta, pemis, palb, presa, &
543 pct, pcg, ppsn, ppsnv, ppsng, zgrndflux, zflux_cor, &
544 pd_g, pdzg, pdzdif, psoilcondz, psoilhcapz, palbt, pemist, &
545 zqsat, zdqsat, pfrozen1, ptdeep_a, ptdeep_b, pgammat, &
546 zta_ic, zqa_ic, zustar2_ic, &
547 psnowfree_alb_veg, ppsnv_a, psnowfree_alb_soil, &
548 pffg, pffv, pff, pffrozen, pfalb, pfemis, zdeep_flux, zrestore )
561 CALL
isba_fluxes(hisba, hsnow_isba, otemp_arp, ztstep, psodelx, &
562 psw_rad, plw_rad, zta_ic, zqa_ic, &
563 prhoa, pexns, pexna, pcps, plvtt, plstt, &
564 pveg, phug, phugi, phv, zleg_delta, zlegi_delta, pdelta, presa, &
565 pf5, prs, pcs, pcg, pct, psnowswe, ztsm, zt2m, &
566 ppsn, ppsnv, ppsng, pfrozen1, &
567 palbt, pemist, zqsat, zdqsat, psnow_thrufal, &
568 zrn, zh, zle, zleg, zlegi, zlev, zles, zler, zletr, zevap, zgflux, &
570 psoilcondz, pd_g, pdzg, ptg, &
571 psrsfc, ppsnv_a, pffg, pffv, pff, pffrozen, &
572 zle_flood, zlei_flood, psnowtemp )
581 zac_agg(:) = 1. / presa(:) / plvtt(:) &
582 * ( plvtt(:)* pveg(:) *(1.-ppsnv(:)) *phv(:) &
583 + plvtt(:)*(1.-pveg(:))*(1.-ppsng(:))*(1.-pfrozen1(:)) &
584 + plstt(:)*(1.-pveg(:))*(1.-ppsng(:))* pfrozen1(:) &
585 + plstt(:)* ppsn(:) )
587 WHERE(zac_agg(:)>0.0)
588 zhu_agg(:) = 1. / (presa(:) * zac_agg(:)) / plvtt(:) &
589 * ( plvtt(:)* pveg(:) *(1.-ppsnv(:)) *phv(:) &
590 + plvtt(:)*(1.-pveg(:))*(1.-ppsng(:))*(1.-pfrozen1(:))*phug(:) &
591 + plstt(:)*(1.-pveg(:))*(1.-ppsng(:))* pfrozen1(:) *phugi(:) &
592 + plstt(:)* ppsn(:) )
595 zustar2_sum(:) = zustar2_sum(:) + zustar2_ic(:)
597 zevap_sum(:) = zevap_sum(:) + zevap(:)
599 zrn_sum(:) = zrn_sum(:) + zrn(:)
600 zh_sum(:) = zh_sum(:) + zh(:)
601 zgflux_sum(:) = zgflux_sum(:) + zgflux(:)
602 zle_sum(:) = zle_sum(:) + zle(:)
604 zleg_sum(:) = zleg_sum(:) + zleg(:)
605 zlegi_sum(:) = zlegi_sum(:) + zlegi(:)
606 zlev_sum(:) = zlev_sum(:) + zlev(:)
607 zles_sum(:) = zles_sum(:) + zles(:)
608 zler_sum(:) = zler_sum(:) + zler(:)
609 zletr_sum(:) = zletr_sum(:) + zletr(:)
610 zle_flood_sum(:) = zle_flood_sum(:) + zle_flood(:)
611 zlei_flood_sum(:) = zlei_flood_sum(:) + zlei_flood(:)
613 zdeep_flux_sum(:) = zdeep_flux_sum(:) + zdeep_flux(:)
614 zmeltadv_sum(:) = zmeltadv_sum(:) + zmeltadv(:)
615 zmelt_sum(:) = zmelt_sum(:) + zmelt(:)
616 zrestore_sum(:) = zrestore_sum(:) + zrestore(:)
617 zac_agg_sum(:) = zac_agg_sum(:) + zac_agg(:)
618 zhu_agg_sum(:) = zhu_agg_sum(:) + zhu_agg(:)
624 pustar(:) = sqrt(zustar2_sum(:)/znsplit)
626 pevap(:) = zevap_sum(:) / znsplit
628 prn(:) = zrn_sum(:) / znsplit
629 ph(:) = zh_sum(:) / znsplit
630 pgflux(:) = zgflux_sum(:) / znsplit
631 ple(:) = zle_sum(:) / znsplit
633 pleg(:) = zleg_sum(:) / znsplit
634 plegi(:) = zlegi_sum(:) / znsplit
635 plev(:) = zlev_sum(:) / znsplit
636 ples(:) = zles_sum(:) / znsplit
637 pler(:) = zler_sum(:) / znsplit
638 pletr(:) = zletr_sum(:) / znsplit
639 ple_flood(:) = zle_flood_sum(:) / znsplit
640 plei_flood(:) = zlei_flood_sum(:) / znsplit
642 pdeep_flux(:) = zdeep_flux_sum(:) / znsplit
643 pmeltadv(:) = zmeltadv_sum(:) / znsplit
644 pmelt(:) = zmelt_sum(:) / znsplit
645 prestore(:) = zrestore_sum(:) / znsplit
646 pac_agg(:) = zac_agg_sum(:) / znsplit
647 phu_agg(:) = zhu_agg_sum(:) / znsplit
651 IF (lhook) CALL dr_hook(
'ISBA_CEB',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 isba_ceb(HISBA, HSNOW_ISBA, HCPSURF, OFLOOD, OTEMP_ARP, HIMPLICIT_WIND, PTSTEP, PSODELX, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PSNOWALB, PSW_RAD, PLW_RAD, PWG, PWGI, PEXNS, PEXNA, PTA, PVMOD, PQA, PRR, PSR, PPS, PRS, PVEG, PZ0_WITH_SNOW, PZ0EFF, PZ0H_WITH_SNOW, PWFC, PWSAT, PPSN, PPSNG, PPSNV, PZREF, PUREF, PDIRCOSZW, PF5, PFFG, PFFV, PFF, PFFG_NOSNOW, PFFV_NOSNOW, PWR, PRHOA, PEMIS, PALB, PCT, PCS, PCG, PD_G, PDZG, PDZDIF, PSOILCONDZ, PSOILHCAPZ, PFROZEN1, PTDEEP_A, PTDEEP_B, PGAMMAT, PPSNV_A, PSNOWFREE_ALB_VEG, PSNOWFREE_ALB_SOIL, PGRNDFLUX, PFLSN_COR, PSNOW_THRUFAL, PFFROZEN, PFALB, PFEMIS, PSNOWSWE, PSRSFC, PTG, PRESA, PLVTT, PLSTT, PCPS, PDELTA, PCH, PCD, PCDN, PRI, PHUG, PHUGI, PHV, PHU, PQS, PALBT, PEMIST, PDEEP_FLUX, PRN, PH, PLE, PLEG, PLEGI, PLEV, PLES, PLER, PLETR, PEVAP, PGFLUX, PMELTADV, PMELT, PRESTORE, PUSTAR, PLE_FLOOD, PLEI_FLOOD, PSNOWTEMP, PAC_AGG, PHU_AGG)
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)
subroutine drag(HISBA, HSNOW_ISBA, HCPSURF, PTSTEP, PTG, PWG, PWGI, PEXNS, PEXNA, PTA, PVMOD, PQA, PRR, PSR, PPS, PRS, PVEG, PZ0, PZ0EFF, PZ0H, PWFC, PWSAT, PPSNG, PPSNV, PZREF, PUREF, PDIRCOSZW, PDELTA, PF5, PRA, PCH, PCD, PCDN, PRI, PHUG, PHUGI, PHV, PHU, PCPS, PQS, PFFG, PFFV, PFF, PFFG_NOSNOW, PFFV_NOSNOW, PLEG_DELTA, PLEGI_DELTA, PWR, PRHOA, PLVTT, PQSAT)