41
42
43
44 USE constant_mod ,
ONLY : em14, zero, em20, three, third, two, half, one, onep333, ep20
45
46
47
48 implicit none
49
50
51
52#include "my_real.inc"
53#include "param_c.inc"
54#include "com08_c.inc"
55
56
57
58 INTEGER,INTENT(IN) :: (*),MAT(NEL),IPM(NPROPMI,NUMMAT),NEL
59 my_real,
INTENT(IN) :: pm(npropm,nummat)
60 my_real,
INTENT(IN) :: off(nel),eint(nel)
61 my_real,
INTENT(IN) :: rho(nel), vol(nel), tf(*), seq_output(nel)
63 my_real,
INTENT(IN) :: d1(nel), d2(nel), d3(nel), d4(nel), d5(nel), d6(nel)
64 my_real,
INTENT(IN) :: dvol(nel), mu(nel)
65 my_real,
INTENT(IN) :: sold1(nel), sold2(nel), sold3(nel)
66 my_real,
INTENT(IN) :: sold4(nel), sold5(nel), sold6(nel)
67 my_real,
INTENT(INOUT) :: mu_bak(nel)
68 my_real,
INTENT(INOUT) :: psh(nel)
69 my_real,
INTENT(INOUT) :: ssp(nel)
70 my_real,
INTENT(INOUT) :: pnew(nel)
71 my_real,
INTENT(INOUT) :: sig(nel,6)
72 my_real,
INTENT(INOUT) :: epxe(nel),defp(nel),epsq(nel),dpla(nel)
73 my_real,
INTENT(INOUT) :: sigy(nel)
74 INTEGER,INTENT(IN) :: NUMMAT
75
76
77
78 INTEGER I, MX, IFUNC, NPOINT
80 my_real :: t1(nel), t2(nel), t3(nel), t4(nel),t5(nel), t6(nel)
81 my_real :: pold(nel), p(nel), pne1, ptot, pmin
87 my_real :: g0(nel),a0(nel),a1(nel),a2(nel),amax, yield2(nel)
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 mx = mat(1)
120 g = dt1*pm(22,mx)
121 g43 = onep333*pm(22,mx)
122 gg = two*g
123 bmin = pm(32,mx)
124 bmax = pm(35,mx)
125 mumin = -ep20
126 mumax = pm(36,mx)
127 pmin = pm(37,mx)
128 psh(1:nel) = pm(43,mx)
129 pstar = pm(44,mx)
130 a0(1:nel) = pm(38,mx)
131 a1(1:nel) = pm(39,mx)
132 a2(1:nel) = pm(40,mx)
133 amax = pm(41,mx)
134 rho0(1:nel) = pm(1,mx)
135 facy = pm(42,mx)
136 ifunc = ipm(11,mx)
137
138
139
140
141 DO i=1,nel
142 pold(i)=-third*(sig(i,1)+sig(i,2)+sig(i,3))
143 ENDDO
144
145
146
147
148 DO i=1,nel
149 t1(i)=sig(i,1)+pold(i)
150 t2(i)=sig(i,2)+pold(i)
151 t3(i)=sig(i,3)+pold(i)
152 t4(i)=sig(i,4)
153 t5(i)=sig(i,5)
154 t6(i)=sig(i,6)
155 ENDDO
156
157
158
159
160 DO i=1,nel
161 p(i) = facy*finter(ifunc,mu(i),npf,tf,dpdm(i))
162 p_ = finter(ifunc,mu_bak(i),npf,tf,dpdm0)
163
165 if(mumax > zero)then
166 alpha=mu_bak(i)/mumax
167 endif
169 pne1 = p_-(mu_bak(i)-mu(i))*bulk(i)
170 if(mu_bak(i) > mumin) p(i) =
min(pne1, p(i))
171 p(i) =
max(p(i),pmin) *off(i)
172 if(mu(i) > mu_bak(i)) mu_bak(i) =
min(mumax,mu(i))
173 ENDDO
174
175
176 ! sound speed
177
178 do i=1,nel
179 dpdm(i) =
max(bulk(i),dpdm(i))
180 dpdm(i)= g43 +
max(bulk(i),dpdm(i))
181 ssp(i)=sqrt(abs(dpdm(i))/rho0(i))
182 enddo
183
184
185
186 !----------------------------------------------------------------
187 do i=1,nel
188 p(i)=
max(pmin,p(i))*off(i)
189 pnew(i) = p(i)-psh(i)
190 enddo
191
192
193
194
195 DO i=1,nel
196 IF(p(i) < pmin)THEN
197 a0(i)=zero
198 a1(i)=zero
199 a2(i)=zero
200 ENDIF
201 ENDDO
202
203
204
205
206 DO i=1,nel
207 svrt = third*(d1(i)+d2(i)+d3(i))
208 t1(i)=t1(i)+gg*(d1(i)-svrt)
209 t2(i)=t2(i)+gg*(d2(i)-svrt)
210 t3(i)=t3(i)+gg*(d3(i)-svrt)
211 t4(i)=t4(i)+g*d4(i)
212 t5(i)=t5(i)+g*d5(i)
213 t6(i)=t6(i)+g*d6(i)
214 ENDDO
215
216
217
218
219 DO i=1,nel
220 aj2(i)=half*(t1(i)**2+t2(i)**2+t3(i)**2)+t4(i)**2+t5(i)**2+t6(i)**2
221 ptot = p(i) + psh(i)
222 g0(i) =a0(i)+a1(i)*ptot+a2(i)*ptot*ptot
223 g0(i)=
min(amax,g0(i))
224 g0(i)=
max(zero,g0(i))
225 IF(ptot <= pstar)g0(i)=zero
226 yield2(i)=aj2(i)-g0(i)
227 ENDDO
228
229
230
231
232 DO i=1,nel
233 ratio(i) = zero
234 IF(yield2(i)<=zero .AND. g0(i)>zero)THEN
235 ratio(i) = one
236 ELSE
237 ratio(i) = sqrt(g0(i)/(aj2(i)+ em14))
238 ENDIF
239 ENDDO
240
241
242
243
244 DO i=1,nel
245 p(i)=p(i)*off(i)
246 pnew(i) = p(i)
247 sig(i,1)=ratio(i)*t1(i)*off(i)
248 sig(i,2)=ratio(i)*t2(i)*off(i)
249 sig(i,3)=ratio(i)*t3(i)*off(i)
250 sig(i,4)=ratio(i)*t4(i)*off(i)
251 sig(i,5)=ratio(i)*t5(i)*off(i)
252 sig(i,6)=ratio(i)*t6(i)*off(i)
253 dpla(i)=(one-ratio(i))*sqrt(aj2(i))*dt1 /
max(em20,three*g)
254 ENDDO
255
256
257
258
259 DO i=1,nel
260 sigy(i) = g0(i)
261 defp(i) = defp(i) + dpla(i)
262 epxe(i) = defp(i)
263 epsq(i) = mu_bak(i)
264 ENDDO
265
266
267 RETURN
268