35
36
37
38#include "implicit_f.inc"
39
40
41
42#include "units_c.inc"
43#include "comlock.inc"
44
45
46
47 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT,
48 . IGTYP,PLY_ID
49 INTEGER, DIMENSION(NEL), INTENT(IN) :: NGL
51 my_real,
DIMENSION(NEL),
INTENT(IN) :: depsxx,depsyy,
52 . depsxy,signxx,signyy,signxy,aldt
53 my_real,
DIMENSION(NUPARAM),
INTENT(IN) :: uparam
54
55
56
57 INTEGER, INTENT(OUT) :: DMG_FLAG
58 INTEGER, DIMENSION(NEL), INTENT(INOUT) :: FOFF
59 my_real,
DIMENSION(NEL),
INTENT(INOUT) :: dfmax,tdel
60 my_real,
DIMENSION(NEL,5),
INTENT(OUT) :: dmg_scale
61 my_real,
DIMENSION(NEL,NUVAR),
INTENT(INOUT) :: uvar
62
63
64
65 INTEGER I,J,NINDX,FAILMOD,MODE,ISHAP11T,ISHAP11C,ISHAP22T,
66 . ISHAP22C,ISHAP12T,ISHAP12C,NMOD
67 INTEGER ,DIMENSION(NEL) :: INDX
68 INTEGER ,DIMENSION(NEL,6) :: FMODE
69 my_real dam(nel,6),ener(nel,6),le(nel)
70 my_real sigma_11t,sigma_11c,sigma_22t,sigma_22c,
71 . sigma_12t,sigma_12c,g_11t,g_11c,g_22t,g_22c,g_12t,g_12c
72
73
74
75
76
77 sigma_11t = uparam(3)
78 sigma_11c = uparam(4)
79 sigma_22t = uparam(5)
80 sigma_22c = uparam(6)
81 sigma_12t = uparam(9)
82 sigma_12c = uparam(10)
83 g_11t = uparam(15)
84 g_11c = uparam(16)
85 g_22t = uparam(17)
86 g_22c = uparam(18)
87 g_12t = uparam(21)
88 g_12c = uparam(22)
89 ishap11t = nint(uparam(27))
90 ishap11c = nint(uparam(28))
91 ishap22t = nint(uparam(29))
92 ishap22c = nint(uparam(30))
93 ishap12t = nint(uparam(33))
94 ishap12c = nint(uparam(34))
95 nmod
97
98
99 dmg_flag = 3
100
101
102 IF (uvar(1,13) == zero) THEN
103 uvar(1:nel,13) = aldt(1:nel)
104 ENDIF
105 le(1:nel) = uvar(1:nel,13)
106
107
108 DO j = 1,6
109 DO i = 1,nel
110
111 dam(i,j) = uvar(i,j)
112
113 ener(i,j) = uvar(i,j+6)
114 ENDDO
115 ENDDO
116
117
118
119
120
121 nindx = 0
122
123
124 DO i=1, nel
125
126 IF (foff(i) == 1) THEN
127
128
129 fmode(i,1:6) = 0
130 failmod = 0
131
132
133 mode = 1
134 IF (signxx(i) > sigma_11t .AND. signxx(i) > zero .AND. dam(i,mode) < one) THEN
135
136 IF (ishap11t == 1) THEN
137 dam(i,mode) = dam(i,mode) + le(i)*depsxx(i)*sigma_11t/(two*g_11t)
138 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
139
140 ELSEIF (ishap11t == 2) THEN
141 ener(i,mode) = ener(i,mode) + signxx(i)*le(i)*depsxx(i)
142 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
143 dam(i,mode) = (one - exp(-ener(i,mode)/g_11t))
144 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
145 ENDIF
146 dam(i,mode) =
min(dam(i,mode),one)
147
148 dfmax(i) =
max(dfmax(i),dam(i,mode))
149 ENDIF
150
151 IF (dam(i,mode) >= one) THEN
152 failmod = failmod + 1
153 fmode(i,mode) = 1
154 ENDIF
155
156
157 mode = 2
158 IF (signyy(i) > sigma_22t .AND. signyy(i) > zero .AND. dam(i,mode) < one) THEN
159
160 IF (ishap22t == 1) THEN
161 dam(i,mode) = dam(i,mode) + le(i)*depsyy(i)*sigma_22t/(two*g_22t)
162 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
163
164 ELSEIF (ishap22t == 2) THEN
165 ener(i,mode) = ener(i,mode) + signyy(i)*le(i)*depsyy(i)
166 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
167 dam(i,mode) = (one - exp(-ener(i,mode)/g_22t))
168 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
169 ENDIF
170 dam(i,mode) =
min(dam(i,mode),one)
171
172 dfmax(i) =
max(dfmax(i),dam(i,mode))
173 ENDIF
174
175 IF (dam(i,mode) >= one) THEN
176 failmod = failmod + 1
177 fmode(i,mode) = 1
178 ENDIF
179
180
181 mode = 3
182 IF (signxy(i) > sigma_12t .AND. signxy(i) > zero .AND. dam(i,mode) < one) THEN
183
184 IF (ishap12t == 1) THEN
185 dam(i,mode) = dam(i,mode) + le(i)*depsxy(i)*sigma_12t/(four*g_12t)
186 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
187
188 ELSEIF (ishap12t == 2) THEN
189 ener(i,mode) = ener(i,mode) + signxy(i)*le(i)*half
190 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
191 dam(i,mode) = (one - exp(-ener(i,mode)/g_12t))
192 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
193 ENDIF
194 dam(i,mode) =
min(dam(i,mode),one)
195
196 dfmax(i) =
max(dfmax(i),dam(i,mode))
197 ENDIF
198 ! -> check mode 3 failure
199 IF (dam(i,mode) >= one) THEN
200 failmod = failmod + 1
201 fmode(i,mode) = 1
202 ENDIF
203
204
205 mode = 4
206 IF (-signxx(i) > sigma_11c .AND. signxx(i) < zero .AND. dam(i,mode) < one) THEN
207
208 IF (ishap11c == 1) THEN
209 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxx(i))*sigma_11c/(two*g_11c)
210 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
211
212 ELSEIF (ishap11c == 2) THEN
213 ener(i,mode) = ener(i,mode) + abs(signxx(i))*le(i)*abs(depsxx(i))
214 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
215 dam(i,mode) = (one - exp(-ener(i,mode)/g_11c))
216 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
217 ENDIF
218 dam(i,mode) =
min(dam(i,mode),one)
219
220 dfmax(i) =
max(dfmax(i),dam(i,mode))
221 ENDIF
222
223 IF (dam(i,mode) >= one) THEN
224 failmod = failmod + 1
225 fmode(i,mode) = 1
226 ENDIF
227
228
229 mode = 5
230 IF (-signyy(i) > sigma_22c .AND. signyy(i) < zero .AND. dam(i,mode) < one) THEN
231
232 IF (ishap22c == 1) THEN
233 dam(i,mode) = dam(i,mode) + le(i)*abs(depsyy(i))*sigma_22c/(two*g_22c)
234 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
235
236 ELSEIF (ishap22c == 2) THEN
237 ener(i,mode) = ener(i,mode) + abs(signyy(i))*le(i)*abs(depsyy(i))
238 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
239 dam(i,mode) = (one - exp(-ener(i,mode)/g_22c))
240 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
241 ENDIF
242 dam(i,mode) =
min(dam(i,mode),one)
243
244 dfmax(i) =
max(dfmax(i),dam(i,mode))
245 ENDIF
246
247 IF (dam(i,mode) >= one) THEN
248 failmod = failmod + 1
249 fmode(i,mode) = 1
250 ENDIF
251
252
253 mode = 6
254 IF (-signxy(i) > sigma_12c .AND. signxy(i) < zero .AND. dam(i,mode) < one) THEN
255
256 IF (ishap12c == 1) THEN
257 dam(i,mode) = dam(i,mode) + le(i)*abs(depsxy(i))*sigma_12c/(four*g_12c)
258 dam(i,mode) =
max(dam(i,mode),uvar(i,mode))
259
260 ELSEIF (ishap12c == 2) THEN
261 ener(i,mode) = ener(i,mode) + abs(signxy(i))*le(i)*half*abs(depsxy(i))
262 ener(i,mode) =
max(ener(i,mode),uvar(i,mode+6))
263 dam(i,mode) = (one - exp(-ener(i,mode)/g_12c))
264 IF (dam(i,mode) > 0.999d0) dam(i,mode) = one
265 ENDIF
266 dam(i,mode) =
min(dam(i,mode),one)
267
268 dfmax(i) =
max(dfmax(i),dam(i,mode))
269 ENDIF
270
271 IF (dam(i,mode) >= one) THEN
272 failmod = failmod + 1
273 fmode(i,mode) = 1
274 ENDIF
275
276
277 IF (failmod >= nmod) THEN
278 foff(i) = 0
279 tdel(i) = time
280 nindx = nindx + 1
281 indx(nindx) = i
282 ENDIF
283 ENDIF
284 ENDDO
285
286
287 ! - compute stress softening scale factors
288
289 DO i=1, nel
290 IF (foff(i) == 1) THEN
291
292 IF (signxx(i) >= zero) THEN
293 dmg_scale(i,1) = one - dam(i,1)
294 ELSE
295 dmg_scale(i,1) = one - dam(i,4)
296 ENDIF
297
298 IF (signyy(i) >= zero) THEN
299 dmg_scale(i,2) = one - dam(i,2)
300 ELSE
301 dmg_scale(i,2) = one - dam(i,5)
302 ENDIF
303
304 IF (signxy(i) >= zero) THEN
305 dmg_scale(i,3) = one - dam(i,3)
306 ELSE
307 dmg_scale(i,3) = one - dam(i,6)
308 ENDIF
309 ENDIF
310 ENDDO
311
312
313
314
315 DO j = 1,6
316 DO i = 1,nel
317
318 uvar(i,j) = dam(i,j)
319
320 uvar(i,j+6) = ener(i,j)
321 ENDDO
322 ENDDO
323
324
325
326
327 IF (nindx > 0) THEN
328 DO j=1,nindx
329 i = indx(j)
330#include "lockon.inc"
331 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
332 WRITE(iout, 1200) ngl(i),ipg,ply_id,ipt
333 WRITE(istdo,1200) ngl(i),ipg,ply_id,ipt
334 ELSEIF (igtyp == 1 .OR. igtyp == 9) THEN
335 WRITE(iout, 1000) ngl(i),ipg,ipt
336 WRITE(istdo,1000) ngl(i),ipg,ipt
337 ELSE
338 WRITE(iout, 1100) ngl(i),ipg,ilay,ipt
339 WRITE(istdo,1100) ngl(i),ipg,ilay,ipt
340 ENDIF
341 IF (fmode(i,1)==1) WRITE(iout, 2000) '1 - TRACTION XX'
342 IF (fmode(i,2)==1) WRITE(iout, 2000) '2 - TRACTION YY'
343 IF (fmode(i,3)==1) WRITE(iout, 2000) '3 - POSITIVE SHEAR XY'
344 IF (fmode(i,4)==1) WRITE(iout, 2000) '4 - COMPRESSION XX'
345 IF (fmode(i,5)==1) WRITE(iout, 2000) '5 - COMPRESSION YY'
346 IF (fmode(i,6)==1) WRITE(iout, 2000) '6 - NEGATIVE SHEAR XY'
347#include "lockoff.inc"
348 ENDDO
349 ENDIF
350
351 1000 FORMAT(1x,'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
352 . i2,1x,',INTEGRATION PT',i3)
353 1100 FORMAT(1x,'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
354 . i2,1x,',LAYER',i3,1x,',INTEGRATION PT',i3)
355 1200 FORMAT(1x,'FAILURE (ORTHENERG) OF SHELL ELEMENT ',i10,1x,',GAUSS PT',
356 . i2,1x,',PLY ID',i10,1x,',INTEGRATION PT',i3)
357 2000 FORMAT(1x,'MODE',1x,a)
358