6 SUBROUTINE ch_bvocem_n (SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)
39 USE modi_vegtype_to_patch
48 USE modd_data_cover_par
, ONLY : nvegtype, nvt_tebd, nvt_bone, nvt_trbe, &
49 nvt_trbd, nvt_tebe, nvt_tene, nvt_bobd, &
50 nvt_bond, nvt_shrb, nvt_bogr, nvt_gras, &
51 nvt_trog, nvt_park, nvt_fltr, nvt_flgr, &
52 nvt_c3, nvt_c3w, nvt_c3s, nvt_c4, nvt_irr
64 TYPE(
sv_t),
INTENT(INOUT) :: SV
72 REAL,
DIMENSION(:,:),
INTENT(IN) :: PSW_FORBIO
73 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
74 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PSFTS
80 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: ZRAD_PAR, ZLCOR_RAD
83 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: ZFISO_FOR , ZFMONO_FOR, &
84 ZFISO_GRASS, ZFMONO_GRASS, &
85 ZFISO_CROP , ZFMONO_CROP
87 REAL,
DIMENSION(SIZE(PSW_FORBIO,1), NVEGTYPE) :: ZTCOR ,ZTCORM
89 REAL,
DIMENSION(SIZE(PSW_FORBIO,1),SIZE(S%XABC),NVEGTYPE) :: ZBVOCPAR
92 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: ZISOPOT, ZMONOPOT, ZRATIO
97 INTEGER:: JP, JSV, IMASK, JI
98 REAL(KIND=JPRB) :: ZHOOK_HANDLE
117 IF (io%CPHOTO/=
'NON')
THEN 118 kngauss =
SIZE(s%XABC)
123 zrad_par(:)= zrad_par(:) +(psw_forbio(:,jp)*s%XPATCH(:,jp) ) * xparcf * 4.7
129 CALL by_patch(nvt_tebd, ztcor(:,nvt_tebd), ztcorm(:,nvt_tebd))
130 CALL by_patch(nvt_bone, ztcor(:,nvt_bone), ztcorm(:,nvt_bone))
131 CALL by_patch(nvt_trbe, ztcor(:,nvt_trbe), ztcorm(:,nvt_trbe))
132 CALL by_patch(nvt_trbd, ztcor(:,nvt_trbd), ztcorm(:,nvt_trbd))
133 CALL by_patch(nvt_tebe, ztcor(:,nvt_tebe), ztcorm(:,nvt_tebe))
134 CALL by_patch(nvt_tene, ztcor(:,nvt_tene), ztcorm(:,nvt_tene))
135 CALL by_patch(nvt_bobd, ztcor(:,nvt_bobd), ztcorm(:,nvt_bobd))
136 CALL by_patch(nvt_bond, ztcor(:,nvt_bond), ztcorm(:,nvt_bond))
137 CALL by_patch(nvt_shrb, ztcor(:,nvt_shrb), ztcorm(:,nvt_shrb))
138 CALL by_patch(nvt_bogr, ztcor(:,nvt_bogr), ztcorm(:,nvt_bogr))
139 CALL by_patch(nvt_gras, ztcor(:,nvt_gras), ztcorm(:,nvt_gras))
140 CALL by_patch(nvt_trog, ztcor(:,nvt_trog), ztcorm(:,nvt_trog))
141 IF (nvt_park/=0)
THEN 142 CALL by_patch(nvt_park, ztcor(:,nvt_park), ztcorm(:,nvt_park))
143 ELSEIF (nvt_fltr/=0 .AND. nvt_flgr/=0)
THEN 144 CALL by_patch(nvt_fltr, ztcor(:,nvt_fltr), ztcorm(:,nvt_fltr))
145 CALL by_patch(nvt_flgr, ztcor(:,nvt_flgr), ztcorm(:,nvt_flgr))
148 CALL by_patch(nvt_c3 , ztcor(:,nvt_c3) , ztcorm(:,nvt_c3) )
149 ELSEIF (nvt_c3w/=0.AND.nvt_c3s/=0)
THEN 150 CALL by_patch(nvt_c3w , ztcor(:,nvt_c3w) , ztcorm(:,nvt_c3w) )
151 CALL by_patch(nvt_c3s , ztcor(:,nvt_c3s) , ztcorm(:,nvt_c3s) )
153 CALL by_patch(nvt_c4 , ztcor(:,nvt_c4) , ztcorm(:,nvt_c4) )
154 IF (nvt_irr/=0)
CALL by_patch(nvt_irr , ztcor(:,nvt_irr) , ztcorm(:,nvt_irr) )
157 zratio(:) = s%XVEGTYPE(:,nvt_tebd) + s%XVEGTYPE(:,nvt_bone) + s%XVEGTYPE(:,nvt_trbe) + &
158 s%XVEGTYPE(:,nvt_trbd) + s%XVEGTYPE(:,nvt_tebe) + s%XVEGTYPE(:,nvt_tene) + &
159 s%XVEGTYPE(:,nvt_bobd) + s%XVEGTYPE(:,nvt_bond) + s%XVEGTYPE(:,nvt_shrb)
161 WHERE (zratio(:)/=0.)
162 zisopot(:) = gb%XISOPOT (:) / zratio(:)
163 zmonopot(:) = gb%XMONOPOT(:) / zratio(:)
169 CALL by_veg9(nvt_tebd, nvt_bone, nvt_trbe, nvt_trbd, nvt_tebe, nvt_tene, nvt_bobd, &
170 nvt_bond, nvt_shrb, nvt_fltr, zisopot, zmonopot, zfiso_for, zfmono_for)
174 IF (nvt_park/=0)
THEN 175 CALL by_veg4(nvt_gras, nvt_trog, nvt_park, nvt_bogr, zisopot, zmonopot, zfiso_grass, zfmono_grass)
176 ELSEIF (nvt_flgr/=0)
THEN 177 CALL by_veg4(nvt_gras, nvt_trog, nvt_flgr, nvt_bogr, zisopot, zmonopot, zfiso_grass, zfmono_grass)
182 IF (nvt_c3/=0 .AND. nvt_irr/=0)
THEN 183 CALL by_veg3(nvt_c3, nvt_c4, nvt_irr, zisopot, zmonopot, zfiso_crop, zfmono_crop)
184 ELSEIF (nvt_c3w/=0 .AND. nvt_c3s/=0)
THEN 185 CALL by_veg3(nvt_c3w, nvt_c3s, nvt_c4, zisopot, zmonopot, zfiso_crop, zfmono_crop)
194 gb%XFISO (:)=(3.0012e-10/3600.) * ( zfiso_for(:) + zfiso_grass(:) + zfiso_crop(:) ) + 1e-17
196 gb%XFMONO(:)=(1.5006e-10/3600.) * ( zfmono_for(:) + zfmono_grass(:)+ zfmono_crop(:) ) + 1e-17
201 gb%XFMONO(:) = gb%XFMONO(:) *
xavogadro * prhoa(:) /
xmd 203 DO jsv=sv%NSV_CHSBEG,sv%NSV_CHSEND
204 IF (sv%CSV(jsv) ==
"BIO")
THEN 206 psfts(:,jsv) = psfts(:,jsv) + (gb%XFISO(:) + gb%XFMONO(:))
207 ELSE IF (sv%CSV(jsv) ==
"ISO" .OR. sv%CSV(jsv) ==
"ISOP")
THEN 209 psfts(:,jsv) = psfts(:,jsv) + gb%XFISO(:)
210 ELSE IF (sv%CSV(jsv) ==
"API" .OR. sv%CSV(jsv) ==
"LIM" .OR. &
211 sv%CSV(jsv) ==
"BIOL" .OR. sv%CSV(jsv) ==
"BIOH" )
THEN 214 psfts(:,jsv) = psfts(:,jsv) + 0.5 * gb%XFMONO(:)
222 SUBROUTINE by_patch(NVT_VEGTYPE,PTCOR,PTCORM)
226 INTEGER,
INTENT(IN) :: NVT_VEGTYPE
227 REAL,
DIMENSION(:),
INTENT(OUT) :: PTCOR
228 REAL,
DIMENSION(:),
INTENT(OUT) :: PTCORM
230 REAL,
DIMENSION(SIZE(PSW_FORBIO,1)) :: ZBVOCSG
231 REAL,
DIMENSION(SIZE(PSW_FORBIO,1),SIZE(S%XABC)) :: ZBVOCPAR
232 INTEGER:: IPATCH, JLAYER, IT
233 REAL(KIND=JPRB) :: ZHOOK_HANDLE
235 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_PATCH',0,zhook_handle)
243 DO it=1,
SIZE(npe%AL(ipatch)%XTG,1)
245 imask = np%AL(ipatch)%NR_P(it)
246 IF (npe%AL(ipatch)%XTG(it,1).LE.1000.)
THEN 248 ptcor(imask) =
ztcor0_func(npe%AL(ipatch)%XTG(it,1))
251 IF (io%CPHOTO/=
'NON')
THEN 252 zbvocpar(imask,:) = ngb%AL(ipatch)%XIACAN(it,:)*4.7
256 IF (io%CPHOTO/=
'NON')
THEN 260 zbvocsg(:) = zbvocsg(:) + s%XPOI(jlayer) *
zlcor_func(zbvocpar(:,jlayer))
262 ptcor(:) = ptcor(:) * zbvocsg(:)
264 ptcor(:) = ptcor(:) *
xcanfac * zlcor_rad(:)
267 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_PATCH',1,zhook_handle)
271 SUBROUTINE by_veg3(NVT_V1, NVT_V2, NVT_V3, &
272 PISOPOT, PMONOPOT, PFISO, PFMONO)
276 INTEGER,
INTENT(IN) :: NVT_V1
277 INTEGER,
INTENT(IN) :: NVT_V2
278 INTEGER,
INTENT(IN) :: NVT_V3
279 REAL,
DIMENSION(:),
INTENT(IN) :: PISOPOT
280 REAL,
DIMENSION(:),
INTENT(IN) :: PMONOPOT
281 REAL,
DIMENSION(:),
INTENT(OUT) :: PFISO
282 REAL,
DIMENSION(:),
INTENT(OUT) :: PFMONO
284 REAL(KIND=JPRB) :: ZHOOK_HANDLE
286 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG3',0,zhook_handle)
291 WHERE ( s%XVEGTYPE(:,nvt_v1) + s%XVEGTYPE(:,nvt_v2) + s%XVEGTYPE(:,nvt_v3) > 0. )
293 pfiso(:) = pisopot(:) * &
294 ( ztcor(:,nvt_v1) * s%XVEGTYPE(:,nvt_v1) &
295 +ztcor(:,nvt_v2) * s%XVEGTYPE(:,nvt_v2) &
296 +ztcor(:,nvt_v3) * s%XVEGTYPE(:,nvt_v3) )
298 pfmono(:) = pmonopot(:) * &
299 ( ztcorm(:,nvt_v1) * s%XVEGTYPE(:,nvt_v1) &
300 +ztcorm(:,nvt_v2) * s%XVEGTYPE(:,nvt_v2) &
301 +ztcorm(:,nvt_v3) * s%XVEGTYPE(:,nvt_v3) )
310 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG3',1,zhook_handle)
314 SUBROUTINE by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4,&
315 PISOPOT, PMONOPOT, PFISO, PFMONO)
319 INTEGER,
INTENT(IN) :: NVT_V1
320 INTEGER,
INTENT(IN) :: NVT_V2
321 INTEGER,
INTENT(IN) :: NVT_V3
322 INTEGER,
INTENT(IN) :: NVT_V4
323 REAL,
DIMENSION(:),
INTENT(IN) :: PISOPOT
324 REAL,
DIMENSION(:),
INTENT(IN) :: PMONOPOT
325 REAL,
DIMENSION(:),
INTENT(OUT) :: PFISO
326 REAL,
DIMENSION(:),
INTENT(OUT) :: PFMONO
328 REAL(KIND=JPRB) :: ZHOOK_HANDLE
330 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG4',0,zhook_handle)
335 WHERE ( s%XVEGTYPE(:,nvt_v1) + s%XVEGTYPE(:,nvt_v2) + s%XVEGTYPE(:,nvt_v3) &
336 +s%XVEGTYPE(:,nvt_v4) > 0. )
338 pfiso(:) = pisopot(:) * &
339 ( ztcor(:,nvt_v1) * s%XVEGTYPE(:,nvt_v1) &
340 +ztcor(:,nvt_v2) * s%XVEGTYPE(:,nvt_v2) &
341 +ztcor(:,nvt_v3) * s%XVEGTYPE(:,nvt_v3) &
342 +ztcor(:,nvt_v4) * s%XVEGTYPE(:,nvt_v4) )
344 pfmono(:) = pmonopot(:) * &
345 ( ztcorm(:,nvt_v1) * s%XVEGTYPE(:,nvt_v1) &
346 +ztcorm(:,nvt_v2) * s%XVEGTYPE(:,nvt_v2) &
347 +ztcorm(:,nvt_v3) * s%XVEGTYPE(:,nvt_v3) &
348 +ztcorm(:,nvt_v4) * s%XVEGTYPE(:,nvt_v4) )
357 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG4',1,zhook_handle)
361 SUBROUTINE by_veg9(NVT_V1, NVT_V2, NVT_V3, NVT_V4, NVT_V5, NVT_V6, &
362 NVT_V7, NVT_V8, NVT_V9, NVT_V10, PISOPOT, PMONOPOT, PFISO, PFMONO)
366 INTEGER,
INTENT(IN) :: NVT_V1
367 INTEGER,
INTENT(IN) :: NVT_V2
368 INTEGER,
INTENT(IN) :: NVT_V3
369 INTEGER,
INTENT(IN) :: NVT_V4
370 INTEGER,
INTENT(IN) :: NVT_V5
371 INTEGER,
INTENT(IN) :: NVT_V6
372 INTEGER,
INTENT(IN) :: NVT_V7
373 INTEGER,
INTENT(IN) :: NVT_V8
374 INTEGER,
INTENT(IN) :: NVT_V9
375 INTEGER,
INTENT(IN) :: NVT_V10
376 REAL,
DIMENSION(:),
INTENT(IN) :: PISOPOT
377 REAL,
DIMENSION(:),
INTENT(IN) :: PMONOPOT
378 REAL,
DIMENSION(:),
INTENT(OUT) :: PFISO
379 REAL,
DIMENSION(:),
INTENT(OUT) :: PFMONO
383 REAL(KIND=JPRB) :: ZHOOK_HANDLE
385 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG9',0,zhook_handle)
387 DO jj=1,
SIZE(ztcor,1)
389 zsum = s%XVEGTYPE(jj,nvt_v1) + s%XVEGTYPE(jj,nvt_v2) + s%XVEGTYPE(jj,nvt_v3) &
390 +s%XVEGTYPE(jj,nvt_v4) + s%XVEGTYPE(jj,nvt_v5) + s%XVEGTYPE(jj,nvt_v6) &
391 +s%XVEGTYPE(jj,nvt_v7) + s%XVEGTYPE(jj,nvt_v8) + s%XVEGTYPE(jj,nvt_v9)
392 IF (nvt_v10/=0) zsum = zsum + s%XVEGTYPE(jj,nvt_v10)
397 IF ( zsum > 0. )
THEN 399 pfiso(jj) = pisopot(jj) * &
400 ( ztcor(jj,nvt_v1) * s%XVEGTYPE(jj,nvt_v1) &
401 +ztcor(jj,nvt_v2) * s%XVEGTYPE(jj,nvt_v2) &
402 +ztcor(jj,nvt_v3) * s%XVEGTYPE(jj,nvt_v3) &
403 +ztcor(jj,nvt_v4) * s%XVEGTYPE(jj,nvt_v4) &
404 +ztcor(jj,nvt_v5) * s%XVEGTYPE(jj,nvt_v5) &
405 +ztcor(jj,nvt_v6) * s%XVEGTYPE(jj,nvt_v6) &
406 +ztcor(jj,nvt_v7) * s%XVEGTYPE(jj,nvt_v7) &
407 +ztcor(jj,nvt_v8) * s%XVEGTYPE(jj,nvt_v8) &
408 +ztcor(jj,nvt_v9) * s%XVEGTYPE(jj,nvt_v9) )
410 IF (nvt_v10/=0) pfiso(jj) = pfiso(jj) + pisopot(jj) * ztcor(jj,nvt_v10) * s%XVEGTYPE(jj,nvt_v10)
412 pfmono(jj) = pmonopot(jj) * &
413 ( ztcorm(jj,nvt_v1) * s%XVEGTYPE(jj,nvt_v1) &
414 +ztcorm(jj,nvt_v2) * s%XVEGTYPE(jj,nvt_v2) &
415 +ztcorm(jj,nvt_v3) * s%XVEGTYPE(jj,nvt_v3) &
416 +ztcorm(jj,nvt_v4) * s%XVEGTYPE(jj,nvt_v4) &
417 +ztcorm(jj,nvt_v5) * s%XVEGTYPE(jj,nvt_v5) &
418 +ztcorm(jj,nvt_v6) * s%XVEGTYPE(jj,nvt_v6) &
419 +ztcorm(jj,nvt_v7) * s%XVEGTYPE(jj,nvt_v7) &
420 +ztcorm(jj,nvt_v8) * s%XVEGTYPE(jj,nvt_v8) &
421 +ztcorm(jj,nvt_v9) * s%XVEGTYPE(jj,nvt_v9) )
423 IF (nvt_v10/=0) pfmono(jj) = pfmono(jj) + pmonopot(jj) * ztcorm(jj,nvt_v10) * s%XVEGTYPE(jj,nvt_v10)
434 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:BY_VEG9',1,zhook_handle)
440 REAL,
DIMENSION(:) :: ZX
441 REAL,
DIMENSION(SIZE(ZX)) :: ZLCOR_FUNC
442 REAL(KIND=JPRB) :: ZHOOK_HANDLE
444 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZLCOR_FUNC',0,zhook_handle)
447 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZLCOR_FUNC',1,zhook_handle)
453 REAL,
PARAMETER :: R = 8.314
456 REAL(KIND=JPRB) :: ZHOOK_HANDLE
458 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZTCOR0_FUNC',0,zhook_handle)
464 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZTCOR0_FUNC',1,zhook_handle)
471 REAL(KIND=JPRB) :: ZHOOK_HANDLE
474 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZTCORM0_FUNC',0,zhook_handle)
477 IF (
lhook)
CALL dr_hook(
'CH_BVOCEM_N:ZTCORM0_FUNC',1,zhook_handle)
real, parameter xisopot_grass
real, parameter xmonopot_grass
real function, dimension(size(zx)) zlcor_func(ZX)
subroutine by_veg3(NVT_V1, NVT_V2, NVT_V3, PISOPOT, PMONOPOT, PFISO, PFMONO)
real, parameter xmono_beta
subroutine by_patch(NVT_VEGTYPE, PTCOR, PTCORM)
integer function vegtype_to_patch(IVEGTYPE, INPATCH)
subroutine by_veg9(NVT_V1, NVT_V2, NVT_V3, NVT_V4, NVT_V5, NVT_V6, NVT_V7, NVT_V8, NVT_V9, NVT_V10, PISOPOT, PMONOPOT, PFISO, PFMONO)
real, parameter xmonopot_crop
real function ztcor0_func(ZX)
real, parameter xisopot_crop
real function ztcorm0_func(ZX)
subroutine by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4, PISOPOT, PMONOPOT, PFISO, PFMONO)
subroutine ch_bvocem_n(SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)