45
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "scr17_c.inc"
57#include "units_c.inc"
58#include "comlock.inc"
59#include "com04_c.inc"
60#include "tabsiz_c.inc"
61
62
63
64 INTEGER, INTENT(IN) ::
65 . ,NUPARAM,NUVAR,NGL(NEL),NPG,IPG,NTABLF,INLOC
66 INTEGER, DIMENSION(NTABLF) ,INTENT(IN) :: ITABLF
68 . time,uparam(nuparam),aldt(nel),
69 . dpla(nel),epsp(nel),temp(nel),
70 . signxx(nel),signyy(nel),signzz(nel),
71 . signxy(nel),signyz(nel),signzx(nel),
72 . pla(nel),sigy(nel),vol(nel)
74 . uvar(nel,nuvar),dfmax(nel),tdele(nel),
75 . dmg_scale(nel),off(nel),uelr(nel),
76 . loff(nel),damini(nel)
77 TYPE (TTABLE), INTENT(IN), DIMENSION(NTABLE) :: TABLE
78
79
80
81 INTEGER I,J,INDX(NEL),NINDX,FAILIP,IPOS(NEL,2),
82 . NROT(NEL),NINIEVO,ILEN
83 INTEGER, DIMENSION(:), ALLOCATABLE ::
84 . INITYPE,EVOTYPE,EVOSHAP,COMPTYP,TAB_ID,
85 . TAB_EL,FCRIT
86 my_real,
DIMENSION(:),
ALLOCATABLE ::
87 . sr_ref,fscale,ini_p1,el_ref,elscal,
89 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
90 . dmgini,dmgevo
92 . lambda,fac,df,l0(nel) ,triax(nel) ,epsf(nel) ,
93 . depsf(nel) ,xvec(nel,2) ,sxx,syy,szz ,sizefac(nel),
94 . epsmod(nel) ,p(nel) ,svm(nel) ,dmgmax(nel) ,
95 . dmgmul(nel) ,sigtens(nel,3,3) ,sig_pr(nel,3),
96 . vect_pr(nel,3,3),plas_disp,r_inter ,yld0 ,
97 . maxshear(nel),sigpmaj(nel),
alpha(nel) ,dsize(nel) ,
98 . center ,devsp1 ,devsp2 ,radius ,
99 . sigp1 ,sigp2
100
101
102
103
104
105 ninievo = uparam(1)
106 ilen = int(uparam(3))
107 IF (inloc > 0) ilen = 1
108 failip =
min(nint(uparam(4)),npg)
109 ALLOCATE(initype(ninievo))
110 ALLOCATE(evotype(ninievo))
111 ALLOCATE(evoshap(ninievo))
112 ALLOCATE(comptyp(ninievo))
113 ALLOCATE(tab_id(ninievo))
114 ALLOCATE(sr_ref(ninievo))
115 ALLOCATE(fscale(ninievo))
116 ALLOCATE(ini_p1(ninievo))
117 ALLOCATE(tab_el(ninievo))
118 ALLOCATE(el_ref(ninievo))
119 ALLOCATE(elscal(ninievo))
120 ALLOCATE(disp(ninievo))
121 ALLOCATE(ener(ninievo))
123
124 tab_id(1:ninievo) = itablf(1:ninievo)
125 tab_el(1:ninievo) = itablf(ninievo+1:ninievo*2)
126
127 DO j = 1,ninievo
128 initype(j) = uparam(6 + 14*(j-1))
129 evotype(j) = uparam(7 + 14*(j-1))
130 evoshap(j) = uparam(8 + 14*(j-1))
131 comptyp(j) = uparam(9 + 14*(j-1))
132 sr_ref(j) = uparam(11 + 14*(j-1))
133 fscale(j) = uparam(12 + 14*(j-1))
134 ini_p1(j) = uparam(13 + 14*(j-1))
135 el_ref(j) = uparam(15 + 14*(j-1))
136 elscal(j) = uparam(16 + 14*(j-1))
137 disp(j) = uparam(17 + 14*(j-1))
138 alpha2(j) = uparam(18 + 14*(j-1))
139 ener(j) = uparam(19 + 14*(j-1))
140 ENDDO
141
142
143
144 IF (uvar(1,1) == zero) THEN
145
146 IF (ilen == 1) THEN
147 uvar(1:nel,1) = aldt(1:nel)
148
149 ELSE
150 DO i = 1,nel
151 uvar(i,1) = exp(third*log(vol(i)))
152 ENDDO
153 ENDIF
154 ENDIF
155 l0(1:nel) = uvar(1:nel,1)
156
157 epsmod(1:nel) = uvar(1:nel,2)
158
159 ALLOCATE(dmgini(nel,ninievo))
160 ALLOCATE(dmgevo(nel,ninievo))
161 ALLOCATE(fcrit(nel))
162 DO j = 1,ninievo
163 DO i=1,nel
164
165 dmgini(i,j) = uvar(i,3+(j-1)*3)
166
167 dmgevo(i,j) = uvar(i,4+(j-1)*3)
168 ENDDO
169 ENDDO
170
171 fcrit(1:nel) = 0
172
173
174
175
176 DO i=1,nel
177
178
179 p(i) = -third*(signxx(i) + signyy(i) + signzz(i))
180 sxx = signxx(i) + p(i)
181 syy = signyy(i) + p(i)
182 szz = signzz(i) + p(i)
183 svm(i) = half*(sxx**2 + syy**2 + szz**2)
184 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
185 svm(i) = sqrt(three*svm(i))
186 triax(i) = -p(i)/
max(em20,svm(i))
187 IF (triax(i) < -one) triax(i) = -one
188 IF (triax(i) > one) triax(i) = one
189
190
191 IF (triax(i) > zero) epsmod(i) = epsmod(i) + dpla(i)
192
193
194 sigtens(i,1,1) = signxx(i)
195 sigtens(i,2,2) = signyy(i)
196 sigtens(i,3,3) = signzz(i)
197 sigtens(i,1,2) = signxy(i)
198 sigtens(i,2,3) = signyz(i)
199 sigtens(i,3,1) = signzx(i)
200 sigtens(i,2,1) = signxy(i)
201 sigtens(i,3,2) = signyz(i)
202 sigtens(i,1,3) = signzx(i)
203
204 ENDDO
205
206
207 CALL jacobiew_v(nel,3,sigtens,sig_pr,vect_pr,nrot)
208
209
210 DO i = 1,nel
211
212 IF (sig_pr(i,1) < sig_pr(i,2)) THEN
213 r_inter = sig_pr(i,1)
214 sig_pr(i,1) = sig_pr(i,2)
215 sig_pr(i,2) = r_inter
216 ENDIF
217 IF (sig_pr(i,2) < sig_pr(i,3)) THEN
218 r_inter = sig_pr(i,2)
219 sig_pr(i,2) = sig_pr(i,3)
220 sig_pr(i,3) = r_inter
221 ENDIF
222 IF (sig_pr(i,1) < sig_pr(i,2)) THEN
223 r_inter = sig_pr(i,1)
224 sig_pr(i,1) = sig_pr(i,2)
225 sig_pr(i,2) = r_inter
226 ENDIF
227 sigpmaj(i) = sig_pr(i,1)
228 maxshear(i) = (sig_pr(i,1)-sig_pr(i,3))*half
229
230
231 center = half*(signxx(i)+signyy(i))
232 radius = sqrt((half*(signxx(i)-signyy(i)))**2 + signxy(i)**2)
233 sigp1 = center + radius
234 sigp2 = center - radius
235 devsp1 = sigp1 - third*(sigp1+sigp2)
236 devsp2 = sigp2 - third*(sigp1+sigp2)
237 alpha(i) = devsp2/sign(
max(abs(devsp1),em20),devsp1)
238
239 ENDDO
240
241
242
243
244 DO j = 1,ninievo
245
246 SELECT CASE(initype(j))
247
248 CASE(1)
249 xvec(1:nel,1) = triax(1:nel)
250
251 CASE(2)
252 DO i = 1,nel
253 xvec(i,1) = (svm(i) + ini_p1(j)*p(i))/
max(maxshear(i),em08)
254 ENDDO
255
256 CASE(3,4)
257 xvec(1:nel,1) =
alpha(1:nel)
258
259 CASE(5)
260 DO i = 1,nel
261 xvec(i,1) = (svm(i) + ini_p1(j)*p(i))/
max(sigpmaj(i),em08)
262 ENDDO
263 END SELECT
264 xvec(1:nel,2) = epsp(1:nel)/sr_ref(j)
265 ipos(1:nel,1:2) = 1
266 CALL table_vinterp(table(tab_id(j)),nel,nel,ipos,xvec,epsf,depsf)
267 epsf(1:nel) = epsf(1:nel)*fscale(j)
268
269
270 IF (tab_el(j) > 0) THEN
271 xvec(1:nel,1) = l0(1:nel)/el_ref(j)
272 SELECT CASE (initype(j))
273 CASE(1)
274 xvec(1:nel,2) = triax(1:nel)
275 CASE(2)
276 DO i = 1,nel
277 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/
max(maxshear(i),em08)
278 ENDDO
279 CASE(3,4)
280 xvec(1:nel,2) =
alpha(1:nel)
281 CASE(5)
282 DO i = 1,nel
283 xvec(i,2) = (svm(i) + ini_p1(j)*p(i))/
max(sigpmaj(i),em08)
284 ENDDO
285 END SELECT
286 ipos(1:nel,1:2) = 1
287 CALL table_vinterp(table(tab_el(j)),nel,nel,ipos,xvec,sizefac,dsize)
288 sizefac(1:nel) = sizefac(1:nel)*elscal(j)
289 epsf(1:nel) = epsf(1:nel)*sizefac(1:nel)
290 ENDIF
291
292
293 SELECT CASE (initype(j))
294 CASE(1,2,5)
295 DO i = 1,nel
296 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
297 dmgini(i,j) = dmgini(i,j) + dpla(i)/
max(epsf(i),em20)
298 dmgini(i,j) =
min(dmgini(i,j),one)
299 ENDIF
300 ENDDO
301 CASE(3)
302 IF (nint(ini_p1(j))>0) THEN
303 DO i = 1,nel
304 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
305 dmgini(i,j) = dmgini(i,j) + (epsmod(i)-uvar(i,2))/
max(epsf(i),em20)
306 dmgini(i,j) =
min(dmgini(i,j),one)
307 ENDIF
308 ENDDO
309 ELSE
310 DO i = 1,nel
311 IF (((epsmod(i)-uvar(i,2)) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
312 dmgini(i,j) =
max(dmgini(i,j),epsmod(i)/
max(epsf(i),em20))
313 dmgini(i,j) =
min(dmgini(i,j),one)
314 ENDIF
315 ENDDO
316 ENDIF
317 CASE(4)
318 IF (nint(ini_p1(j))>0) THEN
319 DO i = 1,nel
320 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
321 dmgini(i,j) = dmgini(i,j) + dpla(i)/
max(epsf(i),em20)
322 dmgini(i,j) =
min(dmgini(i,j),one)
323 ENDIF
324 ENDDO
325 ELSE
326 DO i = 1,nel
327 IF ((dpla(i) > zero).AND.(dmgini(i,j)<one).AND.(loff(i) == one)) THEN
328 dmgini(i,j) =
max(dmgini(i,j),pla(i)/
max(epsf(i),em20))
329 dmgini(i,j) =
min(dmgini(i,j),one)
330 ENDIF
331 ENDDO
332 ENDIF
333 END SELECT
334
335
336 SELECT CASE (evotype(j))
337
338 CASE(1)
339 SELECT CASE (evoshap(j))
340
341 CASE(1)
342 DO i = 1,nel
343 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
344 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
345 dmgevo(i,j) = dmgevo(i,j) + l0(i)*dpla(i)/disp(j)
346 dmgevo(i,j) =
min(one,dmgevo(i,j))
347 IF (dmgevo(i,j) >= one) fcrit(i) = j
348 ENDIF
349 ENDDO
350
351 CASE(2)
352 DO i = 1,nel
353 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
354 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
355 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = pla(i)
356 plas_disp = (pla(i) - uvar(i,5+(j-1)*3))*l0(i)/disp(j)
357 dmgevo(i,j) = dmgevo(i,j) + (
alpha2(j)/(one - exp(-
alpha2(j))))*
358 . exp(-
alpha2(j)*plas_disp)*
359 . dpla(i)*l0(i)/disp(j)
360 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
361 dmgevo(i,j) =
min(one,dmgevo(i,j))
362 IF (dmgevo(i,j) >= one) fcrit(i) = j
363 ENDIF
364 ENDDO
365 END SELECT
366
367 CASE(2)
368 SELECT CASE (evoshap(j))
369
370 CASE(1)
371 DO i = 1,nel
372 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
373 . (loff(i) == one).AND.(dmgevoTHEN
374 IF (dmgevo(i,j) == zero) uvar(i,5+(j-1)*3) = sigy(i)
375 yld0 = uvar(i,5+(j-1)*3)
376 dmgevo(i,j) = dmgevo(i,j) + dpla(i)*l0(i)*yld0/(two*ener(j))
377 dmgevo(i,j) =
min(one,dmgevo(i,j))
378 IF (dmgevo(i,j) >= one) fcrit(i) = j
379 ENDIF
380 ENDDO
381
382 CASE(2)
383 DO i = 1,nel
384 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
385 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
386 uvar(i,5+(j-1)*3) = uvar(i,5+(j-1)*3) + sigy(i)*l0(i)*dpla(i)
387 dmgevo(i,j) = one - exp(-(uvar(i,5+(j-1)*3))/ener(j))
388 IF (dmgevo(i,j) > 0.999d0) dmgevo(i,j) = one
389 dmgevo(i,j) =
min(one,dmgevo(i,j))
390 IF (dmgevo(i,j) >= one) fcrit(i) = j
391 ENDIF
392 ENDDO
393 END SELECT
394
395 CASE DEFAULT
396 DO i = 1,nel
397 IF ((dmgini(i,j) >= one).AND.(dpla(i)>zero).AND.
398 . (loff(i) == one).AND.(dmgevo(i,j)<one)) THEN
399 dmgevo(i,j) = dmgini(i,j)
400 dmgevo(i,j) =
min(one,dmgevo(i,j))
401 IF (dmgevo(i,j) >= one) fcrit(i) = j
402 ENDIF
403 ENDDO
404 END SELECT
405 ENDDO
406
407
408
409
410 dfmax(1:nel) = zero
411 dmgmax(1:nel) = zero
412 dmgmul(1:nel) = one
413 DO j = 1,ninievo
414 SELECT CASE (comptyp(j))
415
416 CASE(1)
417 DO i = 1,nel
418 dmgmax(i) =
max(dmgmax(i),dmgevo(i,j))
419 ENDDO
420
421 CASE(2)
422 DO i = 1,nel
423 dmgmul(i) = dmgmul(i)*(one-dmgevo(i,j))
424 ENDDO
425 END SELECT
426 ENDDO
427 dmgmul(1:nel) = one - dmgmul(1:nel)
428 nindx = 0
429 indx(1:nel) = 0
430 DO i = 1,nel
431 IF ((loff(i) == one).AND.(off(i) > zero)) THEN
432 dfmax(i) =
max(dmgmax(i),dmgmul(i))
433 IF (dfmax(i) >= one) THEN
434 nindx = nindx + 1
435 indx(nindx) = i
436 uelr(i) = uelr(i) + one
437 loff(i) = zero
438 IF (nint(uelr(i)) >= failip) THEN
439 off(i) = zero
440 tdele(i) = time
441 ENDIF
442 ENDIF
443 ENDIF
444 ENDDO
445
446
447
448
449 dmg_scale(1:nel) = one - dfmax(1:nel)
450
451
452
453
454
455 uvar(1:nel,2) = epsmod(1:nel)
456 damini(1:nel) = zero
457 DO j = 1,ninievo
458
459 DO i=1,nel
460
461 damini(i) =
max(dmgini(i,j),damini(i))
462
463 uvar(i,3+(j-1)*3) = dmgini(i,j)
464
465 uvar(i,4+(j-1)*3) = dmgevo(i,j)
466 ENDDO
467 ENDDO
468
469
470
471
472 IF (nindx > 0) THEN
473 DO j=1,nindx
474 i = indx(j)
475#include "lockon.inc"
476 WRITE(iout, 1000) ngl(i),fcrit
477 WRITE(istdo,1000) ngl(i),fcrit(i),ipg,time
478 IF (off(i) == zero) THEN
479 WRITE(iout, 2000) ngl(i),time
480 WRITE(istdo,2000) ngl(i),time
481 ENDIF
482#include "lockoff.inc"
483 END DO
484 END IF
485
486
487
488
489 IF (ALLOCATED(initype)) DEALLOCATE(initype)
490 IF (ALLOCATED(evotype)) DEALLOCATE(evotype)
491 IF (ALLOCATED(evoshap)) DEALLOCATE(evoshap)
492 IF (ALLOCATED(comptyp)) DEALLOCATE(comptyp)
493 IF (ALLOCATED(tab_id)) DEALLOCATE(tab_id)
494 IF (ALLOCATED(sr_ref)) DEALLOCATE(sr_ref)
495 IF (ALLOCATED(fscale)) DEALLOCATE(fscale)
496 IF (ALLOCATED(ini_p1)) DEALLOCATE(ini_p1)
497 IF (ALLOCATED(tab_el)) DEALLOCATE(tab_el)
498 IF (ALLOCATED(el_ref)) DEALLOCATE(el_ref)
499 IF (ALLOCATED(elscal)) DEALLOCATE(elscal)
500 IF (ALLOCATED(disp)) DEALLOCATE(disp)
501 IF (ALLOCATED(ener)) DEALLOCATE(ener)
503 IF (ALLOCATED(dmgini)) DEALLOCATE(dmgini)
504 IF (ALLOCATED(dmgevo)) DEALLOCATE(dmgevo)
505 IF (ALLOCATED(fcrit)) DEALLOCATE(fcrit)
506
507 1000 FORMAT(1x,'FOR SOLID ELEMENT NUMBER ',i10,
508 . ' FAILURE (INIEVO) WITH CRITERION NUMBER ',i3,
509 . ' AT GAUSS POINT ',i5,' AT TIME :',1pe12.4)
510 2000 FORMAT(1x,'-- rupture of solid element :',I10,
511 . ' at time :',1PE12.4)
512
subroutine jacobiew_v(dim1, dim2, a, ew, ev, nrot)