6 SUBROUTINE cotwores(PTSTEP, IO, OSHADE, PK, PEK, PDMAX, PPOI, PCSP, &
7 PTG, PF2, PSW_RAD, PQA, PQSAT, PPSNV, PDELTA, PRHOA, &
8 PZENITH, PFFV, PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN, &
9 PIACAN, PABC, PRS, PGPP, PRESP_LEAF )
81 USE modd_isba_par
, ONLY : xrs_max, xdenom_min
82 USE modd_co2v_par
, ONLY : xparcf, xmco2, &
83 xdmaxx, xdmaxn, xaw, xbw, xasw
84 USE modd_data_cover_par
, ONLY : nvt_tebd, nvt_trbe, nvt_bone, &
85 nvt_trbd, nvt_tebe, nvt_tene, &
86 nvt_bobd, nvt_bond, nvt_shrb
104 REAL,
INTENT(IN) :: PTSTEP
110 LOGICAL,
DIMENSION(:),
INTENT(IN) :: OSHADE
112 REAL,
DIMENSION(:),
INTENT(IN) :: PPOI
114 REAL,
DIMENSION(:),
INTENT(IN) :: PDMAX
118 REAL,
DIMENSION(:),
INTENT(IN) :: PCSP, PTG, PF2, PSW_RAD
124 REAL,
DIMENSION(:),
INTENT(IN) :: PQA, PQSAT, PPSNV, PDELTA, PRHOA
132 REAL,
DIMENSION(:),
INTENT(IN) :: PZENITH
137 REAL,
DIMENSION(:,:),
INTENT(IN) :: PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN
139 REAL,
DIMENSION(:),
INTENT(IN) :: PFFV
141 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: PIACAN
143 REAL,
DIMENSION(:),
INTENT(INOUT) :: PABC, PRS, PGPP
150 REAL,
DIMENSION(:),
INTENT(OUT) :: PRESP_LEAF
155 REAL,
PARAMETER :: ZRS_MIN = 1.e-4
159 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZANF
160 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZCONVE1, ZTSPC, ZIA
163 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZLAI, ZGMEST, ZFZERO, ZDMAX
170 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZGAMMT, ZDSP, ZANMAX
175 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZXMUS, ZTAN, ZTGS, ZXIA, ZAN0, ZGS0, ZXTGS, ZRDK,ZLAITOP,ZTRDK,ZZLAI
190 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZAN0_,ZGS0_,ZRDK_
192 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZEPSO
195 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZDMAXSTAR, ZFZEROSTAR, ZFZERON, ZGMESTN
203 REAL :: ZABC, ZWEIGHT
209 REAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: ZWORK
211 LOGICAL,
DIMENSION(SIZE(PEK%XLAI,1)) :: GHERB, GWOOD, GF2_INF_F2I, GTROP
213 INTEGER,
DIMENSION(1) :: IDMAX
215 REAL(KIND=JPRB) :: ZHOOK_HANDLE
228 zconve1(:) = xmco2*prhoa/
xmd 232 ztspc(:) = ptg(:) -
xtt 234 zlai(:) = pek%XLAI(:)
235 zgmest(:) = pek%XGMES(:)
236 zfzero(:) = pk%XFZERO(:)
240 gtrop(:) = (pk%XVEGTYPE_PATCH(:,nvt_trbe) > 0.8)
242 gherb(:) = (pk%XVEGTYPE_PATCH(:,nvt_tebd) + pk%XVEGTYPE_PATCH(:,nvt_trbe) + pk%XVEGTYPE_PATCH(:,nvt_bone) &
243 +pk%XVEGTYPE_PATCH(:,nvt_trbd) + pk%XVEGTYPE_PATCH(:,nvt_tebe) + pk%XVEGTYPE_PATCH(:,nvt_tene) &
244 +pk%XVEGTYPE_PATCH(:,nvt_bobd) + pk%XVEGTYPE_PATCH(:,nvt_bond) + pk%XVEGTYPE_PATCH(:,nvt_shrb)<0.5)
245 gwood(:) = (.NOT.gherb(:))
248 WHERE (pek%XLAI(:)==
xundef) zlai(:)=0.0
261 gf2_inf_f2i(:) = (pf2(:)<pek%XF2I(:))
265 WHERE(gherb(:).AND.pek%LSTRESS(:))
268 WHERE(gherb(:).AND..NOT.pek%LSTRESS(:))
273 WHERE(gherb(:).AND.(.NOT.gf2_inf_f2i(:)))
274 zdmaxstar(:) = exp((log(zgmest(:)*1000.)-pk%XAH(:))/pk%XBH(:))/1000.
275 zdmax(:) = zdmaxstar(:) - (zdmaxstar(:)-zdmax(:))*(1.-pf2(:))/(1.-pek%XF2I(:))
279 zgmest(:) = exp(pk%XAH(:)+pk%XBH(:)*log(zdmax(:)*1000.))/1000.
282 WHERE (gherb(:).AND.gf2_inf_f2i(:).AND.pek%LSTRESS(:))
283 zgmest(:) = zgmest(:) * pf2(:)/pek%XF2I(:)
285 WHERE(gherb(:).AND.gf2_inf_f2i(:).AND.(.NOT.pek%LSTRESS(:)))
286 zdmax(:) = zdmax(:) * pf2(:)/pek%XF2I(:)
290 WHERE (gherb(:).AND.(.NOT.pek%LSTRESS(:)).AND.zdmax(:)<=xdmaxn)
292 zgmest(:) = (exp(pk%XAH(:)+pk%XBH(:)*log(xdmaxn*1000.))/1000.)*pf2(:)/pek%XF2I(:)
298 zfzerostar(:) = ( xaw - log(zgmest(:)*1000.) )/xbw
301 WHERE (gwood(:).AND.pek%LSTRESS(:))
302 zgmestn(:) = zgmest(:)
304 WHERE(gwood(:).AND.(.NOT.pek%LSTRESS(:)))
305 zgmestn(:) = exp(xasw - xbw*zfzerostar(:))/1000.
308 WHERE (gwood(:).AND.gf2_inf_f2i(:))
309 zgmestn(:) = zgmestn(:)*pf2(:)/pek%XF2I(:)
313 zwork(:) = max( xdenom_min, zgmestn(:) )
314 zfzeron(:) = (xasw - log(zwork(:)*1000.))/xbw
317 WHERE(gwood(:).AND.(.NOT.gf2_inf_f2i(:)).AND.pek%LSTRESS(:))
318 zfzero(:) = zfzerostar(:)
319 zfzero(:) = zfzero(:) - (zfzero(:)-zfzeron(:))*(1.-pf2(:))/(1.-pek%XF2I(:))
321 WHERE(gwood(:).AND.(.NOT.gf2_inf_f2i(:)).AND.(.NOT.pek%LSTRESS(:)))
322 zfzero(:) = zfzerostar(:)
323 zgmest(:) = zgmest(:) - (zgmest(:)-zgmestn(:))*(1.-pf2(:))/(1.-pek%XF2I(:))
326 WHERE(gwood(:).AND.gf2_inf_f2i(:))
327 zfzero(:) = min(.95, zfzeron(:))
328 zgmest(:) = zgmestn(:)
334 zfzero(:) = pk%XFZERO(:)
335 zgmest(:) = pek%XGMES(:)*pf2(:)
344 zwork(:) = (0.1*(ztspc(:)-25.0)) * pk%XQDGAMM(:)
345 zgammt(:) = pk%XGAMM(:) * exp(zwork(:))
349 zdsp(:) = max( 0.0, pqsat(:) - pqa(:) - pek%XLE(:)*pek%XRESA(:)/(prhoa*
xlvtt) )
353 zxmus(:) = max(cos(pzenith(:)),0.01)
361 zwork(:) = (0.1*(ztspc(:)-25.0)) * pk%XQDAMAX(:)
362 zanmax(:) = ( pk%XAMAX(:) * exp(zwork(:)) ) &
363 / ( (1.0+exp(0.3*(pk%XT1AMAX(:)-ztspc(:))))* (1.0+exp(0.3*(ztspc(:)-pk%XT2AMAX(:)))) )
368 zwork(:) = (0.1*(ztspc(:)-25.0)) * pk%XQDGMES(:)
369 zgmest(:) = ( zgmest(:) * exp(zwork(:)) ) &
370 / ( (1.0+exp(0.3*(pk%XT1GMES(:)-ztspc(:))))* (1.0+exp(0.3*(ztspc(:)-pk%XT2GMES(:)))) )
383 zgammt(:) = zgammt(:) * xmco2 /
xmd * 1e-6
384 zanmax(:) = zanmax(:) / prhoa
385 zepso(:) = pk%XEPSO(:) / prhoa
387 zia(:) = psw_rad(:)*xparcf
389 DO jint = 1,
SIZE(pabc)
396 IF (jint.LT.
SIZE(pabc)) zabc = pabc(jint+1)
397 zweight = zabc - pabc(jint)
398 zxia(:) = piacan_sunlit(:,jint)
405 CALL ccetr(zxia,zia,zxmus,zabc,zlai)
409 piacan(:,jint)= zxia(:)
420 zlaitop(:) = (1.-(pabc(jint)+zabc)/2.)*zlai(:)
424 CALL cotwo(pcsp, pf2, zxia, zdsp, zgammt, &
425 zfzero, zepso, zanmax, zgmest, pek%XGC(:), zdmax, &
426 zan0, zgs0, zrdk, zlaitop, zzlai )
430 zxia(:) = piacan_shade(:,jint)
431 CALL cotwo(pcsp, pf2, zxia, zdsp, zgammt, &
432 zfzero, zepso, zanmax, zgmest, pek%XGC(:), zdmax, &
433 zan0_, zgs0_, zrdk_, zlaitop, zzlai )
437 zan0(:)=pfrac_sun(:,jint)*zan0(:)+(1.-pfrac_sun(:,jint))*zan0_(:)
438 zrdk(:)=pfrac_sun(:,jint)*zrdk(:)+(1.-pfrac_sun(:,jint))*zrdk_(:)
439 zgs0(:)=pfrac_sun(:,jint)*zgs0(:)+(1.-pfrac_sun(:,jint))*zgs0_(:)
445 ztan(:) = ztan(:) + zan0(:)*zweight
446 ztgs(:) = ztgs(:) + zgs0(:)*zweight
447 ztrdk(:) = ztrdk(:) + zrdk(:)*zweight
458 pek%XAN(:) = (1.0-pdelta(:))*(1.0-ppsnv(:)-pffv(:))*zanf(:)*zlai(:)
463 presp_leaf(:) = (1.0-pdelta(:))*(1.0-ppsnv(:)-pffv(:))*ztrdk(:)*zlai(:)
467 pgpp(:) = pek%XAN(:) + presp_leaf(:)
471 pek%XANDAY(:) = pek%XANDAY(:) + pek%XAN(:) * ptstep * prhoa
475 pek%XANFM(:) = max( zanf(:), pek%XANFM(:) )
479 zxtgs(:) = ztgs(:)*zlai(:)
483 prs(:) = min( 1.0/(zxtgs(:)+xdenom_min), xrs_max)
485 prs(:) = max( prs(:), zrs_min)
subroutine cotwores(PTSTEP, IO, OSHADE, PK, PEK, PDMAX, PPOI, PCSP, PTG, PF2, PSW_RAD, PQA, PQSAT, PPSNV, PDELTA, PRHOA, PZENITH, PFFV, PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN, PIACAN, PABC, PRS, PGPP, PRESP_LEAF)
subroutine ccetr(PXIA, PIA, PXMUS, PABC, PLAI)
subroutine cotwo(PCSP, PF2, PIA, PDS, PGAMMT, PFZERO, PEPSO, PANMAX, PGMEST, PGC, PDMAX, PAN, PGS, PRD, PLAITOP, PLAI)