32
33
34
35!----------------------------------------------------------------------------
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#include "implicit_f.inc"
70
71
72
73#include "param_c.inc"
74#include "com04_c.inc"
75#include "com06_c.inc"
76#include "com08_c.inc"
77#include "vect01_c.inc"
78#include "scr06_c.inc"
79
80
81
82 INTEGER,INTENT(IN) :: MAT(NEL), IFLAG, NEL, NVAREOS
84 . off(nel) , eint(nel), mu(nel) ,
85 . mu2(nel) , espe(nel), dvol(nel), df(nel) ,
86 . vnew(nel), pnew(nel), dpdm(nel), dpde(nel)
87 my_real,
INTENT(INOUT) :: vareos(nel,nvareos)
88 my_real,
INTENT(INOUT) :: psh(nel)
89
90
91
92 INTEGER I, MX
93 my_real aa, bb, dvv, eta, enew, omega, xx, expa, expb,
94 . pp, facc1, facc2, facpb,
95 . c1(nel),c2(nel),ptia(nel),ptib(nel),ezero(nel),
96 .
alpha(nel),beta(nel),esubl(nel),vsubl(nel),
98
99 IF(iflag == 0) THEN
100 DO i=1,nel
101 mx = mat(i)
102 c1(i) = pm(32,mx)
103 c2(i) = pm(33,mx)
104 ptia(i) = pm(34,mx)
105 ptib(i) = pm(35,mx)
106 pc(i) = pm(37,mx)
107 ezero(i)= pm(36,mx)
108 psh(i) = pm(88,mx)
109 esubl(i)= pm(160,mx)
110 vsubl(i)= pm(161,mx)
112 beta(i) = pm(163,mx)
113 ENDDO
114 DO i=1,nel
115 facc1=one
116 facc2=one
117 facpb=one
119 IF(mu(i)<zero) THEN
121 facc2=zero
122 IF(df(i)> vsubl(i) .OR. (df(i)<=vsubl(i).AND.espe(i)>=esubl(i))) THEN
124 xx=mu(i)/(one+mu(i))
125 expa=exp(-
alpha(i)*xx*xx)
126 expb=exp(beta(i)*xx)
127 facc1=expa*expb
128 facpb=expa
129 ENDIF
130 ENDIF
131 eta=one+mu(i)
132 omega= one+espe(i)/(ezero(i)*eta**2)
133 aa=facc1*c1(i)*mu(i)+facc2*c2(i)*mu2(i)
134 bb=ptia(i)+facpb*ptib(i)/omega
135 pp=
max(aa+bb*eta*espe(i),pc(i))*off(i)
136 dpdm(i)=facc1*c1(i)+two*facc2*c2(i)*mu(i)+bb*eta*pp*df(i)*df(i)
137 . +espe(i)*( bb+(two*espe(i)/eta-pp*df(i)*df(i))
138 . *ptib(i)*facpb/(ezero(i)*eta*omega**2) )
139 dpde(i)=bb*eta
141 pnew(i) =
max(pp,pc(i))*off(i)
142 ENDDO
143
144 ELSEIF(iflag == 1) THEN
145 DO i=1,nel
146 mx = mat(i)
147 c1(i) = pm(32,mx)
148 c2(i) = pm(33,mx)
149 ptia(i) = pm(34,mx)
150 ptib(i) = pm(35,mx)
151 pc(i) = pm(37,mx)
152 ezero(i)= pm(36,mx)
153 psh(i) = pm(88,mx)
154 esubl(i)= pm(160,mx)
155 vsubl(i)= pm(161,mx)
157 beta(i) = pm(163,mx)
158 ENDDO
159
160 DO i=1,nel
161 dvv=half*dvol(i)*df(i) /
max(em15,vnew(i))
162 eta=one+mu(i)
163 omega= one+espe(i)/(ezero(i)*eta**2)
164 facc1=one
165 facc2=one
166 facpb=one
168 IF(mu(i)<zero) THEN
170 facc2=zero
171 IF(df(i)>vsubl(i).OR.(df(i)<=vsubl(i).AND.espe(i)>=esubl(i))) THEN
173 xx=mu(i)/(one+mu(i))
174 expa=exp(-
alpha(i)*xx*xx)
175 expb=exp(beta(i)*xx)
176 facc1=expa*expb
177 facpb=expa
178 ENDIF
179 ENDIF
180 aa=facc1*c1(i)*mu(i)+facc2*c2(i)*mu2(i)
181 bb=(ptia(i)+facpb*ptib(i)/omega)*eta
182 pnew(i)=(aa +bb*espe(i))/(one+ bb*dvv)
183 enew=espe(i) - pnew(i)*dvv
184
185 omega= one+enew/(ezero(i)*eta**2)
186 bb=(ptia(i)+facpb*ptib(i)/omega)*eta
187 pnew(i)=(aa +bb*espe(i))/(one+ bb*dvv)
188 pnew(i)=
max(pnew(i),pc(i))*off(i)
189 eint(i)= eint(i) - half*dvol(i)*pnew(i)
190 dpde(i) = bb
192 ENDDO
193
194 ELSEIF(iflag == 2) THEN
195 DO i=1, nel
196 mx = mat(i)
197 c1(i) = pm(32,mx)
198 c2(i) = pm(33,mx)
199 ptia(i) = pm(34,mx)
200 ptib(i) = pm(35,mx)
201 pc(i) = pm(37,mx)
202 ezero(i)= pm(36,mx)
203 esubl(i)= pm(160,mx)
204 vsubl(i)= pm(161,mx)
206 beta(i) = pm(163,mx)
207 ENDDO
208 DO i=1, nel
210 IF (vnew(i) > zero) THEN
211 facc1=one
212 facc2=one
213 facpb=one
215 IF(mu(i)<zero) THEN
217 facc2=zero
218 IF(df(i) > vsubl(i) .OR. (df(i) <= vsubl(i) .AND. espe(i) >= esubl(i))) THEN
220 xx = mu(i)/(one+mu(i))
221 expa= exp(-
alpha(i)*xx*xx)
222 expb= exp(beta(i)*xx)
223 facc1=expa*expb
224 facpb=expa
225 ENDIF
226 ENDIF
227 eta=one+mu(i)
228 omega= one+espe(i)/(ezero(i)*eta**2)
229 aa=facc1*c1(i)*mu(i)+facc2*c2(i)*mu2(i)
230 bb=ptia(i)+facpb*ptib(i)/omega
231 pp=
max(aa+bb*eta*espe(i),pc(i))*off(i)
232 dpdm(i)=facc1*c1(i)+two*facc2*c2(i)*mu(i)+bb*eta*pp*df(i)*df(i)
233 . +espe(i)*( bb+(two*espe(i)/eta-pp*df(i)*df(i))
234 . *ptib(i)*facpb/(ezero(i)*eta*omega**2) )
235 dpde(i)=bb*eta
236 ENDIF
238 ENDDO
239 ENDIF
240 RETURN