34
35
36
37
38
39#include "implicit_f.inc"
40
41
42
43#include "units_c.inc"
44#include "comlock.inc"
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
70
71
72
73 INTEGER ,INTENT(IN) :: NEL,,NUVAR,IPG,ILAY,
74 INTEGER ,DIMENSION(NEL), INTENT(IN) :: NGL
76 my_real ,
DIMENSION(NEL),
INTENT(IN) :: timestep,off,
77 . signxx,signyy,signxy,signyz,signzx
78 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
79
80
81
82 INTEGER ,DIMENSION(NEL), INTENT(INOUT) :: FOFF
83 my_real ,
DIMENSION(NEL),
INTENT(INOUT) :: dfmax
84 my_real ,
DIMENSION(NEL),
INTENT(OUT) :: tdel
85 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
86
87
88
89 INTEGER :: I,J,NINDX
90 INTEGER ,DIMENSION(NEL) :: INDX
91 my_real :: tba,tbk,kk,sigmax,sigr_ini,sig1,sig2,s1,s2
92
93 tba = uparam(1)
94 tbk = uparam(2)
95 sigr_ini = uparam(3)
96 nindx = 0
97
98 DO i=1,nel
99 IF (off(i) == one .and. foff(i) == 1) THEN
100 s1 = half*(signxx(i) + signyy(i))
101 s2 = half*(signxx(i) - signyy(i))
102 sig1 = s1 + sqrt(s2**2 + signxy(i)**2)
103 sig2 = s1 - sqrt(s2**2 + signxy(i)**2)
104 sigmax =
max(sig1,sig2)
105 IF (sigmax > sigr_ini) uvar(i,1) = uvar(i,1)
106 . + timestep(i)*(sigmax - sigr_ini)**tba
107 IF (uvar(i,1) >= tbk) THEN
108 nindx = nindx + 1
109 indx(nindx) = i
110 foff(i) = 0
111 tdel(i) = time
112 ENDIF
113 ENDIF
114 ENDDO
115
116
117 DO i=1,nel
118 dfmax(i) =
min(one,
max(dfmax(i),uvar(i,1)/tbk))
119 ENDDO
120
121 IF (nindx > 0) THEN
122 DO j=1,nindx
123 i = indx(j)
124#include "lockon.inc"
125 WRITE(iout, 2000) ngl(i),ipg,ilay,ipt
126 WRITE(istdo,2100) ngl(i),ipg,ilay,ipt,time
127#include "lockoff.inc"
128 END DO
129 END IF
130
131 2000 FORMAT(1x,'failure(tb) of shell element ',I10,1X,',gauss pt',
132 . I2,1X,',layer',I3,1X,',integration pt',I3)
133 2100 FORMAT(1X,'failure(tb) of shell element ',I10,1X,',gauss pt',
134 . I2,1X,',layer',I3,1X,',integration pt',I3,1X,'at time :',1PE12.4)
135
136 RETURN