45
46
47
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59#include "comlock.inc"
60#include "com_xfem1.inc"
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
94
95
96 INTEGER NEL,NPARAM,NUVAR,IPT,NFUNC,IXFEM,IXEL,ILAY,
97 . NPTOT,DMG_FLAG
98 INTEGER ,INTENT(IN) :: NTABLF
99 INTEGER, DIMENSION(NTABLF) ,INTENT(IN) :: ITABLF
100 INTEGER NGL(NEL),NOFF(NEL),IFUNC(NFUNC),
101 . ELCRKINI(NXLAYMAX,NEL)
102 my_real time,timestep(nel),uparam(*),dpla(nel),epsp(nel),
103 . tstar(nel),aldt(nel)
104
105
106
109 . uvar(nel,nuvar),off(nel),offl(nel),
110 . signxx(nel),signyy(nel),signxy(nel),signyz(nel),signzx(nel),
111 . tens(nel,5),dfmax(nel),tdel(nel)
112 TYPE(TTABLE) TABLE(*)
113
114
115
116 INTEGER NPF(*)
118 EXTERNAL finter
119
120
121
122
123
124
125
126
127
128
129 INTEGER ::
130 . I,J,K,L,IADR,NINDX,ISHELL,I_MOD,I_DAM,NF_LOC,
131 . ITAB_EPSF,ITAB_INST,IFUN_EL,IFUN_TEMP,IFUN_DMG,IFUN_FAD
132 INTEGER, DIMENSION(NEL) :: INDX,NRATE,RFLAG,DMG_FLAG_INT
133
134 my_real,
DIMENSION(NEL) :: epsf,epsf_n,dmg_scale
136 . dp,p,sigm,sigm_ps,svm,ef1,ef2,df,fac,depsf,lambda,
137 . rate1,rate2,yfac1,yfac2,cc,bb,cr,orm,ss1,ss2,yy,yy_n,dadv,
138 . x1scale,x2scale,x3scale,x4scale,p_thinn,
ecrit,fade_expo,
139 . dcrit,el_ref,sc_el,sc_temp,dd,dn
140 CHARACTER (LEN=3) :: XCHAR
141
142
143
144
145
146
147
148
149
150
151 dmg_flag = 1
152 iadr = (ipt-1)*nel
153 indx = 0
154 sigm_ps = one/sqrt(three)
155
156 IF (uvar(1,5) == zero) THEN
157 DO i=1,nel
158 uvar(i,5) = aldt(i)
159 ENDDO
160 ENDIF
161
162 ishell = int(uparam(2))
163 dcrit = uparam(4)
164 dd = uparam(5)
165 dn = uparam(6)
166 sc_temp = uparam(7)
167 sc_el = uparam(8)
168 el_ref = uparam(9)
169 dadv = uparam(11)
170 x1scale = uparam(12)
171 x2scale = uparam(13)
172 x3scale = uparam(14)
173 x4scale = uparam(15)
174 p_thinn = uparam(16)
176 fade_expo = uparam(18)
177 i_mod = int(uparam(19))
178
179 IF (ixfem == 1 .and. ishell == 1) ishell=2
180
181 i_dam = 0
182 IF (
ecrit /= zero .OR. fade_expo /= zero) i_dam = 1
183
184 nindx = 0
185 rflag = 0
186
187 DO i=1,nel
188 tens(i,1) = signxx(i)
189 tens(i,2) = signyy(i)
190 tens(i,3) = signxy(i)
191 tens(i,4) = signyz(i)
192 tens(i,5) = signzx(i)
193 END DO
194
195 IF (ixel > 0) THEN
196 IF (ixel == 1) THEN
197 xchar = '1st'
198 ELSEIF (ixel == 2) THEN
199 xchar = '2nd'
200 ELSEIF (ixel == 3) THEN
201 xchar = '3rd'
202 ENDIF
203 ELSE
204 xchar = ' '
205 ENDIF
206
207
208 itab_epsf = itablf(1)
209
210 itab_inst = itablf(2)
211
212 ifun_el = ifunc(2)
213 ifun_temp = ifunc(3)
214 ifun_dmg = ifunc(3)
215 ifun_fad = ifunc(4)
216
217
218 DO i=1,nel
219 p = third*(signxx(i) + signyy(i))
220 svm = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
221 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
222 sigm = p /
max(em20,svm)
223
224
225 xx0(1)=sigm
226 xx0(2)=epsp(i) *x2scale
228 epsf(i) = yy * x1scale
229 ENDDO
230
231 DO i=1,nel
232
233 IF (ifun_el > 0) THEN
234 lambda = uvar(i,5) / el_ref
235 fac = sc_el*finter(ifun_el,lambda,npf,tf,df)
236 epsf(i) = epsf(i)* fac
237 ENDIF
238
239 IF (ifun_temp > 0) THEN
240 fac = sc_temp*finter(ifun_temp,tstar(i),npf,tf,df)
241 epsf(i) = epsf(i)* fac
242 ENDIF
243
244
245
246 IF (itab_inst > 0) THEN
247 xx0(2)=epsp(i) *x4scale
249 epsf_n(i) = yy_n * x3scale
250 ELSEIF (
ecrit > 0.0)
THEN
252 ELSE
253 epsf_n(i) = zero
254 ENDIF
255
256
257 IF (fade_expo < zero) THEN
258 lambda = uvar(i,5) / el_ref
259 fade_expo = finter(ifun_fad,lambda,npf,tf,df)
260 ENDIF
261
262 ENDDO
263
264 IF (ishell == 1) THEN
265 IF (ixfem == 1 .OR. ixfem == 2) THEN
266 DO i=1,nel
267 IF (ishell == 1 .AND. off(i)==one) THEN
268 IF (ifun_dmg > 0) THEN
269 dp = finter(ifun_dmg,uvar(i,1),npf,tf,df)
270 ELSE
271 IF(uvar(i,1) == zero) THEN
272 dp = one
273 ELSE
274
275 dp = dn*uvar(i,1)**(one-one/dn)
276 ENDIF
277 ENDIF
278 IF (epsf(i) > zero) uvar(i,1)=
279 . uvar(i,1)+dp*dpla(i)/epsf(i)
280 IF (ixel == 0) THEN
281 IF (elcrkini(ilay,i)==0) THEN
282 IF (uvar(i,1) >= dcrit) THEN
283 elcrkini(ilay,i) = -1
284 off(i) = four_over_5
285 nindx=nindx+1
286 indx(nindx)=i
287 rflag(i) = 1
288 tdel(i)= time
289 ENDIF
290 ELSEIF (elcrkini(ilay,i) == 2) THEN
291 IF (uvar(i,1) >= dadv) THEN
292 elcrkini(ilay,i) = 1
293 off(i) = four_over_5
294 nindx=nindx+1
295 indx(nindx)=i
296 rflag(i) = -1
297 tdel(i)= time
298 ENDIF
299 ENDIF
300 ELSEIF (uvar(i,1 )>= dcrit) THEN
301 off(i) = four_over_5
302 nindx=nindx+1
303 indx(nindx)=i
304 rflag(i) = 2
305 ENDIF
306 ENDIF
307 ENDDO
308 ENDIF
309
310 IF (nindx > 0) THEN
311 DO j=1,nindx
312 i=indx(j)
313#include "lockon.inc"
314
315 IF (rflag(i)>0.AND.rflag(i)<2)
316 . WRITE(iout, 3800) ngl(i)
317 IF (rflag(i)>0.AND.rflag(i)<2)
318 . WRITE(istdo,3900) ngl(i),time
319
320 IF (rflag(i) < 0) WRITE(iout, 4000) ngl(i)
321 IF (rflag(i) < 0) WRITE(istdo,4100) ngl(i),time
322
323 IF (rflag(i) > 1) WRITE(iout, 4200)xchar,ngl(i)
324 IF (rflag(i) > 1) WRITE(istdo,4300)xchar,ngl(i),time
325#include "lockoff.inc"
326 ENDDO
327 ENDIF
328 ENDIF
329
330 IF (ishell > 1) THEN
331 IF (ixfem == 1) THEN
332 DO i=1,nel
333 IF (off(i) == one)THEN
334 IF (uvar(i,1) < dcrit) THEN
335 IF (ifun_dmg > 0) THEN
336 dp = finter(ifun_dmg,uvar(i,1),npf,tf,df)
337 ELSE
338 IF(uvar(i,1) == zero) THEN
339 dp = one
340 ELSE
341
342 dp = dn*uvar(i,1)**(one-one/dn)
343 ENDIF
344 ENDIF
345 IF (epsf(i) > zero) uvar(i,1)=
346 . uvar(i,1)+dp*dpla(i)/epsf(i)
347 IF (ixel == 0) THEN
348 IF (elcrkini(ilay,i) == 0 .AND.
349 . uvar(i,1) >= dcrit) THEN
350 IF (ishell == 2) THEN
351 signxx(i) = zero
352 signyy(i) = zero
353 signxy(i) = zero
354 signyz(i) = zero
355 signzx(i) = zero
356 ENDIF
357 nindx=nindx+1
358 indx(nindx)=i
359 elcrkini(ilay,i) = -1
360 noff(i) = noff(i) + 1
361 IF (noff(i) == nptot) THEN
362 off(i) = four_over_5
363 tdel(i)= time
364 ENDIF
365 rflag(i) = 1
366 ELSEIF (elcrkini(ilay,i) == 2 .AND.
367 . uvar(i,1) >= dadv) THEN
368 IF (ishell == 2) THEN
369 signxx(i) = zero
370 signyy(i) = zero
371 signxy(i) = zero
372 signyz(i) = zero
373 signzx(i) = zero
374 ENDIF
375 nindx=nindx+1
376 indx(nindx)=i
377 elcrkini(ilay,i) = 1
378 noff(i) = noff(i) + 1
379 IF(dadv < dcrit) uvar(i,1) = dcrit
380 IF (noff(i) == nptot) THEN
381 off(i) = four_over_5
382 tdel(i)= time
383 ENDIF
384 rflag(i) = -1
385 ENDIF
386 ELSEIF (uvar(i,1) >= dcrit) THEN
387 IF (ishell == 2) THEN
388 signxx(i) = zero
389 signyy(i) = zero
390 signxy(i) = zero
391 signyz(i) = zero
392 signzx(i) = zero
393 ENDIF
394 nindx=nindx+1
395 indx(nindx)=i
396 noff(i) = noff(i) + 1
397 rflag(i) = 3
398 IF (noff(i) == nptot) THEN
399 off(i) = four_over_5
400 rflag(i) = 4
401 ENDIF
402 ENDIF
403 ELSEIF (ishell == 2) THEN
404 signxx(i) = zero
405 signyy(i) = zero
406 signxy(i) = zero
407 signyz(i) = zero
408 signzx(i) = zero
409 ENDIF
410 ENDIF
411 ENDDO
412 ELSEIF (ixfem == 2) THEN
413 DO i=1,nel
414 IF (off(i)==one .AND. (ishell==2 .OR. ishell==3))THEN
415 IF (uvar(i,1) < dcrit) THEN
416 IF (ifun_dmg > 0) THEN
417 dp = finter(ifun_dmg,uvar(i,1),npf,tf,df)
418 ELSE
419 IF(uvar(i,1) == zero) THEN
420 dp = one
421 ELSE
422
423 dp = dn*uvar(i,1)**(one-one/dn)
424 ENDIF
425 ENDIF
426
427 IF (epsf(i) > zero) uvar(i,1)=
428 . uvar(i,1)+dp*dpla(i)/epsf(i)
429 IF (ixel == 0) THEN
430 IF (elcrkini(ilay,i) == 0 .AND.
431 . uvar(i,1) >= dcrit) THEN
432 IF (ishell == 2) THEN
433 signxx(i) = zero
434 signyy(i) = zero
435 signxy(i) = zero
436 signyz(i) = zero
437 signzx(i) = zero
438 ENDIF
439 nindx=nindx+1
440 indx(nindx)=i
441 noff(i) = noff(i) + 1
442 IF (noff(i) == nptot) THEN
443 off(i) = four_over_5
444 elcrkini(ilay,i) = -1
445 rflag(i) = 1
446 tdel(i)= time
447 ENDIF
448 ELSEIF (elcrkini(ilay,i) == 2 .AND.
449 . uvar(i,1) >= dadv) THEN
450 IF (ishell == 2) THEN
451 signxx(i) = zero
452 signyy(i) = zero
453 signxy(i) = zero
454 signyz(i) = zero
455 signzx(i) = zero
456 ENDIF
457 nindx=nindx+1
458 indx(nindx)=i
459 noff(i) = noff(i) + 1
460 IF(dadv < dcrit) uvar(i,1) = dcrit
461 IF (noff(i) == nptot) THEN
462 off(i) = four_over_5
463 elcrkini(ilay,i) = 1
464 rflag(i) = -1
465 tdel(i)= time
466 ENDIF
467 ENDIF
468 ELSEIF (uvar(i,1) >= dcrit) THEN
469 IF (ishell == 2) THEN
470 signxx(i) = zero
471 signyy(i) = zero
472 signxy(i) = zero
473 signyz(i) = zero
474 signzx(i) = zero
475 ENDIF
476 nindx=nindx+1
477 indx(nindx)=i
478 noff(i) = noff(i) + 1
479 IF (noff(i) == nptot) THEN
480 off(i) = four_over_5
481 rflag(i) = 4
482 ENDIF
483 ENDIF
484 ELSEIF (ishell == 2) THEN
485 signxx(i) = zero
486 signyy(i) = zero
487 signxy(i) = zero
488 signyz(i) = zero
489 signzx(i) = zero
490 ENDIF
491 ENDIF
492 ENDDO
493 ENDIF
494
495 IF (nindx > 0) THEN
496 DO j=1,nindx
497 i = indx(j)
498#include "lockon.inc"
499 IF(ixfem ==1)THEN
500
501 IF (rflag(i)>0.AND.rflag(i)<3)WRITE(iout,4600)ngl(i),ipt
502 IF (rflag(i)>0.AND.rflag(i)<3)WRITE(istdo,4700)
503 . ngl(i),ipt,time
504
505 IF (rflag(i) < 0) WRITE(iout, 4800) ngl(i),ipt
506 IF (rflag(i) < 0) WRITE(istdo,4900) ngl(i),ipt,time
507
508 IF (rflag(i) > 2) WRITE(iout, 4400)xchar,ngl(i),ipt
509 IF (rflag(i) > 2) WRITE(istdo,4500)xchar,ngl(i),ipt,time
510
511 IF (rflag(i) /= 0 .AND. ixel == 0)
512 . WRITE(iout, 2000) ngl(i),ipt
513 IF (rflag(i) /= 0.AND. ixel == 0)
514 . WRITE(istdo,2100) ngl(i),ipt,time
515 ELSEIF(ixfem ==2)THEN
516
517 IF (rflag(i)>0.AND.rflag(i)<3)WRITE(iout,3800)ngl(i)
518 IF (rflag(i)>0.AND.rflag(i)<3)WRITE(istdo,3900)
519 . ngl(i),time
520
521 IF (rflag(i) < 0) WRITE(iout, 4000) ngl(i)
522 IF (rflag(i) < 0) WRITE(istdo,4100) ngl(i),time
523
524 IF (rflag(i) > 2) WRITE(iout, 4200)xchar,ngl(i)
525 IF (rflag(i) > 2) WRITE(istdo,4300)xchar,ngl(i),time
526 ENDIF
527#include "lockoff.inc"
528 ENDDO
529 ENDIF
530 ENDIF
531
532
533 DO i=1,nel
534 dfmax(i)=
min(one,
max(dfmax(i),uvar(i,1)/dcrit))
535 ENDDO
536
537 2000 FORMAT(1x,'FAILURE OF SHELL ELEMENT (TAB)',i10,1x,
538 .'LAYER',i10)
539 2100 FORMAT(1x,'FAILURE OF SHELL ELEMENT (TAB)',i10,1x,
540 .'LAYER',i10,':',/,'AT TIME :',1pe12.4)
541 2200 FORMAT(1x,'STRESS TENSOR SET TO ZERO IN THE LAYER')
542 2400 FORMAT(1x,1pg20.13,' % OF THICKNESS OF SHELL BROKEN ')
543 2500 FORMAT(1x,' LOWER SKIN -> UPPER SKIN ')
544 2600 FORMAT(1x,' UPPER SKIN -> LOWER SKIN ')
545 3700 FORMAT(1x,'STRESS TENSOR SET TO ZERO, LAYER',i10)
546
547 2410 FORMAT(1x,1pg20.13,' % OF THICKNESS OF SHELL ',i10,' BROKEN ')
548 3800 FORMAT(1x,'CRACK INITIALIZATION IN SHELL ELEMENT (TAB)',i10)
549 3900 FORMAT(1x,'CRACK INITIALIZATION IN SHELL ELEMENT (TAB)',i10,
550 . 1x,':',/,' AT TIME :',1pe12.4)
551 4000 FORMAT(1x,'CRACK ADVANCEMENT IN SHELL ELEMENT (TAB) ',i10)
552 4100 FORMAT(1x,'CRACK ADVANCEMENT IN SHELL ELEMENT (TAB) ',i10,
553 . 1x,':',/,' AT TIME :',1pe12.4)
554 4200 FORMAT(1x,'DELETE OF ',a5,' CRACKED PHANTOM ELEMENT'/
555 . 1x,'OF THE ORIGINAL SHELL ELEMENT (TAB) ',
556 . i10)
557 4300 FORMAT(1x,'DELETE OF ',a5,' CRACKED PHANTOM ELEMENT'/
558 . 1x,'OF THE ORIGINAL SHELL ELEMENT (TAB) ',
559 . i10,':',/1x,'AT TIME :',1pe20.13)
560 4400 FORMAT(1x,'DELETE OF ',a5,' CRACKED PHANTOM ELEMENT'/
561 . 1x,'OF THE ORIGINAL SHELL ELEMENT (TAB) ',
562 . i10,' LAYER',i10)
563 4500 FORMAT(1x,'DELETE OF ',a5,' CRACKED PHANTOM ELEMENT'/
564 . 1x,'OF THE ORIGINAL SHELL ELEMENT (TAB) ',
565 . i10,' LAYER',i10,':',/1x,'AT TIME :',1pe20.13)
566 4600 FORMAT(1x,'CRACK INITIALIZATION IN SHELL ELEMENT (TAB)',i10,
567 . 1x,'LAYER',i10)
568 4700 FORMAT(1x,'CRACK INITIALIZATION IN SHELL ELEMENT (TAB)',i10,
569 . 1x,'LAYER'':'' AT TIME :',1pe12.4)
570 4800 FORMAT(1x,'CRACK ADVANCEMENT IN SHELL ELEMENT (TAB) ',i10,
571 . 1x,'LAYER',i10)
572 4900 FORMAT(1x,'CRACK ADVANCEMENT IN SHELL ELEMENT (TAB) ',i10,
573 . 1x,'LAYER',i10,':',/,' AT TIME :',1pe12.4)
574 5010 FORMAT(1x,'SHELL ELEMENT FAILURE DUE TO THINNING (TAB)',i10)
575 5020 FORMAT(1x,'SHELL ELEMENT FAILURE DUE TO THINNING (TAB)',i10,
576 . 1x,':',/1x,'AT TIME :',1pe12.4)
577
578
579 RETURN
subroutine ecrit(timers, partsav, ms, v, in, r, dmas, weight, enintot, ekintot, a, ar, fxbipm, fxbrpm, monvol, xmom_sms, sensors, qfricint, ipari, weight_md, wfexth, iflag, ms_2d, multi_fvm, mas_nd, kend, h3d_data, dynain_data, usreint, output)