34
35#include "implicit_f.inc"
36
37
38
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
46
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
54 INTEGER I,K,J
55
56
57 dti= one/
max(timestep*theaccfact,em10)
58 DO j=1,nicool
59
60 i=index(j)
61
62 IF(totfrac(i)<one.AND.tempel(i)<tempmin(i))THEN
63 IF (tempel(i)<ae3)THEN
64 IF(tempel(i)>ae1)THEN
65 IF(x2(i)<0.999)THEN
66
67
68 x2old(i)=x2(i)
69 IF(x2(i)==zero)x2(i)=em10
70 ftemp=exp(-qr2
71 const=ftemp*fgrain*fcfer
72 DO k=1,3
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)
79 ENDDO
80 frac2(i)=x2(i)*xeq2
81 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
82 ENDIF
83
84 ELSEIF(tempel(i)>bs)THEN
85 IF(x3(i)<0.999)THEN
86
87 x3old(i)= x3(i)
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
91 DO k=1,3
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)
98 ENDDO
99 frac3(i)=x3(i)*(one-xeq2)
100 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
101 ENDIF
102
103 ELSEIF(tempel(i)>ms)THEN
104 IF(x4(i)<0.999)THEN
105
106 x4old(i) = x4(i)
107 IF(x4(i) == zero) x4(i) = x3(i)
108
109 ftemp=exp(-qr4/tempel(i)) *(tempel(i)-bs)**2
110 const=ftemp*fgrain*fcbai
111 DO k=1,4
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))
116 IF (gx<zero)gx=one
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))))
120 vdot=two_third*vx*(log(one-x4(i))-x4(i)/(one-x4(i)))
121 gdot=two*kbain*x4(i)*gx
122 fdot=dti-const*((udot*vx+vdot*ux)*gx-ux*vx*gdot)/gx/gx
123 x4(i)=
max(em20,x4(i)-f/fdot)
124 ENDDO
125 frac4(i)=x4(i)
126 frac1(i)=one-frac2(i)-frac3(i)-frac4(i)-frac5(i)
127 ENDIF
128
129 ELSE
130
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)
134 ENDIF
135 ENDIF
136 ENDIF
137 ENDDO
138
139 RETURN