42
43
44
45#include "implicit_f.inc"
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93#include "scr05_c.inc"
94
95 INTEGER, INTENT(IN) :: NEL, NUPARAM, NUVAR, NGL(NEL),ISMSTR
96
98 . time,timestep,uparam(*),
99 . rho(nel),rho0(nel),volume(nel),eint(nel),
100 . epspxx(nel),epspyy(nel),epspzz(nel),
101 . epspxy(nel),epspyz(nel),epspzx(nel),
102 . depsxx(nel),depsyy(nel),depszz(nel),
103 . depsxy(nel),depsyz(nel),depszx(nel),
104 . epsxx(nel) ,epsyy(nel) ,epszz(nel) ,
105 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
106 . sig0xx(nel),sig0yy(nel),sig0zz(nel),
107 . sig0xy(nel),sig0yz(nel),sig0zx(nel)
108
109
110
112 . signxx(nel),signyy(nel),signzz(nel),
113 . signxy(nel),signyz(nel),signzx(nel),
114 . soundsp(nel),viscmax(nel)
115
116
117
119 . uvar(nel,nuvar), off(nel)
120
121
122
123 INTEGER, INTENT(IN) :: NPF(*), NFUNC, IFUNC(NFUNC)
126
127
128
129
130
131
132
133
134
135
136
137 INTEGER
138 . II,I,J,K,I1,J1,J2,IFLAG,ILOAD(NEL,3),(NEL),
139 . IDAM,INDX_L(),INDX_UNL(NEL),NE_L,NE_UNL
141 . e0,aa,epsmax,g,nu,shape,hys,emax,
142 . yfac,yfacj1,yfacj2,ratej1,ratej2, epse,ep1,
143 . ep2,ep3,ep4,ep5,ep6,ert11,ert12,ert13,ert21,
144 . ert22,ert23,ert31,ert32,ert33,sj1,sj2
145 . dam,epe,emin,e_min(nel),e1,e2,tmp,quasi_eint
147 . av(6,nel), evv(3,nel),ev(nel,3),strain(nel,3),
148 . strainrate(nel,3),s(nel,3),sqstat(nel,3),df(3),
149 . dirprv(3,3,nel),epsp(3),ecurent(nel),e(nel),deint,
150 . rateeps
151
152
153
154 e0 = uparam(1)
155 g = uparam(4)
156 nu = uparam(5)
157 shape = uparam(6)
158 hys = uparam(7)
159 iflag = uparam(9)
160 idam = uparam(10)
161
162
163
164 DO i=1,nel
165 av(1,i) = epsxx(i)
166 av(2,i) = epsyy(i)
167 av(3,i) = epszz(i)
168 av(4,i) = half*epsxy(i)
169 av(5,i) = half*epsyz(i)
170 av(6,i) = half*epszx(i)
171 ENDDO
172
173
174 IF (iresp==1) THEN
176 ELSE
177 CALL valpvec(av,evv,dirprv,nel)
178 ENDIF
179
180
181
182
183 IF(ismstr==0.OR.ismstr==2.OR.ismstr==4) THEN
184 DO i=1,nel
185
186 ev(i,1)=exp(evv(1,i))
187 ev(i,2)=exp(evv(2,i))
188 ev(i,3)=exp(evv(3,i))
189 ENDDO
190 ELSEIF(ismstr==10.OR.ismstr==12) THEN
191 DO i =1,nel
192 ev(i,1)=sqrt(evv(1,i) + one )
193 ev(i,2)=sqrt(evv(2,i) + one )
194 ev(i,3)=sqrt(evv(3,i) + one )
195 ENDDO
196 ELSE
197
198 DO i=1,nel
199 ev(i,1)=evv(1,i) + one
200 ev(i,2)=evv(2,i) + one
201 ev(i,3)=evv(3,i) + one
202 ENDDO
203 ENDIF
204
205
206 DO i=1,nel
207
208
209 strain(i,1) = one - ev(i,1)
210 strain(i,2) = one - ev(i,2)
211 strain(i,3) = one - ev(i,3)
212
213 ep1 = epspxx(i)
214 ep2 = epspyy(i)
215 ep3 = epspzz(i)
216 ep4 = half*epspxy(i)
217 ep5 = half*epspyz(i)
218 ep6 = half*epspzx(i)
219
220 ert11 =dirprv(1,1,i)*ep1 + dirprv(2,1,i)*ep4 + dirprv(3,1,i)*ep6
221 ert12 =dirprv(1,2,i)*ep1 + dirprv(2,2,i)*ep4 + dirprv(3,2,i)*ep6
222 ert13 =dirprv(1,3,i)*ep1 + dirprv(2,3,i)*ep4 + dirprv(3,3,i)*ep6
223
224 ert21 =dirprv(1,1,i)*ep4 + dirprv(2,1,i)*ep2 + dirprv(3,1,i)*ep5
225 ert22 =dirprv(1,2,i)*ep4 + dirprv(2,2,i)*ep2 + dirprv(3,2,i)*ep5
226 ert23 =dirprv(1,3,i)*ep4 + dirprv(2,3,i)*ep2 + dirprv(3,3,i)*ep5
227
228 ert31 =dirprv(1,1,i)*ep6 + dirprv(2,1,i)*ep5 + dirprv(3,1,i)*ep3
229 ert32 =dirprv(1,2,i)*ep6 + dirprv(2,2,i)*ep5 + dirprv(3,2,i)*ep3
230 ert33 =dirprv(1,3,i)*ep6 + dirprv(2,3,i)*ep5 + dirprv(3,3,i)*ep3
231
232 epsp(1) = dirprv(1,1,i)*ert11 + dirprv(2,1,i)*ert21
233 . + dirprv(3,1,i)*ert31
234 epsp(2) = dirprv(1,2,i)*ert12 + dirprv(2,2,i)*ert22
235 . + dirprv(3,2,i)*ert32
236 epsp(3) = dirprv(1,3,i)*ert13 + dirprv(2,3,i)*ert23
237 . + dirprv(3,3,i)*ert33
238 strainrate(i,1) = abs(epsp(1))
239 strainrate(i,2) = abs(epsp(2))
240 strainrate(i,3) = abs(epsp(3))
241
242
243
244
245
246
247
248
249
250
251
252
253
254 iloade(i) = 1
255 DO k=1,3
256 epe = epsp(k)*strain(i,k)
257 iload(i,k) = 1
258 IF(epe > em10 )iload(i,k) = -1
259 IF(iload(i,k) == -1 ) iloade(i) = -1
260 ENDDO
261
262 DO k=1,3
263 IF(iload(i,k) == -1) strainrate(i,k) = zero
264 ENDDO
265
266 uvar(i,3) = strainrate(i,1)
267 uvar(i,4) = strainrate(i,2)
268 uvar(i,5) = strainrate(i,3)
269
270 rateeps =
max(strainrate(i,1),strainrate(i,2),strainrate(i,3))
271
272
273 ENDDO
274
275 indx_l(1:nel) = 0
276 indx_unl(1:nel) = 0
277 ne_l = 0
278 ne_unl = 0
279
280 DO i=1,nel
281 IF(iloade(i) == 1) THEN
282 ne_l = ne_l + 1
283 indx_l(ne_l) = i
284 uvar(i,8) = one
285 ELSEIF(iloade(i) == -1 ) THEN
286 ne_unl = ne_unl + 1
287 indx_unl(ne_unl) = i
288 uvar(i,8) = -one
289 ENDIF
290 ENDDO
291
292 IF(iflag == 1) THEN
293 DO i=1,nel
294 yfac = uparam(nfunc + 11)
295 emax = zero
296 DO k=1,3
297 epse = strain(i,k)
298 s(i,k) = yfac*finter(ifunc(1),epse,npf,tf,df(k))
299 emax =
max(emax, yfac*df(k))
300 ENDDO
302 ENDDO
303 ENDIF
304
305 IF(iflag == 2) THEN
306 DO i=1,nel
307 yfac = uparam(nfunc + 11)
308 ecurent(i)= zero
309 emax = zero
310 emin = ep20
311 DO k=1,3
312 epse = strain(i,k)
313 sqstat(i,k) = yfac*finter(ifunc(1),epse,npf,tf,df(k))
314 s(i,k) = sqstat(i,k)
315 emax =
max(emax, yfac*df(k))
316 emin =
min(emin, yfac*df(k))
317
318 ecurent(i)= ecurent(i) + half*strain(i,k)*sqstat(i,k)
319
320 ENDDO
321 uvar(i,2) =
max(uvar(i,2),ecurent(i))
323 e_min(i) =emin
324 ENDDO
325
326 IF(idam == 0) THEN
327 DO ii=1,ne_unl
328 i = indx_unl(ii)
329 uvar(i,1) = ecurent(i)
330 IF(uvar(i,2) > zero) THEN
331 dam = one - (ecurent(i)/uvar(i,2))**shape
332 dam = one - (one - hys)*dam
333
334 DO k=1,3
335 s(i,k)= dam*s(i,k)
336 ENDDO
337 ENDIF
338 ENDDO
339 ELSE
340
341 DO ii=1,ne_unl
342 i = indx_unl(ii)
343 uvar(i,1) = ecurent(i)
344 IF(uvar(i,2) > zero) THEN
345 dam = one - (ecurent(i)/uvar(i,2))**shape
346 dam = one - (one - hys)*dam
347 DO k=1,3
348 IF(iload(i,k) < 0)s(i,k) = dam*s(i,k)
349 ENDDO
350 ENDIF
351 ENDDO
352 ENDIF
353 ENDIF
354
355
356 DO i = 1,nel
357
358
359 t1 = -s(i,1)/ev(i,2)/ev(i,3)
360 t2 = -s(i,2)/ev(i,1)/ev(i,3)
361 t3 = -s(i,3)/ev(i,1)/ev(i,2)
362
363
364
365 signxx(i) = dirprv(1,1,i)*dirprv(1,1,i)*t1
366 . + dirprv(1,2,i)*dirprv(1,2,i)*t2
367 . + dirprv(1,3,i)*dirprv(1,3,i)*t3
368
369 signyy(i) = dirprv(2,2,i)*dirprv(2,2,i)*t2
370 . + dirprv(2,3,i)*dirprv(2,3,i)*t3
371 . + dirprv(2,1,i)*dirprv(2,1,i)*t1
372
373 signzz(i) = dirprv(3,3,i)*dirprv(3,3,i)*t3
374 . + dirprv(3,1,i)*dirprv(3,1,i)*t1
375 . + dirprv(3,2,i)*dirprv(3,2,i)*t2
376
377 signxy(i) = dirprv(1,1,i)*dirprv(2,1,i)*t1
378 . + dirprv(1,2,i)*dirprv(2,2,i)*t2
379 . + dirprv(1,3,i)*dirprv(2,3,i)*t3
380
381 signyz(i) = dirprv(2,2,i)*dirprv(3,2,i)*t2
382 . + dirprv(2,3,i)*dirprv(3,3,i)*t3
383 . + dirprv(2,1,i)*dirprv(3,1,i)*t1
384
385 signzx(i) = dirprv(3,3,i)*dirprv(1,3,i)*t3
386 . + dirprv(3,1,i)*dirprv(1,1,i)*t1
387 . + dirprv(3,2,i)*dirprv(1,2,i)*t2
388
389 aa = e(i)*(one-nu)/(one + nu)/(one - two*nu)
390 soundsp(i) = sqrt(aa/rho0(i))
391 viscmax(i) = zero
392
393 ENDDO
394
395
396 RETURN
subroutine valpvecdp(sig, val, vec, nel)
subroutine valpvec(sig, val, vec, nel)