31 . FCPER,FCBAI,FGRAIN,FRAC1,FRAC2,FRAC3,FRAC4,FRAC5,X2,X3,X4,X5,
32 . QR2,QR3,QR4,KPER,KBAIN,ALPHA,XEQ2,XEQ4,XGAMA,TOTFRAC,TIMESTEP,NICOOL,
35#include "implicit_f.inc"
39 INTEGER NEL0,NICOOL,INDEX(NICOOL)
40 my_real ,
intent(in) :: THEACCFACT
42 . tempel(nel0),tempmin(nel0),timestep
44 . time,
alpha,tref,ae1,ae3,bs,ms,gsize,nu,fcfer,fcper,fcbai,
45 . fgrain,qr2,qr3,qr4,kper,kbain,xeq2,xeq4,yx
48 . frac1(nel0),frac2(nel0),frac3(nel0),frac4(nel0),frac5(nel0)
50 . x2(nel0),x3(nel0),x4(nel0),x5(nel0),totfrac(nel0),xgama(nel0)
52 . ftemp,ux,vx,udot,vdot,f,const,fdot,x2old(nel0),
53 . x3old(nel0),x4old(nel0),gx,gdot,dti
57 dti= one/
max(timestep*theaccfact,em10)
62 IF(totfrac(i)<one.AND.tempel(i)<tempmin(i))
THEN
63 IF (tempel(i)<ae3)
THEN
69 IF(x2(i)==zero)x2(i)=em10
70 ftemp=exp(-qr2/tempel(i))*abs(tempel(i)-ae3)**3
71 const=ftemp*fgrain*fcfer
73 yx= (one-x2(i))/
max(em10,x2(i))
74 ux=x2(i)**(two_third*(one-x2(i)))
75 vx=(one-x2(i))**(two_third*x2(i))
76 f =(x2(i)-x2old(i))*dti-const*ux*vx
77 fdot=dti-const*two_third*ux*vx*(yx-one/yx+log(yx))
78 x2(i)=
max(em20,x2(i)-f/fdot)
81 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
84 ELSEIF(tempel(i)>bs)
THEN
88 IF(x3(i)==zero)x3(i)=em10
89 ftemp=6.17*exp(-qr3/tempel(i))*abs(tempel(i)-ae1)**3
90 const=ftemp*fgrain*fcper
92 yx= (one-x3(i))/
max(em10,x3(i))
93 ux=x3(i)**(two_third*(one-x3(i)))
94 vx=(one-x3(i))**(two_third*x3(i))
95 f =(x3(i)-x3old(i))*dti-const*ux*vx
96 fdot=dti-const*two_third*ux*vx*(yx-one/yx+log(yx))
97 x3(i)=
max(em20,x3(i)-f/fdot)
99 frac3(i)=x3(i)*(one-xeq2)
100 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
103 ELSEIF(tempel(i)>ms)
THEN
107 IF(x4(i) == zero) x4(i) = x3(i)
109 ftemp=exp(-qr4/tempel(i)) *(tempel(i)-bs)**2
110 const=ftemp*fgrain*fcbai
112 yx= (one-x4(i))/
max(em10,x4(i))
113 ux=x4(i)**(two_third*(one-x4(i)))
114 vx=(one-x4(i))**(two_third*x4(i))
115 gx=exp(kbain*x4(i)*x4(i))
117 f =(x4(i)-x4old(i))*dti-const*ux*vx/gx
118 udot=two_third*ux*((one-x4(i))/
max(em10,x4(i))-
119 . log(
max(em10,x4(i))))
121 gdot=two*kbain*x4(i)*gx
122 fdot=dti-const*((udot*vx+vdot*ux)*gx-ux*vx*gdot)/gx
123 x4(i)=
max(em20,x4(i)-f/fdot)
126 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
131 IF (frac5(i)==zero)xgama(i)= frac1(i)
132 frac5(i)=xgama(i)*(one-exp(-
alpha*(ms-tempel(i))))
133 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
subroutine kirkaldykinetics(nel0, time, tempel, tempmin, ae1, ae3, bs, ms, fcfer, fcper, fcbai, fgrain, frac1, frac2, frac3, frac4, frac5, x2, x3, x4, x5, qr2, qr3, qr4, kper, kbain, alpha, xeq2, xeq4, xgama, totfrac, timestep, nicool, index, theaccfact)