35
36
37
38#include "implicit_f.inc"
39
40#include "units_c.inc"
41#include "comlock.inc"
42
43
44
45 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,
46 . ILAY,IP,NPG,NGL(NEL),LF_DAMMX
48 . time,timestep,uparam(nuparam)
50 . signxx(nel),signyy(nel),signzz(nel),
51 . signxy(nel),signyz(nel),signzx(nel)
52
53
54
55 INTEGER, INTENT(INOUT) :: NOFF(NEL)
57 . uvar(nel,nuvar),off(nel),
58 . tdele(nel),dmg_scale(nel),loff(nel)
59 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
60
61
62
63 INTEGER
64 . I,J,INDX(NEL),NINDX,INDX0(NEL),NINDX0,
65 . IFAIL_SO
67 . f1,f2,f11,f22,f66,f12,tmax,fcut
69 . asrate,sxx(nel),syy(nel),szz(nel),
70 . sxy(nel),syz(nel),szx(nel),a,b,findex,rfactr
71
72
73
74
75
76 f1 = uparam(1)
77 f2 = uparam(2)
78 f11 = uparam(3)
79 f22 = uparam(4)
80 f66 = uparam(5)
81 f12 = uparam(6)
82 tmax = uparam(7)
83 fcut = uparam(8)
84 ifail_so = int(uparam(10))
85
86
87 IF (fcut > zero) THEN
88 DO i = 1,nel
89 asrate = two*pi*fcut*timestep
90 asrate = asrate/(one+asrate)
91 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,2)
92 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,3)
93 szz(i) = asrate*signzz(i) + (one - asrate)*uvar(i,4)
94 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,5)
95 syz(i) = asrate*signyz(i) + (one - asrate)*uvar(i,6)
96 szx(i) = asrate*signzx(i) + (one - asrate)*uvar(i,7)
97 uvar(i,2) = sxx(i)
98 uvar(i,3) = syy(i)
99 uvar(i,4) = szz(i)
100 uvar(i,5) = sxy(i)
101 uvar(i,6) = syz(i)
102 uvar(i,7) = szx(i)
103 ENDDO
104 ELSE
105 DO i = 1,nel
106 sxx(i) = signxx(i)
107 syy(i) = signyy(i)
108 szz(i) = signzz(i)
109 sxy(i) = signxy(i)
110 syz(i) = signyz(i)
111 szx(i) = signzx(i)
112 ENDDO
113 ENDIF
114
115
116
117 !====================================================================
118
119 nindx = 0
120 nindx0 = 0
121 indx = 0
122 indx0 = 0
123
124
125 DO i=1,nel
126
127
128 IF (dfmax(i,1)<one) THEN
129
130
131 a = f11*(sxx(i)**2) + f22*(syy(i)**2) +
132 . f22*(szz(i)**2) + f66*(sxy(i)**2) +
133 . f66*(szx(i)**2) + two*f12*sxx(i)*syy(i) +
134 . two*f12*sxx(i)*szz(i)
135 b = f1*sxx(i) + f2*syy(i) + f2*szz(i)
136
137
138 findex = a + b
139 findex =
max(zero,findex)
140
141
142 rfactr = (-b + sqrt((b**2)+four*a))/
max((two*a),em20)
143 dfmax(i,2) = rfactr
144
145
146 dfmax(i,1) =
min(one ,
max(findex,dfmax(i,1)))
147 IF (dfmax(i,1) >= one) THEN
148 nindx = nindx+1
149 indx(nindx) = i
150 IF (ifail_so > 0) THEN
151 uvar(i,1) = time
152 ENDIF
153 ENDIF
154 ENDIF
155
156
157 IF ((uvar(i,1) > zero).AND.(loff(i) /= zero).AND.
158 . (ifail_so > 0).AND.(off(i) /= zero)) THEN
159 dmg_scale(i) = exp(-(time - uvar(i,1))/tmax)
160 IF (dmg_scale(i) < em02) THEN
161 loff(i) = zero
162 tdele(i) = time
163 dmg_scale(i) = zero
164 IF (ifail_so == 1) THEN
165 off(i) = zero
166 nindx0 = nindx0 + 1
167 indx0(nindx0) = i
168 ELSEIF (ifail_so == 2) THEN
169 noff(i) = noff(i) + 1
170 IF (int(noff(i)) >= npg) THEN
171 off(i) = zero
172 nindx0 = nindx0 + 1
173 indx0(nindx0) = i
174 ENDIF
175 ENDIF
176 ENDIF
177 ENDIF
178 ENDDO
179
180
181
182
183 IF(nindx > 0)THEN
184 DO j=1,nindx
185 i = indx(j)
186#include "lockon.inc"
187 WRITE(iout, 1000) ngl(i),ip,ilay
188 WRITE(istdo,1100) ngl(i),ip,ilay,time
189#include "lockoff.inc"
190 END DO
191 ENDIF
192
193 IF(nindx0 > 0)THEN
194 DO j=1,nindx0
195 i = indx0(j)
196#include "lockon.inc"
197 WRITE(iout, 1200) ngl(i),time
198 WRITE(istdo,1200) ngl(i),time
199#include "lockoff.inc"
200 END DO
201 ENDIF
202
203 1000 FORMAT(1x,'FAILURE (TSAIWU) OF SOLID ELEMENT ',i10,1x,
204 .',GAUSS PT',i5,1x,',LAYER',i5)
205 1100 FORMAT(1x,'FAILURE (TSAIWU) OF SOLID ELEMENT ',i10
206 .',GAUSS PT',i5,1x,',LAYER',i5,1x,'AT TIME :',1pe20.13)
207 1200 FORMAT(1x,'-- RUPTURE OF SOLID ELEMENT : ',i10,1x,
208 .'AT TIME :',1pe20.13)
209
210 RETURN