6 SUBROUTINE cotwo(PCSP, PF2, PIA, PDS, PGAMMT, &
7 pfzero, pepso, panmax, pgmest, pgc, pdmax, &
8 pan, pgs, prd, plaitop, plai )
59 USE modd_co2v_par, ONLY : xrdcf, xairtoh2o, xco2toh2o, xcondstmin
66 USE yomhook
,ONLY : lhook, dr_hook
67 USE parkind1
,ONLY : jprb
75 REAL,
DIMENSION(:),
INTENT(IN):: pcsp, pf2, pia, pds,pgammt
85 REAL,
DIMENSION(:),
INTENT(IN) :: pfzero, pepso, panmax, pgmest, pgc, pdmax, plaitop, plai
101 REAL,
DIMENSION(:),
INTENT(OUT) :: pan, pgs, prd
110 REAL,
DIMENSION(SIZE(PAN)) :: zfmin, zdrap, zf, zwork
116 REAL,
DIMENSION(SIZE(PAN)) :: zcsp, zci, zcmin, zamin
126 REAL,
DIMENSION(SIZE(PAN)) :: zam, zeps, zlef, zagr, zag
136 REAL,
DIMENSION(SIZE(PAN)) :: zgsc, zgs
142 REAL(KIND=JPRB) :: zhook_handle
146 IF (lhook) CALL dr_hook(
'COTWO',0,zhook_handle)
159 zwork(jj) = max(pgc(jj)+pgmest(jj),xdenom_min)
162 zfmin(jj) = pgc(jj)/zwork(jj)
164 zfmin(jj) = min(zfmin(jj),pfzero(jj))
166 zfmin(jj) = max(zfmin(jj),xdenom_min)
170 IF (pdmax(jj).NE.0.)
THEN
171 zdrap(jj)=min(1.0,pds(jj)/pdmax(jj))
175 zf(jj) = pfzero(jj)*(1.0-zdrap(jj)) + zfmin(jj)*zdrap(jj)
177 zcsp(jj) = max(pcsp(jj),pgammt(jj)+1.e-6)
181 zci(jj) = zcsp(jj)*(zf(jj)+(1.0-zf(jj))*pgammt(jj)/zcsp(jj))
185 zcmin(jj) = (pgc(jj)*zcsp(jj) + pgmest(jj)*pgammt(jj))/zwork(jj)
189 zamin(jj) = pgmest(jj)*(zcmin(jj)-pgammt(jj))
196 zam(jj) = pgmest(jj)*(zci(jj)-pgammt(jj))
198 zam(jj) = -zam(jj)/panmax(jj)
199 zam(jj) = panmax(jj)*(1.0 - exp(zam(jj)))
200 zam(jj) = max(zam(jj),zamin(jj))
207 prd(jj) = zam(jj)*xrdcf/plai(jj)*exp(-0.2*plaitop(jj))
211 zeps(jj) = pepso(jj)*(zci(jj) - pgammt(jj))/(zci(jj) + 2.0*pgammt(jj))
213 IF (zam(jj)/=0.)
THEN
214 pan(jj) = (zam(jj) + prd(jj))*( 1.0 - exp(-zeps(jj)*pia(jj) &
215 /(zam(jj) + prd(jj))) ) - prd(jj)
219 pan(jj) = max(-prd(jj),pan(jj))
222 IF (zam(jj)/=0.)
THEN
223 zagr(jj) = (pan(jj) + prd(jj))/(zam(jj) + prd(jj))
228 zag(jj) = pan(jj) - zamin(jj)*zdrap(jj)*zagr(jj) + &
229 prd(jj)*(1.0-zagr(jj))
245 zgsc(jj) = zag(jj)/(zcsp(jj) - zci(jj))
246 zgsc(jj) = max( xcondstmin, zgsc(jj))
247 zgsc(jj) = zgsc(jj) + xairtoh2o*zlef(jj)*( (zcsp(jj) + &
248 zci(jj))/(2.0*(zcsp(jj) - zci(jj))) )
252 zgs(jj) = 1.6*zgsc(jj)
258 zlef(jj) = zgs(jj)*pds(jj)
271 pgs(:) = xco2toh2o*zgsc(:) + pgc(:)
276 pgs(:) = pgs(:) * min(1.0,pf2(:)/xdenom_min)
278 IF (lhook) CALL dr_hook(
'COTWO',1,zhook_handle)
subroutine cotwo(PCSP, PF2, PIA, PDS, PGAMMT, PFZERO, PEPSO, PANMAX, PGMEST, PGC, PDMAX, PAN, PGS, PRD, PLAITOP, PLAI)