SURFEX v8.1
General documentation of Surfex
ch_bvocemn.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 !! ###############################
6  SUBROUTINE ch_bvocem_n (SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)
7 !! ###############################
8 !!
9 !!*** *BVOCEM*
10 !!
11 !! PURPOSE
12 !! -------
13 !! Calculate the biogenic emission fluxes according to the
14 !! subgrid vegetation given by the soil interface
15 !!
16 !! METHOD
17 !! ------
18 !!
19 !!
20 !! AUTHOR
21 !! ------
22 !! F. Solmon (LA) & V. Masson (CNRM)
23 !!
24 !! MODIFICATIONS
25 !! -------------
26 !! Original: 25/10/00
27 !! P. Tulet 30/07/03 externalisation of biogenics fluxes (2D => 1D)
28 !! R. Alkama 04/2012 add 7 new vegtype (19 instead 12)
29 !!
30 !! EXTERNAL
31 !! --------
32 !
33 USE modd_sv_n, ONLY : sv_t
34 !
38 !
39 USE modi_vegtype_to_patch
40 !!
41 !! IMPLICIT ARGUMENTS
42 !! ------------------
43 USE modd_bvoc_par
44 USE modd_csts,ONLY : xmd, xavogadro
45 USE modd_co2v_par
46 USE modd_surf_par,ONLY:xundef
47 USE modd_isba_par
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
53 !
54 USE yomhook ,ONLY : lhook, dr_hook
55 USE parkind1 ,ONLY : jprb
56 !
57 !------------------------------------------------------------------------------
58 !
59 !* 0. DECLARATIONS
60 ! -----------------
61 !
62 IMPLICIT NONE
63 !
64 TYPE(sv_t), INTENT(INOUT) :: SV
65 TYPE(gr_biog_np_t), INTENT(INOUT) :: NGB
66 TYPE(gr_biog_t), INTENT(INOUT) :: GB
67 TYPE(isba_options_t), INTENT(INOUT) :: IO
68 TYPE(isba_s_t), INTENT(INOUT) :: S
69 TYPE(isba_np_t), INTENT(INOUT) :: NP
70 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
71 !
72 REAL, DIMENSION(:,:), INTENT(IN) :: PSW_FORBIO
73 REAL, DIMENSION(:), INTENT(IN) :: PRHOA
74 REAL, DIMENSION(:,:), INTENT(INOUT) :: PSFTS
75 !
76 !* 0.1 declaration of arguments
77 !
78 !* 0.1 Declaration of local variables
79 !
80 REAL, DIMENSION(SIZE(PSW_FORBIO,1)) :: ZRAD_PAR, ZLCOR_RAD
81 ! PAR radiation in case of ISBA-STD use
82 !
83 REAL, DIMENSION(SIZE(PSW_FORBIO,1)) :: ZFISO_FOR , ZFMONO_FOR, &
84  ZFISO_GRASS, ZFMONO_GRASS, &
85  ZFISO_CROP , ZFMONO_CROP
86 ! Fluxes coming from different landuse
87 REAL, DIMENSION(SIZE(PSW_FORBIO,1), NVEGTYPE) :: ZTCOR ,ZTCORM
88 !
89 REAL, DIMENSION(SIZE(PSW_FORBIO,1),SIZE(S%XABC),NVEGTYPE) :: ZBVOCPAR
90 ! PAR at gauss level in micromolphot/m2/s
91 !
92 REAL, DIMENSION(SIZE(PSW_FORBIO,1)) :: ZISOPOT, ZMONOPOT, ZRATIO
93 !
94 INTEGER:: KNGAUSS
95 ! nbre of gauss level in integration
96 ! index of patch corresponding to forest(+ligneaous)
97 INTEGER:: JP, JSV, IMASK, JI
98 REAL(KIND=JPRB) :: ZHOOK_HANDLE
99 !
100 !------------------------------------------------------------------------------
101 !
102 IF (lhook) CALL dr_hook('CH_BVOCEM_N',0,zhook_handle)
103 !
104 !* 1. Contribution of forest and ligneous vegetation
105 ! from ISOPOT and MONOPOT maps
106 ! ------------------------------------------------
107 !
108 !* 1.0 Preliminary : patch index corresponding to forest
109 !
110 !2.Contribution of other types of vegetation than forest, consider the vegtype fraction in the pixel
111 !------------------------------------------------------------------------------------------
112 !
113 !* 2.0 Preliminary : patch index corresponding to grassland, crops (C3+C4)
114 !
115 !1.1.1 Using ISBA_Ags explicit light attenuation
116 ! number of g Gauss level for the integration
117 IF (io%CPHOTO/='NON') THEN
118  kngauss = SIZE(s%XABC)
119 ELSE
120  !1.1.2 using isba std version
121  zrad_par(:)= 0.
122  DO jp = 1,io%NPATCH
123  zrad_par(:)= zrad_par(:) +(psw_forbio(:,jp)*s%XPATCH(:,jp) ) * xparcf * 4.7
124  END DO
125  zlcor_rad(:) = zlcor_func(zrad_par(:))
126 ENDIF
127 !
128 !
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))
146 ENDIF
147 IF (nvt_c3/=0) THEN
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) )
152 ENDIF
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) )
155 !
156 !
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)
160 !
161 WHERE (zratio(:)/=0.)
162  zisopot(:) = gb%XISOPOT (:) / zratio(:)
163  zmonopot(:) = gb%XMONOPOT(:) / zratio(:)
164 ELSEWHERE
165  zisopot(:) = 0.
166  zmonopot(:) = 0.
167 END WHERE
168 !
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)
171 !
172 zisopot(:) = xisopot_grass
173 zmonopot(:) = xmonopot_grass
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)
178 ENDIF
179 !
180 zisopot(:) = xisopot_crop
181 zmonopot(:) = xmonopot_crop!
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)
186 ENDIF
187 !
188 !---------------------------------------------------------------------------------------
189 !
190 !3.Summation of different contribution for fluxes
191 !------------------------------------------------
192 !
193 !isoprene in ppp.m.s-1
194 gb%XFISO (:)=(3.0012e-10/3600.) * ( zfiso_for(:) + zfiso_grass(:) + zfiso_crop(:) ) + 1e-17
195 !monoterpenes
196 gb%XFMONO(:)=(1.5006e-10/3600.) * ( zfmono_for(:) + zfmono_grass(:)+ zfmono_crop(:) ) + 1e-17
197 !
198 ! conversion in molecules/m2/s
199 !
200 gb%XFISO(:) = gb%XFISO(:) * xavogadro * prhoa(:) / xmd
201 gb%XFMONO(:) = gb%XFMONO(:) * xavogadro * prhoa(:) / xmd
202 !
203 DO jsv=sv%NSV_CHSBEG,sv%NSV_CHSEND
204  IF (sv%CSV(jsv) == "BIO") THEN
205  ! RELACS CASE
206  psfts(:,jsv) = psfts(:,jsv) + (gb%XFISO(:) + gb%XFMONO(:))
207  ELSE IF (sv%CSV(jsv) == "ISO" .OR. sv%CSV(jsv) == "ISOP") THEN
208  ! RACM CASE
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
212  ! RACM CASE
213  ! CACM or RELACS 2 CASE
214  psfts(:,jsv) = psfts(:,jsv) + 0.5 * gb%XFMONO(:)
215  ENDIF
216 END DO
217 !
218 !**********************************************************************************
219 IF (lhook) CALL dr_hook('CH_BVOCEM_N',1,zhook_handle)
220 CONTAINS
221 !
222 SUBROUTINE by_patch(NVT_VEGTYPE,PTCOR,PTCORM)
223 !
224 IMPLICIT NONE
225 !
226 INTEGER, INTENT(IN) :: NVT_VEGTYPE
227 REAL, DIMENSION(:), INTENT(OUT) :: PTCOR
228 REAL, DIMENSION(:), INTENT(OUT) :: PTCORM
229 !
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
234 !
235 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_PATCH',0,zhook_handle)
236 !
237 ipatch = vegtype_to_patch(nvt_vegtype, io%NPATCH)
238 !
239 ptcor(:) = 0.
240 ptcorm(:) = 0.
241 zbvocpar(:,:) = 0.
242 !
243 DO it=1,SIZE(npe%AL(ipatch)%XTG,1)
244  !
245  imask = np%AL(ipatch)%NR_P(it)
246  IF (npe%AL(ipatch)%XTG(it,1).LE.1000.) THEN
247  ptcorm(imask) = ztcorm0_func(npe%AL(ipatch)%XTG(it,1))
248  ptcor(imask) = ztcor0_func(npe%AL(ipatch)%XTG(it,1))
249  ENDIF
250  !PAR over Forest canopies, in micro-molE.m-2.s-1
251  IF (io%CPHOTO/='NON') THEN
252  zbvocpar(imask,:) = ngb%AL(ipatch)%XIACAN(it,:)*4.7
253  ENDIF
254 ENDDO
255 !
256 IF (io%CPHOTO/='NON') THEN
257  !Calculation of radiative attenuation effect in the canopy on correction factor
258  zbvocsg(:) = 0.
259  DO jlayer=1,kngauss
260  zbvocsg(:) = zbvocsg(:) + s%XPOI(jlayer) * zlcor_func(zbvocpar(:,jlayer))
261  ENDDO
262  ptcor(:) = ptcor(:) * zbvocsg(:)
263 ELSE
264  ptcor(:) = ptcor(:) * xcanfac * zlcor_rad(:)
265 ENDIF
266 !
267 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_PATCH',1,zhook_handle)
268 !
269 END SUBROUTINE by_patch
270 !--------------------------------------------------------------------------
271 SUBROUTINE by_veg3(NVT_V1, NVT_V2, NVT_V3, &
272  PISOPOT, PMONOPOT, PFISO, PFMONO)
273 !
274 IMPLICIT NONE
275 !
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
283 !
284 REAL(KIND=JPRB) :: ZHOOK_HANDLE
285 !
286 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG3',0,zhook_handle)
287 !
288 !isoprene flux
289 !!
290 !! warning, XISOPOT external map accounts for the total forest fraction
291 WHERE ( s%XVEGTYPE(:,nvt_v1) + s%XVEGTYPE(:,nvt_v2) + s%XVEGTYPE(:,nvt_v3) > 0. )
292  !
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) )
297  !
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) )
302  !
303 ELSEWHERE
304  !
305  pfiso(:) = 0.
306  pfmono(:) = 0.
307  !
308 END WHERE
309 !
310 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG3',1,zhook_handle)
311 !
312 END SUBROUTINE by_veg3
313 !--------------------------------------------------------------------------
314 SUBROUTINE by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4,&
315  PISOPOT, PMONOPOT, PFISO, PFMONO)
316 !
317 IMPLICIT NONE
318 !
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
327 !
328 REAL(KIND=JPRB) :: ZHOOK_HANDLE
329 !
330 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG4',0,zhook_handle)
331 !
332 !isoprene flux
333 !!
334 !! warning, XISOPOT external map accounts for the total forest fraction
335 WHERE ( s%XVEGTYPE(:,nvt_v1) + s%XVEGTYPE(:,nvt_v2) + s%XVEGTYPE(:,nvt_v3) &
336  +s%XVEGTYPE(:,nvt_v4) > 0. )
337  !
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) )
343  !
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) )
349  !
350 ELSEWHERE
351  !
352  pfiso(:) = 0.
353  pfmono(:) = 0.
354  !
355 END WHERE
356 !
357 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG4',1,zhook_handle)
358 !
359 END SUBROUTINE by_veg4
360 !--------------------------------------------------------------------------
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)
363 !
364 IMPLICIT NONE
365 !
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
380 !
381 REAL :: ZSUM
382 INTEGER :: JJ
383 REAL(KIND=JPRB) :: ZHOOK_HANDLE
384 !
385 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG9',0,zhook_handle)
386 !
387 DO jj=1,SIZE(ztcor,1)
388  !
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)
393  !
394  !isoprene flux
395  !!
396  !! warning, XISOPOT external map accounts for the total forest fraction
397  IF ( zsum > 0. ) THEN
398  !
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) )
409  !
410  IF (nvt_v10/=0) pfiso(jj) = pfiso(jj) + pisopot(jj) * ztcor(jj,nvt_v10) * s%XVEGTYPE(jj,nvt_v10)
411  !
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) )
422  !
423  IF (nvt_v10/=0) pfmono(jj) = pfmono(jj) + pmonopot(jj) * ztcorm(jj,nvt_v10) * s%XVEGTYPE(jj,nvt_v10)
424  !
425  ELSE
426  !
427  pfiso(jj) = 0.
428  pfmono(jj) = 0.
429  !
430  ENDIF
431  !
432 ENDDO
433 !
434 IF (lhook) CALL dr_hook('CH_BVOCEM_N:BY_VEG9',1,zhook_handle)
435 !
436 END SUBROUTINE by_veg9
437 !--------------------------------------------------------------------------
438 FUNCTION zlcor_func(ZX)
440 REAL, DIMENSION(:) :: ZX
441 REAL, DIMENSION(SIZE(ZX)) :: ZLCOR_FUNC
442 REAL(KIND=JPRB) :: ZHOOK_HANDLE
443 !
444 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZLCOR_FUNC',0,zhook_handle)
445 zlcor_func(:)=0.
446 zlcor_func(:) = zx(:)*xiso_cl*xiso_alf/(1+(xiso_alf**2)*(zx(:)**2))**0.5
447 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZLCOR_FUNC',1,zhook_handle)
448 !
449 END FUNCTION zlcor_func
450 !---------------------------------------------------------------------------
451 FUNCTION ztcor0_func(ZX)
453 REAL, PARAMETER :: R = 8.314
454 REAL :: ZX
455 REAL :: ZTCOR0_FUNC
456 REAL(KIND=JPRB) :: ZHOOK_HANDLE
457 
458 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZTCOR0_FUNC',0,zhook_handle)
459 !
460 ztcor0_func=0.
461 ztcor0_func = exp(xiso_ct1*(zx-xiso_bts)/(r*xiso_bts*zx)) &
462  /(1+exp(xiso_ct2*(zx-xiso_btm)/(r*xiso_bts*zx)))
463  !
464 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZTCOR0_FUNC',1,zhook_handle)
465 END FUNCTION ztcor0_func
466 !---------------------------------------------------------------------------
467 FUNCTION ztcorm0_func(ZX)
469 REAL :: ZX
470 REAL :: ZTCORM0_FUNC
471 REAL(KIND=JPRB) :: ZHOOK_HANDLE
472 
473 !
474 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZTCORM0_FUNC',0,zhook_handle)
475 ztcorm0_func= 0.
476 ztcorm0_func = exp(xmono_beta*(zx-xmono_t3))
477 IF (lhook) CALL dr_hook('CH_BVOCEM_N:ZTCORM0_FUNC',1,zhook_handle)
478 !
479 END FUNCTION ztcorm0_func
480 !
481 !---------------------------------------------------------------------------
482 !
483 END SUBROUTINE ch_bvocem_n
real, parameter xisopot_grass
real, save xmd
Definition: modd_csts.F90:61
real, parameter xmonopot_grass
real function, dimension(size(zx)) zlcor_func(ZX)
Definition: ch_bvocemn.F90:439
subroutine by_veg3(NVT_V1, NVT_V2, NVT_V3, PISOPOT, PMONOPOT, PFISO, PFMONO)
Definition: ch_bvocemn.F90:273
real, parameter xmono_beta
subroutine by_patch(NVT_VEGTYPE, PTCOR, PTCORM)
Definition: ch_bvocemn.F90:223
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)
Definition: ch_bvocemn.F90:363
real, parameter xundef
real, parameter xiso_cl
real, parameter xmonopot_crop
integer, parameter jprb
Definition: parkind1.F90:32
real, parameter xiso_alf
real, parameter xiso_ct1
real, parameter xiso_bts
logical lhook
Definition: yomhook.F90:15
real function ztcor0_func(ZX)
Definition: ch_bvocemn.F90:452
real, parameter xisopot_crop
real, parameter xiso_ct2
real function ztcorm0_func(ZX)
Definition: ch_bvocemn.F90:468
real, parameter xcanfac
real, parameter xiso_btm
real, save xavogadro
Definition: modd_csts.F90:52
subroutine by_veg4(NVT_V1, NVT_V2, NVT_V3, NVT_V4, PISOPOT, PMONOPOT, PFISO, PFMONO)
Definition: ch_bvocemn.F90:316
real, parameter xmono_t3
subroutine ch_bvocem_n(SV, NGB, GB, IO, S, NP, NPE, PSW_FORBIO, PRHOA, PSFTS)
Definition: ch_bvocemn.F90:7