6 SUBROUTINE cotwores(PTSTEP, HPHOTO, OTR_ML, OSHADE, &
7 pvegtype, ostressdef, pah, pbh, pf2i, pdmax, &
8 ppoi, pcsp, ptg, pf2, psw_rad, pra, pqa, pqsat, ple, &
9 ppsnv, pdelta, plai, prhoa, pzenith, pfzero, pepso, &
10 pgamm, pqdgamm, pgmes, pgc, pqdgmes, pt1gmes, pt2gmes, &
11 pamax, pqdamax, pt1amax, pt2amax, pffv, &
12 piacan_sunlit, piacan_shade, pfrac_sun, piacan, &
13 pabc, pan, panday, prs, panfm, pgpp, panf, presp_leaf )
84 xdmaxx, xdmaxn, xaw, xbw, xasw
86 nvt_trbd, nvt_tebe, nvt_tene, &
87 nvt_bobd, nvt_bond, nvt_shrb
97 USE yomhook
,ONLY : lhook, dr_hook
98 USE parkind1
,ONLY : jprb
105 REAL,
INTENT(IN) :: ptstep
106 CHARACTER(LEN=*),
INTENT(IN) :: hphoto
112 LOGICAL,
INTENT(IN) :: otr_ml
113 LOGICAL,
DIMENSION(:),
INTENT(IN) :: oshade
115 REAL,
DIMENSION(:,:),
INTENT(IN) :: pvegtype
118 LOGICAL,
DIMENSION(:),
INTENT(IN) :: ostressdef
119 REAL,
DIMENSION(:),
INTENT(IN) :: pah, pbh, pf2i, pdmax
128 REAL,
DIMENSION(:),
INTENT(IN) :: ppoi
130 REAL,
DIMENSION(:),
INTENT(IN) :: pcsp, ptg, pf2, psw_rad, pra
137 REAL,
DIMENSION(:),
INTENT(IN) :: pqa, pqsat, ple, ppsnv, pdelta, plai, prhoa
147 REAL,
DIMENSION(:),
INTENT(IN) :: pzenith
152 REAL,
DIMENSION(:),
INTENT(IN) :: pfzero, pepso, pgamm, pqdgamm, pgmes, pgc, &
153 pqdgmes, pt1gmes, pt2gmes, pamax, pqdamax, &
180 REAL,
DIMENSION(:,:),
INTENT(IN) :: piacan_sunlit, piacan_shade, pfrac_sun
182 REAL,
DIMENSION(:),
INTENT(IN) :: pffv
184 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: piacan
186 REAL,
DIMENSION(:),
INTENT(INOUT) :: pabc, pan, panday, prs, panfm, pgpp
196 REAL,
DIMENSION(:),
INTENT(OUT) :: panf
199 REAL,
DIMENSION(:),
INTENT(OUT) :: presp_leaf
204 REAL,
PARAMETER :: zrs_min = 1.e-4
208 REAL,
DIMENSION(SIZE(PLAI)) :: zconve1, ztspc, zia
211 REAL,
DIMENSION(SIZE(PLAI)) :: zlai, zgmest, zfzero, zdmax
218 REAL,
DIMENSION(SIZE(PLAI)) :: zgammt, zdsp, zanmax
223 REAL,
DIMENSION(SIZE(PLAI)) :: zxmus, ztan, ztgs, zxia, zan0, zgs0, zxtgs, zrdk,zlaitop,ztrdk,zzlai
238 REAL,
DIMENSION(SIZE(PLAI)) :: zan0_,zgs0_,zrdk_
240 REAL,
DIMENSION(SIZE(PLAI)) :: zepso
243 REAL,
DIMENSION(SIZE(PLAI)) :: zdmaxstar, zfzerostar, zfzeron, zgmestn
251 REAL :: zabc, zweight
257 REAL,
DIMENSION(SIZE(PLAI)) :: zwork
259 LOGICAL,
DIMENSION(SIZE(PLAI)) :: gherb, gwood, gf2_inf_f2i, gtrop
261 INTEGER,
DIMENSION(1) :: idmax
263 REAL(KIND=JPRB) :: zhook_handle
274 IF (lhook) CALL dr_hook(
'COTWORES',0,zhook_handle)
276 zconve1(:) = xmco2*prhoa(:)/xmd
280 ztspc(:) = ptg(:) - xtt
284 zfzero(:) = pfzero(:)
288 gtrop(:) = (pvegtype(:,nvt_trbe) > 0.8)
290 gherb(:) = (pvegtype(:,nvt_tebd) + pvegtype(:,nvt_trbe) + pvegtype(:,nvt_bone) &
291 +pvegtype(:,nvt_trbd) + pvegtype(:,nvt_tebe) + pvegtype(:,nvt_tene) &
292 +pvegtype(:,nvt_bobd) + pvegtype(:,nvt_bond) + pvegtype(:,nvt_shrb)<0.5)
293 gwood(:) = (.NOT.gherb(:))
295 IF (hphoto==
'AGS' .OR. hphoto==
'LAI')
THEN
303 zgmest(:) = zgmest(:) * pf2(:)
305 ELSEIF (hphoto==
'AST' .OR. hphoto==
'LST' .OR. hphoto==
'NIT' .OR. hphoto==
'NCB')
THEN
307 WHERE (plai(:)==xundef) zlai(:)=0.0
320 gf2_inf_f2i(:) = (pf2(:)<pf2i(:))
324 WHERE(gherb(:).AND.ostressdef(:))
327 WHERE(gherb(:).AND..NOT.ostressdef(:))
332 WHERE(gherb(:).AND.(.NOT.gf2_inf_f2i(:)))
333 zdmaxstar(:) = exp((log(zgmest(:)*1000.)-pah(:))/pbh(:))/1000.
334 zdmax(:) = zdmaxstar(:) - (zdmaxstar(:)-zdmax(:))*(1.-pf2(:))/(1.-pf2i(:))
338 zgmest(:) = exp(pah(:)+pbh(:)*log(zdmax(:)*1000.))/1000.
341 WHERE (gherb(:).AND.gf2_inf_f2i(:).AND.ostressdef(:))
342 zgmest(:) = zgmest(:) * pf2(:)/pf2i(:)
344 WHERE(gherb(:).AND.gf2_inf_f2i(:).AND.(.NOT.ostressdef(:)))
345 zdmax(:) = zdmax(:) * pf2(:)/pf2i(:)
349 WHERE (gherb(:).AND.(.NOT.ostressdef(:)).AND.zdmax(:)<=xdmaxn)
351 zgmest(:) = (exp(pah(:)+pbh(:)*log(xdmaxn*1000.))/1000.)*pf2(:)/pf2i(:)
357 zfzerostar(:) = ( xaw - log(zgmest(:)*1000.) )/xbw
360 WHERE (gwood(:).AND.ostressdef(:))
361 zgmestn(:) = zgmest(:)
363 WHERE(gwood(:).AND.(.NOT.ostressdef(:)))
364 zgmestn(:) = exp(xasw - xbw*zfzerostar(:))/1000.
367 WHERE (gwood(:).AND.gf2_inf_f2i(:))
368 zgmestn(:) = zgmestn(:)*pf2(:)/pf2i(:)
372 zwork(:) = max( xdenom_min, zgmestn(:) )
373 zfzeron(:) = (xasw - log(zwork(:)*1000.))/xbw
376 WHERE(gwood(:).AND.(.NOT.gf2_inf_f2i(:)).AND.ostressdef(:))
377 zfzero(:) = zfzerostar(:)
378 zfzero(:) = zfzero(:) - (zfzero(:)-zfzeron(:))*(1.-pf2(:))/(1.-pf2i(:))
380 WHERE(gwood(:).AND.(.NOT.gf2_inf_f2i(:)).AND.(.NOT.ostressdef(:)))
381 zfzero(:) = zfzerostar(:)
382 zgmest(:) = zgmest(:) - (zgmest(:)-zgmestn(:))*(1.-pf2(:))/(1.-pf2i(:))
385 WHERE(gwood(:).AND.gf2_inf_f2i(:))
386 zfzero(:) = min(.95, zfzeron(:))
387 zgmest(:) = zgmestn(:)
393 zfzero(:) = pfzero(:)
394 zgmest(:) = pgmes(:)*pf2(:)
405 zwork(:) = (0.1*(ztspc(:)-25.0)) * pqdgamm(:)
406 zgammt(:) = pgamm(:) * exp(zwork(:))
410 zdsp(:) = max( 0.0, pqsat(:) - pqa(:) - ple(:)*pra(:)/(prhoa*xlvtt) )
414 zxmus(:) = max(cos(pzenith(:)),0.01)
422 zwork(:) = (0.1*(ztspc(:)-25.0)) * pqdamax(:)
423 zanmax(:) = ( pamax(:) * exp(zwork(:)) ) &
424 / ( (1.0+exp(0.3*(pt1amax(:)-ztspc(:))))* (1.0+exp(0.3*(ztspc(:)-pt2amax(:)))) )
429 zwork(:) = (0.1*(ztspc(:)-25.0)) * pqdgmes(:)
430 zgmest(:) = ( zgmest(:) * exp(zwork(:)) ) &
431 / ( (1.0+exp(0.3*(pt1gmes(:)-ztspc(:))))* (1.0+exp(0.3*(ztspc(:)-pt2gmes(:)))) )
444 zgammt(:) = zgammt(:) * xmco2 / xmd * 1e-6
445 zanmax(:) = zanmax(:) / prhoa(:)
446 zepso(:) = pepso(:) / prhoa(:)
448 zia(:) = psw_rad(:)*xparcf
450 DO jint = 1,
SIZE(pabc)
457 IF (jint.LT.
SIZE(pabc)) zabc = pabc(jint+1)
458 zweight = zabc - pabc(jint)
459 zxia(:) = piacan_sunlit(:,jint)
466 CALL
ccetr(zxia,zia,zxmus,zabc,zlai)
470 piacan(:,jint)= zxia(:)
481 zlaitop(:) = (1.-(pabc(jint)+zabc)/2.)*zlai(:)
485 CALL
cotwo(pcsp, pf2, zxia, zdsp, zgammt, &
486 zfzero, zepso, zanmax, zgmest, pgc, zdmax, &
487 zan0, zgs0, zrdk, zlaitop, zzlai )
491 zxia(:) = piacan_shade(:,jint)
492 CALL
cotwo(pcsp, pf2, zxia, zdsp, zgammt, &
493 zfzero, zepso, zanmax, zgmest, pgc, zdmax, &
494 zan0_, zgs0_, zrdk_, zlaitop, zzlai )
498 zan0(:)=pfrac_sun(:,jint)*zan0(:)+(1.-pfrac_sun(:,jint))*zan0_(:)
499 zrdk(:)=pfrac_sun(:,jint)*zrdk(:)+(1.-pfrac_sun(:,jint))*zrdk_(:)
500 zgs0(:)=pfrac_sun(:,jint)*zgs0(:)+(1.-pfrac_sun(:,jint))*zgs0_(:)
506 ztan(:) = ztan(:) + zan0(:)*zweight
507 ztgs(:) = ztgs(:) + zgs0(:)*zweight
508 ztrdk(:) = ztrdk(:) + zrdk(:)*zweight
519 pan(:) = (1.0-pdelta(:))*(1.0-ppsnv(:)-pffv(:))*panf(:)*zlai(:)
524 presp_leaf(:) = (1.0-pdelta(:))*(1.0-ppsnv(:)-pffv(:))*ztrdk(:)*zlai(:)
528 pgpp(:) = pan(:) + presp_leaf(:)
532 panday(:) = panday(:) + pan(:) * ptstep * prhoa(:)
536 panfm(:) = max( panf(:), panfm(:) )
540 zxtgs(:) = ztgs(:)*zlai(:)
544 prs(:) = min( 1.0/(zxtgs(:)+xdenom_min), xrs_max)
546 prs(:) = max( prs(:), zrs_min)
548 IF (lhook) CALL dr_hook(
'COTWORES',1,zhook_handle)
subroutine cotwores(PTSTEP, HPHOTO, OTR_ML, OSHADE, PVEGTYPE, OSTRESSDEF, PAH, PBH, PF2I, PDMAX, PPOI, PCSP, PTG, PF2, PSW_RAD, PRA, PQA, PQSAT, PLE, PPSNV, PDELTA, PLAI, PRHOA, PZENITH, PFZERO, PEPSO, PGAMM, PQDGAMM, PGMES, PGC, PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX, PFFV, PIACAN_SUNLIT, PIACAN_SHADE, PFRAC_SUN, PIACAN, PABC, PAN, PANDAY, PRS, PANFM, PGPP, PANF, 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)