6 SUBROUTINE init_isba_sbl(IO, K, NP, NPE, SB, PTSTEP, PPA, PPS, PTA, PQA, PRHOA, PU, PV, &
7 PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, PZREF, PUREF, PSSO_SLOPE )
44 USE modi_isba_snow_frac
45 USE modi_wet_leaves_frac
63 REAL,
INTENT(IN) :: PTSTEP
64 REAL,
DIMENSION(:),
INTENT(IN) :: PPA
65 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
66 REAL,
DIMENSION(:),
INTENT(IN) :: PTA
67 REAL,
DIMENSION(:),
INTENT(IN) :: PQA
68 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
69 REAL,
DIMENSION(:),
INTENT(IN) :: PU
70 REAL,
DIMENSION(:),
INTENT(IN) :: PV
71 REAL,
DIMENSION(:,:),
INTENT(IN) :: PDIR_SW
73 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSCA_SW
75 REAL,
DIMENSION(:),
INTENT(IN) :: PSW_BANDS
76 REAL,
DIMENSION(:),
INTENT(IN) :: PSNOW
77 REAL,
DIMENSION(:),
INTENT(IN) :: PRAIN
78 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF
79 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
80 REAL,
DIMENSION(:),
INTENT(IN) :: PSSO_SLOPE
90 REAL,
DIMENSION(SIZE(PTA)) :: ZWIND
91 REAL,
DIMENSION(SIZE(PTA)) :: ZEXNA
92 REAL,
DIMENSION(SIZE(PTA)) :: ZQA
96 REAL,
DIMENSION(SIZE(PTA)) ::ZRI
97 REAL,
DIMENSION(SIZE(PTA)) ::ZCD
98 REAL,
DIMENSION(SIZE(PTA)) ::ZCDN
99 REAL,
DIMENSION(SIZE(PTA)) ::ZCH
100 REAL,
DIMENSION(SIZE(PTA)) ::ZTNM
101 REAL,
DIMENSION(SIZE(PTA)) ::ZQNM
102 REAL,
DIMENSION(SIZE(PTA)) ::ZHUNM
103 REAL,
DIMENSION(SIZE(PTA)) ::ZP_SLOPE_COS
104 REAL,
DIMENSION(SIZE(PTA)) ::ZZ0
105 REAL,
DIMENSION(SIZE(PTA)) ::ZZ0H
106 REAL,
DIMENSION(SIZE(PTA)) ::ZEXNS
107 REAL,
DIMENSION(SIZE(PTA)) ::ZTS
108 REAL,
DIMENSION(SIZE(PTA)) ::ZHU
109 REAL,
DIMENSION(SIZE(PTA)) ::ZQS
110 REAL,
DIMENSION(SIZE(PTA)) ::ZZ0EFF
111 REAL,
DIMENSION(SIZE(PTA)) ::ZWG
112 REAL,
DIMENSION(SIZE(PTA)) ::ZWGI
113 REAL,
DIMENSION(SIZE(PTA)) ::ZVEG
114 REAL,
DIMENSION(SIZE(PTA)) ::ZRESA
115 REAL,
DIMENSION(SIZE(PTA)) ::ZHUG
116 REAL,
DIMENSION(SIZE(PTA)) ::ZHUGI
117 REAL,
DIMENSION(SIZE(PTA)) ::ZHV
118 REAL,
DIMENSION(SIZE(PTA)) ::ZCPS
119 REAL,
DIMENSION(SIZE(PTA)) ::ZWRMAX_CF
120 REAL,
DIMENSION(SIZE(PTA)) ::ZWR
121 REAL,
DIMENSION(SIZE(PTA)) ::ZZ0_WITH_SNOW
122 REAL,
DIMENSION(SIZE(PTA)) ::ZPSNG
123 REAL,
DIMENSION(SIZE(PTA)) ::ZPSNV
124 REAL,
DIMENSION(SIZE(PTA)) ::ZPSNV_A
125 REAL,
DIMENSION(SIZE(PTA)) ::ZPSN
126 REAL,
DIMENSION(SIZE(PTA)) ::ZSNOWALB
127 REAL,
DIMENSION(SIZE(PTA)) ::ZFFG
128 REAL,
DIMENSION(SIZE(PTA)) ::ZFFGNOS
129 REAL,
DIMENSION(SIZE(PTA)) ::ZFFV
130 REAL,
DIMENSION(SIZE(PTA)) ::ZFFVNOS
131 REAL,
DIMENSION(SIZE(PTA)) ::ZFF
132 REAL,
DIMENSION(SIZE(PTA)) ::ZRS
133 REAL,
DIMENSION(SIZE(PTA)) ::ZP_GLOBAL_SW
134 REAL,
DIMENSION(SIZE(PTA)) ::ZF2
135 REAL,
DIMENSION(SIZE(PTA)) ::ZF5
136 REAL,
DIMENSION(SIZE(PTA)) ::ZLAI
137 REAL,
DIMENSION(SIZE(PTA)) ::ZGAMMA
138 REAL,
DIMENSION(SIZE(PTA)) ::ZRGL
139 REAL,
DIMENSION(SIZE(PTA)) ::ZRSMIN
140 REAL,
DIMENSION(SIZE(PTA)) ::ZDELTA
141 REAL,
DIMENSION(SIZE(PTA)) ::ZWRMAX
142 REAL,
DIMENSION(SIZE(PTA)) ::ZCLS_WIND_ZON
143 REAL,
DIMENSION(SIZE(PTA)) ::ZCLS_WIND_MER
144 REAL,
DIMENSION(SIZE(PTA)) ::ZSUM
145 REAL,
DIMENSION(SIZE(PTA)) :: ZLEG_DELTA
146 REAL,
DIMENSION(SIZE(PTA)) :: ZLEGI_DELTA
147 REAL,
DIMENSION(SIZE(PTA)) :: ZLVTT
149 REAL,
DIMENSION(:,:),
ALLOCATABLE ::ZSNOWSWE
150 REAL,
DIMENSION(:,:),
ALLOCATABLE ::ZSNOWRHO
151 REAL,
DIMENSION(:,:),
ALLOCATABLE ::ZSUM_LAYER
154 INTEGER :: JL, JI, JP, IMASK
155 INTEGER :: ISNOW_LAYER
157 REAL,
DIMENSION(SIZE(PTA),IO%NPATCH) ::ZWSNOW
158 REAL(KIND=JPRB) :: ZHOOK_HANDLE
185 zts(imask) = zts(imask) + pek%XTG (ji,1) * pk%XPATCH(ji)
186 zwg(imask) = zwg(imask) + pek%XWG (ji,1) * pk%XPATCH(ji)
187 zwgi(imask) = zwgi(imask) + pek%XWGI(ji,1) * pk%XPATCH(ji)
188 zz0(imask) = zz0(imask) + pek%XZ0(ji) * pk%XPATCH(ji)
190 zz0h(imask) = zz0h(imask) + pk%XPATCH(ji) * pek%XZ0 (ji) / pk%XZ0_O_Z0H(ji)
191 zveg(imask) = zveg(imask) + pk%XPATCH(ji) * pek%XVEG(ji)
193 zresa(imask) = zresa(imask) + pk%XPATCH(ji) * pek%XRESA(ji)
195 zrgl(imask) = zrgl(imask) + pk%XPATCH(ji) * pek%XRGL (ji)
196 zrsmin(imask) = zrsmin(imask) + pk%XPATCH(ji) * pek%XRSMIN(ji)
197 zgamma(imask) = zgamma(imask) + pk%XPATCH(ji) * pek%XGAMMA(ji)
204 zz0_with_snow(:) = zz0(:)
218 IF (zveg(ji)>0.)
THEN 219 zlai(imask) = zlai(imask) + pk%XPATCH(ji) * pek%XVEG(ji) * pek%XLAI(ji)
220 zwrmax_cf(imask) = zwrmax_cf(imask) + pk%XPATCH(ji) * pek%XVEG(ji) * pek%XWRMAX_CF(ji)
221 zwr(imask) = zwr(imask) + pk%XPATCH(ji) * pek%XVEG(ji) * pek%XWR(ji)
223 zlai(imask) = pek%XLAI (ji)
224 zwrmax_cf(imask) = pek%XWRMAX_CF(ji)
225 zwr(imask) = pek%XWR (ji)
232 zlai(:)= zlai(:) / zveg(:)
233 zwrmax_cf(:)= zwrmax_cf(:) / zveg(:)
234 zwr(:)= zwr(:) / zveg(:)
238 isnow_layer = npe%AL(1)%TSNOW%NLAYER
239 ALLOCATE(zsnowswe(
SIZE(pta),isnow_layer))
240 ALLOCATE(zsum_layer(
SIZE(pta),isnow_layer))
241 ALLOCATE(zsnowrho(
SIZE(pta),isnow_layer))
255 IF (pek%TSNOW%WSNOW(ji,jl)>0.)
THEN 256 zsnowswe(imask,jl) = zsnowswe(imask,jl) + pk%XPATCH(ji) * pek%TSNOW%WSNOW(ji,jl)
257 zsum_layer(imask,jl) = zsum_layer(imask,jl) + pk%XPATCH(ji)
270 IF (zsum_layer(imask,jl)>0.)
THEN 271 zsnowrho(imask,jl) = zsnowrho(imask,jl) + pk%XPATCH(ji) * pek%TSNOW%RHO(ji,jl)
273 zsnowrho(imask,jl) = pek%TSNOW%RHO(ji,jl)
281 WHERE (zsnowswe(:,:)==0.) zsnowrho(:,:) =
xundef 282 WHERE (zsum_layer(:,:)>0.)
283 zsnowrho(:,:) = zsnowrho(:,:) / zsum_layer(:,:)
286 zsum(:)=
sum(zsum_layer(:,:),dim=2)
287 DEALLOCATE(zsum_layer)
290 DO jl = 1,isnow_layer
298 zwsnow(imask,jp) = zwsnow(imask,jp) + pek%TSNOW%WSNOW(ji,jl)
313 IF (zsum(imask)>0.)
THEN 314 IF (zwsnow(imask,jp)>0.)
THEN 315 zsnowalb(imask) = zsnowalb(imask) + pk%XPATCH(ji) * pek%TSNOW%ALB(ji)
318 zsnowalb(imask) = pek%TSNOW%ALB(ji)
325 zsnowalb(:) = zsnowalb(:) / zsum(:)
331 zqa(:) = pqa(:) / prhoa(:)
332 zwind(:) = sqrt(pu**2+pv**2)
335 CALL isba_snow_frac(pek%TSNOW%SCHEME, zsnowswe, zsnowrho, zsnowalb, &
336 zveg, zlai, zz0, zpsn, zpsnv_a, zpsng, zpsnv )
338 DEALLOCATE(zsnowswe, zsnowrho)
342 DO jswb=1,
SIZE(psw_bands)
343 zp_global_sw(:) = zp_global_sw(:) + (pdir_sw(:,jswb) + psca_sw(:,jswb))
349 CALL veg(zp_global_sw, pta, zqa, pps, zrgl, zlai, zrsmin, zgamma, zf2, zrs)
351 CALL wet_leaves_frac(zwr, zveg, zwrmax_cf, zz0_with_snow, zlai, zwrmax, zdelta)
363 zp_slope_cos(:) = 1./sqrt(1.+psso_slope(:)**2)
364 IF (
lnosof) zp_slope_cos(:) = 1.0
367 CALL drag(io%CISBA, pek%TSNOW%SCHEME, io%CCPSURF, ptstep, zts, zwg, zwgi, &
368 zexns, zexna, pta, zwind, zqa, prain, psnow, pps, zrs, zveg, &
369 zz0, zz0eff, zz0h, k%XWFC(:,1), k%XWSAT(:,1), zpsng, zpsnv, &
370 pzref, puref, zp_slope_cos, zdelta, zf5, zresa, zch, zcd, zcdn, &
371 zri, zhug, zhugi, zhv, zhu, zcps, zqs, zffg, zffv, zff, zffgnos,&
372 zffvnos, zleg_delta, zlegi_delta, zwr, prhoa, zlvtt )
377 CALL cls_tq(pta, zqa, ppa, pps, pzref, zcd, zch, zri, zts, zhu, zz0h, &
378 sb%XZ(:,jl), ztnm, zqnm, zhunm )
383 CALL cls_wind(pu, pv, puref, zcd, zcdn, zri, sb%XZ(:,jl), &
384 zcls_wind_zon, zcls_wind_mer )
386 sb%XU (:,jl) = sqrt( zcls_wind_zon(:)**2 + zcls_wind_mer(:)**2 )
387 sb%XTKE (:,jl) =
xalpsbl * zcd(:) * ( pu(:)**2 + pv(:)**2 )
388 sb%XP (:,jl) = ppa(:) +
xg * prhoa(:) * (sb%XZ(:,sb%NLVL) - sb%XZ(:,jl))
subroutine init_isba_sbl(IO, K, NP, NPE, SB, PTSTEP, PPA, PPS, PTA, PQA, PRHOA, PU, PV, PDIR_SW, PSCA_SW, PSW_BANDS, PRAIN, PSNOW, PZREF, PUREF, PSSO_SLOPE)
subroutine cls_wind(PZONA, PMERA, PHW, PCD, PCDN, PRI, PHV, PZON10M, PMER10M)
subroutine isba_snow_frac(HSNOW, PWSNOW, PRSNOW, PASNOW, PVEG, PLAI, PZ0, PPSN, PPSNV_A, PPSNG, P
subroutine wet_leaves_frac(PWRM, PVEG, PWRMAX_CF, PZ0, PLAI, PWRMAX, PDELTA)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
subroutine veg(PSW_RAD, PTA, PQA, PPS, PRGL, PLAI, PRSMIN, PGAMMA, PF2, PRS)
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)
subroutine cls_tq(PTA, PQA, PPA, PPS, PHT, PCD, PCH, PRI, PTS, PHU, PZ0H, PH, PTNM, PQNM, PHUNM)