7 pveg, plai, psand, pclay, presa, &
8 prs, pz0, pta, ppa, ptrad, pno, prock, &
9 hsv, psoilrc_so2, psoilrc_o3, pdep )
40 USE modd_ch_isba, ONLY : xrcclayso2, xrcclayo3, xrcsandso2, xrcsando3, &
41 xrcsnowso2, xrcsnowo3, xlandrext
46 USE yomhook
,ONLY : lhook, dr_hook
47 USE parkind1
,ONLY : jprb
53 REAL,
DIMENSION(:),
INTENT(IN) :: pustar
54 REAL,
DIMENSION(:),
INTENT(IN) :: phu
55 REAL,
DIMENSION(:),
INTENT(IN) :: ppsn
57 REAL,
DIMENSION(:),
INTENT(IN) :: prs
58 REAL,
DIMENSION(:),
INTENT(IN) :: pz0
59 REAL,
DIMENSION(:),
INTENT(IN) :: pveg
60 REAL,
DIMENSION(:),
INTENT(IN) :: plai
61 REAL,
DIMENSION(:,:),
INTENT(IN) :: psand
62 REAL,
DIMENSION(:,:),
INTENT(IN) :: pclay
63 REAL,
DIMENSION(:),
INTENT(IN) :: presa
64 REAL,
DIMENSION(:),
INTENT(IN) :: pta
65 REAL,
DIMENSION(:),
INTENT(IN) :: ppa
66 REAL,
DIMENSION(:),
INTENT(IN) :: ptrad
67 REAL,
DIMENSION(:),
INTENT(IN) :: psoilrc_so2
68 REAL,
DIMENSION(:),
INTENT(IN) :: psoilrc_o3
69 REAL,
DIMENSION(:,:),
INTENT(OUT) :: pdep
70 REAL,
DIMENSION(:),
INTENT(IN) :: pno, prock
71 CHARACTER(LEN=6),
DIMENSION(:),
INTENT(IN) :: hsv
76 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zdiffmolval
78 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zscmdt
80 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: znatrb
83 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zhenryvalcor
84 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zstomrc
86 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zmesorc
88 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zextrc
91 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zsoilrc
93 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: znatrc
95 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zsnowrc
97 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zclayrc
99 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zsandrc
101 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zbarerc
103 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zrockrc
106 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zres_vegtype
107 REAL ,
DIMENSION(SIZE(PTRAD,1),size(HSV,1)) :: zres_snowtype
110 REAL,
DIMENSION(SIZE(PTRAD,1)) :: ztype1_sand, ztype1_clay, ztype1_snow
111 REAL,
DIMENSION(SIZE(PTRAD,1)) :: zustar
112 REAL,
DIMENSION(SIZE(PTRAD,1)) :: zdiffmolh2o
114 REAL,
DIMENSION(SIZE(PTRAD,1)) :: zlandext
116 REAL,
DIMENSION(SIZE(PTRAD,1)) :: zincrc
118 REAL,
DIMENSION(SIZE(PTRAD,1)) :: zcoef1, zcoef2, zcoef3, zcoef4, zcoef5, zinv1, zinv2
119 REAL,
DIMENSION(SIZE(PTRAD,1)) :: ztcor
121 REAL,
DIMENSION(size(HSV,1)) :: zvar1, zvar2, zfact1
123 REAL :: ztype2_sand, ztype2_clay, ztype2_snow
127 REAL(KIND=JPRB) :: zhook_handle
136 IF (lhook) CALL dr_hook(
'CH_DEP_ISBA',0,zhook_handle)
141 IF (xrcclayo3.NE.xundef)
THEN
142 ztype2_clay = xrcclayo3
149 IF (xrcsando3.NE.xundef)
THEN
150 ztype2_sand = xrcsando3
157 IF (xrcsnowo3 /=xundef)
THEN
158 ztype2_snow = xrcsnowo3
163 DO ji = 1,
SIZE(pveg)
165 IF (xrcclayso2.NE.xundef)
THEN
166 ztype1_clay(ji) = xrcclayso2
168 ztype1_clay(ji) = 1000.
171 IF (xrcsandso2.NE.xundef)
THEN
172 ztype1_sand(ji) = xrcsandso2
174 ztype1_sand(ji) = 1000.
177 IF (xrcsnowso2/=xundef)
THEN
178 ztype1_snow(ji) = xrcsnowso2
179 ELSEIF (ptrad(ji) > 275.)
THEN
180 ztype1_snow(ji) = 540.
182 ztype1_snow(ji) = 70. * (275. - ptrad(ji))
186 zustar(ji) = max(pustar(ji), 1e-9)
188 zcoef5(ji) = 1./(xkarman*zustar(ji))
193 IF (pveg(ji) > 0.)
THEN
194 zincrc(ji) = 14. * plai(ji) * 4. * pz0(ji) / zustar(ji)
202 IF ( xlandrext.NE.xundef )
THEN
204 zlandext(ji) = xlandrext
205 ELSEIF (plai(ji) /= xundef)
THEN
207 zlandext(ji) = 6000. - 4000. * tanh( 1.6 * (plai(ji) - 1.6) )
213 zcoef1(ji) = 1./298. - 1./pta(ji)
215 zdiffmolh2o(ji) = 2.22e-05 + 1.46e-07 * (pta(ji) * (ppa(ji)/xp00)**(xrd/xcpd) - 273.)
216 zcoef2(ji) = prs(ji) * zdiffmolh2o(ji)
218 zcoef3(ji) = 1./zlandext(ji)
220 IF ( ptrad(ji) < 271.)
THEN
221 zcoef4(ji) = 1000. * exp(-ptrad(ji) + 269.)
226 ztcor(ji) = min(2.5e3, zcoef4(ji))
229 zinv1(ji) = 1.e-5/psoilrc_so2(ji)
231 zinv2(ji) = 1./psoilrc_o3(ji)
236 DO jsv = 1,
SIZE(hsv,1)
238 zvar1(jsv) = xsrealreactval(jsv) / 3000.
239 zvar2(jsv) = xsrealreactval(jsv) * 100.
241 zfact1(jsv) = 1.46e-07 * sqrt(18. / xsrealmassmolval(jsv))
247 DO jsv = 1,
SIZE(hsv,1)
257 zdiffmolval(ji,jsv) = 2.22e-05 + (pta(ji) - 273.0) * zfact1(jsv)
262 zscmdt(ji,jsv) = 0.15e-4 / zdiffmolval(ji,jsv)
263 znatrb(ji,jsv) = ((zscmdt(ji,jsv)/0.72)**(2./3.)) * zcoef5(ji)
265 IF (plai(ji)/=xundef) znatrb(ji,jsv) = 2. * znatrb(ji,jsv)
271 DO jsv = 1,
SIZE(hsv,1)
285 zhenryvalcor(ji,jsv) = xsrealhenryval(jsv,1) * exp(xsrealhenryval(jsv,2) * zcoef1(ji))
289 zstomrc(ji,jsv) = zcoef2(ji) / zdiffmolval(ji,jsv)
294 zmesorc(ji,jsv) = 1. / ( zhenryvalcor(ji,jsv)/3000. + zvar2(jsv) )
298 zstomrc(ji,jsv) = 9999.
300 zmesorc(ji,jsv) = 9999.
307 IF (phu(ji) >= 1.)
THEN
311 zextrc(ji,jsv) = 1./( zcoef3(ji) + 1.0e-7*zhenryvalcor(ji,jsv) + zvar1(jsv) )
313 ELSEIF ( prs(ji) > 0. )
THEN
315 zextrc(ji,jsv) = zlandext(ji) / ( 1.0e-5 * zhenryvalcor(ji,jsv) + xsrealreactval(jsv) )
319 zextrc(ji,jsv) = 9999.
331 zextrc(ji,jsv) = zextrc(ji,jsv) + zcoef4(ji)
337 DO jsv = 1,
SIZE(hsv,1)
344 zsoilrc(ji,jsv) = 1. / ( zhenryvalcor(ji,jsv)*zinv1(ji) + xsrealreactval(jsv)*zinv2(ji) )
346 IF ( zstomrc(ji,jsv)>0. .AND. zincrc(ji)>0. .AND. zextrc(ji,jsv)>0. )
THEN
351 znatrc(ji,jsv) = 1./ &
352 ( 1./(zstomrc(ji,jsv)+zmesorc(ji,jsv)) + 1./(zincrc(ji)+zsoilrc(ji,jsv)) + 1./zextrc(ji,jsv) )
355 znatrc(ji,jsv) = 1.e-4
364 zclayrc(ji,jsv) = ( 1.e5 * ztype1_clay(ji) * ztype2_clay ) / &
365 ( zhenryvalcor(ji,jsv)*ztype2_clay + ztype1_clay(ji)*1.e5*xsrealreactval(jsv) )
370 zsandrc(ji,jsv) = ( 1.e5 * ztype1_sand(ji) * ztype2_sand ) / &
371 ( zhenryvalcor(ji,jsv)*ztype2_sand + ztype1_sand(ji)*1.e5*xsrealreactval(jsv) )
376 zbarerc(ji,jsv) = 1./ ( psand(ji,1)/zsandrc(ji,jsv) + (1.-psand(ji,1))/zclayrc(ji,jsv) )
381 zbarerc(ji,jsv) = zbarerc(ji,jsv) + ztcor(ji)
386 zrockrc(ji,jsv) = ( 1.e5 * psoilrc_so2(ji) * psoilrc_o3(ji) ) / &
387 (zhenryvalcor(ji,jsv)*psoilrc_o3(ji) + psoilrc_so2(ji)*1.e5*xsrealreactval(jsv) )
392 zrockrc(ji,jsv) = zrockrc(ji,jsv) + ztcor(ji)
400 zsnowrc(ji,jsv) = ( 1.e5 * ztype1_snow(ji) * ztype2_snow ) / &
401 ( zhenryvalcor(ji,jsv)*ztype2_snow + ztype1_snow(ji)*1.e5*xsrealreactval(jsv) )
406 zsnowrc(ji,jsv) = zsnowrc(ji,jsv) + ztcor(ji)
412 IF ( prock(ji)>0. )
THEN
413 zbarerc(ji,jsv) = ( pno(ji)+prock(ji) )/( pno(ji)/zbarerc(ji,jsv) + prock(ji)/zrockrc(ji,jsv) )
417 znatrc(ji,jsv) = 1./ ( pveg(ji)/znatrc(ji,jsv) + (1.-pveg(ji))/zbarerc(ji,jsv) )
423 DO jsv = 1,
SIZE(hsv,1)
432 zres_vegtype(ji,jsv) = presa(ji) + znatrb(ji,jsv) + znatrc(ji,jsv)
433 zres_snowtype(ji,jsv) = presa(ji) + znatrb(ji,jsv) + zsnowrc(ji,jsv)
435 pdep(ji,jsv) = ( 1-ppsn(ji) )/zres_vegtype(ji,jsv) + ppsn(ji)/zres_snowtype(ji,jsv)
441 IF (lhook) CALL dr_hook(
'CH_DEP_ISBA',1,zhook_handle)
subroutine ch_dep_isba(PUSTAR, PHU, PPSN, PVEG, PLAI, PSAND, PCLAY, PRESA, PRS, PZ0, PTA, PPA, PTRAD, PNO, PROCK, HSV, PSOILRC_SO2, PSOILRC_O3, PDEP)