7 psw_forbio,prhoa,psfts)
38 USE modi_vegtype_to_patch
48 nvt_trbd, nvt_tebe, nvt_tene, nvt_bobd, &
49 nvt_bond, nvt_shrb, nvt_bogr, nvt_gras, &
50 nvt_trog, nvt_park, nvt_c3, nvt_c4, &
60 USE yomhook
,ONLY : lhook, dr_hook
61 USE parkind1
,ONLY : jprb
68 TYPE(isba_t
),
INTENT(INOUT) :: i
70 REAL,
DIMENSION(:,:),
INTENT(IN) :: psw_forbio
71 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa
72 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: psfts
78 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: zrad_par, zlcor_rad
81 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: zfiso_for , zfmono_for, &
82 zfiso_grass, zfmono_grass, &
83 zfiso_crop , zfmono_crop
85 REAL,
DIMENSION(SIZE(PSW_FORBIO,1), NVEGTYPE) :: ztcor ,ztcorm
87 REAL,
DIMENSION(SIZE(PSW_FORBIO,1),SIZE(I%XABC),NVEGTYPE) :: zbvocpar
90 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: zisopot, zmonopot, zratio
96 REAL(KIND=JPRB) :: zhook_handle
100 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N',0,zhook_handle)
115 IF (i%CPHOTO/=
'NON')
THEN
116 kngauss =
SIZE(i%XABC)
120 DO jpatch = 1,i%NPATCH
121 zrad_par(:)= zrad_par(:) +(psw_forbio(:,jpatch)*i%XPATCH(:,jpatch) ) * xparcf * 4.7
127 CALL
by_patch(nvt_tebd, ztcor(:,nvt_tebd), ztcorm(:,nvt_tebd))
128 CALL
by_patch(nvt_bone, ztcor(:,nvt_bone), ztcorm(:,nvt_bone))
129 CALL
by_patch(nvt_trbe, ztcor(:,nvt_trbe), ztcorm(:,nvt_trbe))
130 CALL
by_patch(nvt_trbd, ztcor(:,nvt_trbd), ztcorm(:,nvt_trbd))
131 CALL
by_patch(nvt_tebe, ztcor(:,nvt_tebe), ztcorm(:,nvt_tebe))
132 CALL
by_patch(nvt_tene, ztcor(:,nvt_tene), ztcorm(:,nvt_tene))
133 CALL
by_patch(nvt_bobd, ztcor(:,nvt_bobd), ztcorm(:,nvt_bobd))
134 CALL
by_patch(nvt_bond, ztcor(:,nvt_bond), ztcorm(:,nvt_bond))
135 CALL
by_patch(nvt_shrb, ztcor(:,nvt_shrb), ztcorm(:,nvt_shrb))
136 CALL
by_patch(nvt_bogr, ztcor(:,nvt_bogr), ztcorm(:,nvt_bogr))
137 CALL
by_patch(nvt_gras, ztcor(:,nvt_gras), ztcorm(:,nvt_gras))
138 CALL
by_patch(nvt_trog, ztcor(:,nvt_trog), ztcorm(:,nvt_trog))
139 CALL
by_patch(nvt_park, ztcor(:,nvt_park), ztcorm(:,nvt_park))
140 CALL
by_patch(nvt_c3 , ztcor(:,nvt_c3) , ztcorm(:,nvt_c3) )
141 CALL
by_patch(nvt_c4 , ztcor(:,nvt_c4) , ztcorm(:,nvt_c4) )
142 CALL
by_patch(nvt_irr , ztcor(:,nvt_irr) , ztcorm(:,nvt_irr) )
145 zratio(:) = i%XVEGTYPE(:,nvt_tebd) + i%XVEGTYPE(:,nvt_bone) + i%XVEGTYPE(:,nvt_trbe) + &
146 i%XVEGTYPE(:,nvt_trbd) + i%XVEGTYPE(:,nvt_tebe) + i%XVEGTYPE(:,nvt_tene) + &
147 i%XVEGTYPE(:,nvt_bobd) + i%XVEGTYPE(:,nvt_bond) + i%XVEGTYPE(:,nvt_shrb)
149 WHERE (zratio(:)/=0.)
150 zisopot(:) = gb%XISOPOT (:) / zratio(:)
151 zmonopot(:) = gb%XMONOPOT(:) / zratio(:)
157 CALL
by_veg9(nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, nvt_tebe, nvt_tene, nvt_bobd, &
158 nvt_bond, nvt_shrb, zisopot, zmonopot, zfiso_for, zfmono_for)
160 zisopot(:) = xisopot_grass
161 zmonopot(:) = xmonopot_grass
162 CALL
by_veg4(nvt_gras, nvt_trog, nvt_park, nvt_bogr, zisopot, zmonopot, zfiso_grass, zfmono_grass)
164 zisopot(:) = xisopot_crop
165 zmonopot(:) = xmonopot_crop
166 CALL
by_veg3(nvt_c3, nvt_c4, nvt_irr, zisopot, zmonopot, zfiso_crop, zfmono_crop)
174 gb%XFISO (:)=(3.0012e-10/3600.) * ( zfiso_for(:) + zfiso_grass(:) + zfiso_crop(:) ) + 1e-17
176 gb%XFMONO(:)=(1.5006e-10/3600.) * ( zfmono_for(:) + zfmono_grass(:)+ zfmono_crop(:) ) + 1e-17
180 gb%XFISO(:) = gb%XFISO(:) * xavogadro * prhoa(:) / xmd
181 gb%XFMONO(:) = gb%XFMONO(:) * xavogadro * prhoa(:) / xmd
183 DO jsv=chi%SVI%NSV_CHSBEG,chi%SVI%NSV_CHSEND
184 IF (chi%SVI%CSV(jsv) ==
"BIO")
THEN
186 psfts(:,jsv) = psfts(:,jsv) + (gb%XFISO(:) + gb%XFMONO(:))
187 ELSE IF (chi%SVI%CSV(jsv) ==
"ISO" .OR. chi%SVI%CSV(jsv) ==
"ISOP")
THEN
189 psfts(:,jsv) = psfts(:,jsv) + gb%XFISO(:)
190 ELSE IF (chi%SVI%CSV(jsv) ==
"API" .OR. chi%SVI%CSV(jsv) ==
"LIM" .OR. &
191 chi%SVI%CSV(jsv) ==
"BIOL" .OR. chi%SVI%CSV(jsv) ==
"BIOH" )
THEN
194 psfts(:,jsv) = psfts(:,jsv) + 0.5 * gb%XFMONO(:)
199 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N',1,zhook_handle)
206 INTEGER,
INTENT(IN) :: nvt_vegtype
207 REAL,
DIMENSION(:),
INTENT(OUT) :: ptcor
208 REAL,
DIMENSION(:),
INTENT(OUT) :: ptcorm
210 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: zbvocsg
211 REAL,
DIMENSION(SIZE(PSW_FORBIO,1),SIZE(I%XABC)) :: zbvocpar
212 INTEGER:: ipatch, jlayer, it
213 REAL(KIND=JPRB) :: zhook_handle
215 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_PATCH',0,zhook_handle)
221 DO it=1,
SIZE(i%XTG,1)
222 IF (i%XTG(it,1,ipatch).LE.1000.)
THEN
228 IF (i%CPHOTO/=
'NON')
THEN
230 zbvocpar(:,:) = gb%XIACAN(:,:,ipatch)*4.7
234 zbvocsg(:) = zbvocsg(:) + i%XPOI(jlayer) *
zlcor_func(zbvocpar(:,jlayer))
236 ptcor(:) = ptcor(:) * zbvocsg(:)
238 ptcor(:) = ptcor(:) * xcanfac * zlcor_rad(:)
241 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_PATCH',1,zhook_handle)
246 pisopot, pmonopot, pfiso, pfmono)
250 INTEGER,
INTENT(IN) :: nvt_v1
251 INTEGER,
INTENT(IN) :: nvt_v2
252 INTEGER,
INTENT(IN) :: nvt_v3
253 REAL,
DIMENSION(:),
INTENT(IN) :: pisopot
254 REAL,
DIMENSION(:),
INTENT(IN) :: pmonopot
255 REAL,
DIMENSION(:),
INTENT(OUT) :: pfiso
256 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmono
258 REAL(KIND=JPRB) :: zhook_handle
260 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG3',0,zhook_handle)
265 WHERE ( i%XVEGTYPE(:,nvt_v1) + i%XVEGTYPE(:,nvt_v2) + i%XVEGTYPE(:,nvt_v3) > 0. )
267 pfiso(:) = pisopot(:) * &
268 ( ztcor(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
269 +ztcor(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
270 +ztcor(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) )
272 pfmono(:) = pmonopot(:) * &
273 ( ztcorm(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
274 +ztcorm(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
275 +ztcorm(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) )
284 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG3',1,zhook_handle)
288 SUBROUTINE by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4,&
289 pisopot, pmonopot, pfiso, pfmono)
293 INTEGER,
INTENT(IN) :: nvt_v1
294 INTEGER,
INTENT(IN) :: nvt_v2
295 INTEGER,
INTENT(IN) :: nvt_v3
296 INTEGER,
INTENT(IN) :: nvt_v4
297 REAL,
DIMENSION(:),
INTENT(IN) :: pisopot
298 REAL,
DIMENSION(:),
INTENT(IN) :: pmonopot
299 REAL,
DIMENSION(:),
INTENT(OUT) :: pfiso
300 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmono
302 REAL(KIND=JPRB) :: zhook_handle
304 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG4',0,zhook_handle)
309 WHERE ( i%XVEGTYPE(:,nvt_v1) + i%XVEGTYPE(:,nvt_v2) + i%XVEGTYPE(:,nvt_v3) &
310 +i%XVEGTYPE(:,nvt_v4) > 0. )
312 pfiso(:) = pisopot(:) * &
313 ( ztcor(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
314 +ztcor(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
315 +ztcor(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) &
316 +ztcor(:,nvt_v4) * i%XVEGTYPE(:,nvt_v4) )
318 pfmono(:) = pmonopot(:) * &
319 ( ztcorm(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
320 +ztcorm(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
321 +ztcorm(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) &
322 +ztcorm(:,nvt_v4) * i%XVEGTYPE(:,nvt_v4) )
331 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG4',1,zhook_handle)
335 SUBROUTINE by_veg9(NVT_V1, NVT_V2, NVT_V3, NVT_V4, NVT_V5, NVT_V6, &
336 nvt_v7, nvt_v8, nvt_v9, pisopot, pmonopot, pfiso, pfmono)
340 INTEGER,
INTENT(IN) :: nvt_v1
341 INTEGER,
INTENT(IN) :: nvt_v2
342 INTEGER,
INTENT(IN) :: nvt_v3
343 INTEGER,
INTENT(IN) :: nvt_v4
344 INTEGER,
INTENT(IN) :: nvt_v5
345 INTEGER,
INTENT(IN) :: nvt_v6
346 INTEGER,
INTENT(IN) :: nvt_v7
347 INTEGER,
INTENT(IN) :: nvt_v8
348 INTEGER,
INTENT(IN) :: nvt_v9
349 REAL,
DIMENSION(:),
INTENT(IN) :: pisopot
350 REAL,
DIMENSION(:),
INTENT(IN) :: pmonopot
351 REAL,
DIMENSION(:),
INTENT(OUT) :: pfiso
352 REAL,
DIMENSION(:),
INTENT(OUT) :: pfmono
354 REAL(KIND=JPRB) :: zhook_handle
356 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG9',0,zhook_handle)
361 WHERE ( i%XVEGTYPE(:,nvt_v1) + i%XVEGTYPE(:,nvt_v2) + i%XVEGTYPE(:,nvt_v3) &
362 +i%XVEGTYPE(:,nvt_v4) + i%XVEGTYPE(:,nvt_v5) + i%XVEGTYPE(:,nvt_v6) &
363 +i%XVEGTYPE(:,nvt_v7) + i%XVEGTYPE(:,nvt_v8) + i%XVEGTYPE(:,nvt_v9) > 0. )
365 pfiso(:) = pisopot(:) * &
366 ( ztcor(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
367 +ztcor(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
368 +ztcor(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) &
369 +ztcor(:,nvt_v4) * i%XVEGTYPE(:,nvt_v4) &
370 +ztcor(:,nvt_v5) * i%XVEGTYPE(:,nvt_v5) &
371 +ztcor(:,nvt_v6) * i%XVEGTYPE(:,nvt_v6) &
372 +ztcor(:,nvt_v7) * i%XVEGTYPE(:,nvt_v7) &
373 +ztcor(:,nvt_v8) * i%XVEGTYPE(:,nvt_v8) &
374 +ztcor(:,nvt_v9) * i%XVEGTYPE(:,nvt_v9) )
376 pfmono(:) = pmonopot(:) * &
377 ( ztcorm(:,nvt_v1) * i%XVEGTYPE(:,nvt_v1) &
378 +ztcorm(:,nvt_v2) * i%XVEGTYPE(:,nvt_v2) &
379 +ztcorm(:,nvt_v3) * i%XVEGTYPE(:,nvt_v3) &
380 +ztcorm(:,nvt_v4) * i%XVEGTYPE(:,nvt_v4) &
381 +ztcorm(:,nvt_v5) * i%XVEGTYPE(:,nvt_v5) &
382 +ztcorm(:,nvt_v6) * i%XVEGTYPE(:,nvt_v6) &
383 +ztcorm(:,nvt_v7) * i%XVEGTYPE(:,nvt_v7) &
384 +ztcorm(:,nvt_v8) * i%XVEGTYPE(:,nvt_v8) &
385 +ztcorm(:,nvt_v9) * i%XVEGTYPE(:,nvt_v9) )
394 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:BY_VEG9',1,zhook_handle)
400 REAL,
DIMENSION(:) :: zx
402 REAL(KIND=JPRB) :: zhook_handle
404 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZLCOR_FUNC',0,zhook_handle)
406 zlcor_func(:) = zx(:)*xiso_cl*xiso_alf/(1+(xiso_alf**2)*(zx(:)**2))**0.5
407 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZLCOR_FUNC',1,zhook_handle)
413 REAL,
PARAMETER :: r = 8.314
416 REAL(KIND=JPRB) :: zhook_handle
418 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZTCOR0_FUNC',0,zhook_handle)
421 ztcor0_func = exp(xiso_ct1*(zx-xiso_bts)/(r*xiso_bts*zx)) &
422 /(1+exp(xiso_ct2*(zx-xiso_btm)/(r*xiso_bts*zx)))
424 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZTCOR0_FUNC',1,zhook_handle)
431 REAL(KIND=JPRB) :: zhook_handle
434 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZTCORM0_FUNC',0,zhook_handle)
437 IF (lhook) CALL dr_hook(
'CH_BVOCEM_N:ZTCORM0_FUNC',1,zhook_handle)
real function, dimension(size(zx)) zlcor_func(ZX)
subroutine by_veg3(NVT_V1, NVT_V2, NVT_V3, PISOPOT, PMONOPOT, PFISO, PFMONO)
subroutine ch_bvocem_n(CHI, GB, I, PSW_FORBIO, PRHOA, PSFTS)
subroutine by_patch(NVT_VEGTYPE, PTCOR, PTCORM)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
real function ztcor0_func(ZX)
real function ztcorm0_func(ZX)
subroutine by_veg9(NVT_V1, NVT_V2, NVT_V3, NVT_V4, NVT_V5, NVT_V6, NVT_V7, NVT_V8, NVT_V9, PISOPOT, PMONOPOT, PFISO, PFMONO)
subroutine by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4, PISOPOT, PMONOPOT, PFISO, PFMONO)