37
38
39
40#include "implicit_f.inc"
41
42
43
44
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
74
75#include "mvsiz_p.inc"
76#include "com01_c.inc"
77#include "units_c.inc"
78#include "comlock.inc"
79#include "param_c.inc"
80
81
82
83 INTEGER NEL,NUPARAM, NUVAR,ILAY,NPT0
84 INTEGER NGL(NEL)
85 INTEGER, INTENT(IN) :: LF_DAMMX
87 . time,timestep(nel),uparam(nuparam),
88 . signxx(nel),signyy(nel),signzz(nel),
89 . signxy(nel),signyz(nel),signzx(nel)
90
91
92
93 INTEGER NOFF(NEL)
94 my_real uvar(nel,nuvar), off(nel), tdele(nel)
95 my_real ,
DIMENSION(NEL,LF_DAMMX),
INTENT(INOUT) :: dfmax
96
97
98
99 INTEGER
100 . I,J,IDEL,IDEL_L,IFLAG,INDX(MVSIZ),IADBUF,NINDX,
101 . NINDEX,INDEX(MVSIZ),IFAIL,JJ,IMATLY,
102 . IUNIDIR,IFABRIC,INDX0(MVSIZ),NINDX0,FSMOOTH
104 . sigt1,sigt2, sigc1,sigc2,
105 . fsig12,f1,fa,fb,fc,pn12,pp12,pn22,
106 . fac,tmax,fa_2,fb_2,fc_2,fcut,asrate,
107 . sxx(nel),syy(nel),szz(nel),
108 . sxy(nel),syz(nel),szx(nel)
109
110 sigt1 = uparam(1 )
111 sigt2 = uparam(2)
112 sigc1 = uparam(3)
113 sigc2 = uparam(4)
114 fsig12 = uparam(5)
115 pp12 = uparam(6)
116 pn12 = uparam(7)
117 pn22 = uparam(8)
118 tmax = uparam(9)
119 iflag = int(uparam(11))
120 fcut = uparam(12)
121 IF (fcut > zero) THEN
122 fsmooth = 1
123 asrate = two*pi*fcut*timestep(1)
124 asrate = asrate/(one+asrate)
125 ELSE
126 fsmooth = 0
127 ENDIF
128 indx(1:mvsiz) = 0
129 index(1:mvsiz) = 0
130
131
132
133 IF(isigi == 0)THEN
134 IF ((uvar(1,8) == zero).AND.(off(1) == one)) THEN
135 DO i=1,nel
136 uvar(i,8) = one
137 ENDDO
138 ENDIF
139 ENDIF
140
141 iunidir = 0
142 ifabric = 0
143 DO i=1,nel
144 IF(off(i)<em01) off(i)=zero
145 IF(off(i)<one) off(i)=off(i)*four_over_5
146 IF (fsmooth > 0) THEN
147 sxx(i) = asrate*signxx(i) + (one - asrate)*uvar(i,9)
148 syy(i) = asrate*signyy(i) + (one - asrate)*uvar(i,10)
149 szz(i) = asrate*signzz(i) + (one - asrate)*uvar(i,11)
150 sxy(i) = asrate*signxy(i) + (one - asrate)*uvar(i,12)
151 syz(i) = asrate*signyz(i) + (one - asrate)*uvar(i,13)
152 szx(i) = asrate*signzx(i) + (one - asrate)*uvar(i,14)
153 uvar(i,9) = sxx(i)
154 uvar(i,10) = syy(i)
155 uvar(i,11) = szz(i)
156 uvar(i,12) = sxy(i)
157 uvar(i,13) = syz(i)
158 uvar(i,14) = szx(i)
159 ELSE
160 sxx(i) = signxx(i)
161 syy(i) = signyy(i)
162 szz(i) = signzz(i)
163 sxy(i) = signxy(i)
164 syz(i) = signyz(i)
165 szx(i) = signzx(i)
166 ENDIF
167 END DO
168
169
170
171
172 nindx = 0
173 nindx0= 0
174 indx = 0
175 indx0 = 0
176 DO i=1,nel
177 f1 = zero
178 fa = zero
179 fb = zero
180 fc = zero
181 fa_2 = zero
182 fb_2 = zero
183 fc_2 = zero
184
185 IF (off(i) == one )THEN
186
187 IF (iflag == 1) THEN
188
189
190
191 IF (uvar(i,8) < one) THEN
192 uvar(i,8) = exp(-(time - uvar(i,7))/tmax)
193 IF (uvar(i,8) < em02) uvar(i,8) = zero
194 signxx(i) = uvar(i,1)*uvar(i,8)
195 signyy(i) = uvar(i,2)*uvar(i,8)
196 signzz(i) = uvar(i,3)*uvar(i,8)
197 signxy(i) = uvar(i,4)*uvar(i,8)
198 signyz(i) = uvar(i,5)*uvar(i,8)
199 signzx(i) = uvar(i,6)*uvar(i,8)
200 IF (uvar(i,8) == zero )THEN
201 off(i)=four_over_5
202 nindx=nindx+1
203 indx(nindx)=i
204 tdele(i) = time
205 ENDIF
206 ELSE
207
208
209
210 IF (sxx(i) >= zero) THEN
211 f1 = sxx(i)/sigt1
212 dfmax(i,2) =
max(dfmax(i,2),f1)
213 dfmax(i,2) =
min(dfmax(i,2),one)
214 ELSE
215 f1 = -sxx(i)/sigc1
216 dfmax(i,3) =
max(dfmax(i,3),f1)
217 dfmax(i,3) =
min(dfmax(i,3),one)
218 ENDIF
219
220
221
222 IF (syy(i) >= zero) THEN
223 fac = one - pp12*sigt2/fsig12
224 fac = fac*syy(i)/sigt2
225 fa = sqrt((sxy(i)/fsig12)**2 + fac*fac)
226 . + pp12*syy(i)/fsig12
227 dfmax(i,4) =
max(dfmax(i,4),fa)
228 dfmax(i,4) =
min(dfmax(i,4),one)
229 ELSE
230 fac = half/(one + pn22)/fsig12
231 fc = (sxy(i)*fac)**2 + (syy(i)/sigc2)**2
232 fc =-fc*sigc2/syy(i)
233 dfmax(i,6) =
max(dfmax(i,6),fc)
234 dfmax(i,6) =
min(dfmax(i,6),one)
235
236
237
238
239
240
241
242
243 ENDIF
244
245 fb = sqrt(sxy(i)**2 + (pn12*syy(i))**2 )
246 . + pn12*syy(i)
247 fb = fb/fsig12
248 dfmax(i,5) =
max(dfmax(i,5),fb)
249 dfmax(i,5) =
min(dfmax(i,5),one)
250
251
252
253 IF (szz(i) >= zero) THEN
254 fac = one - pp12*sigt2/fsig12
255 fac = fac*szz(i)/sigt2
256 fa_2 = sqrt((szx(i)/fsig12)**2 + fac*fac)
257 . + pp12*szz(i)/fsig12
258 dfmax(i,4) =
max(dfmax(i,4),fa_2)
259 dfmax(i,4) =
min(dfmax(i,4),one)
260 ELSE
261 fac = half/(one + pn22)/fsig12
262 fc_2 = (szx(i)*fac)**2 + (szz(i)/sigc2)**2
263 fc_2 =-fc_2*sigc2/szz(i)
264 dfmax(i,6) =
max(dfmax(i,6),fc_2)
265 dfmax(i,6) =
min(dfmax(i,6),one)
266
267
268
269
270
271
272
273
274 ENDIF
275
276 fb_2 = sqrt(szx(i)**2 + (pn12*szz(i))**2 )
277 . + pn12*szz(i)
278 fb_2 = fb_2/fsig12
279 dfmax(i,5) =
max(dfmax(i,5),fb_2)
280 dfmax(i,5) =
min(dfmax(i,5),one)
281
282 dfmax(i,1) =
min(one,
max(dfmax(i,1),f1,fa,fb,fc,fa_2,fb_2,fc_2))
283
284 IF (f1 >= one .OR. fa >= one .OR. fb >= one .OR.
285 . fc >= one .OR. fa_2 >= one .OR. fb_2 >= one .OR.
286 . fc_2 >= one ) THEN
287 uvar(i,1) = signxx(i)
288 uvar(i,2) = signyy(i)
289 uvar(i,3) = signzz(i)
290 uvar(i,4) = signxy(i)
291 uvar(i,5) = signyz(i)
292 uvar(i,6) = signzx(i)
293 uvar(i,7) = time
294 uvar(i,8) = four_over_5
295 ENDIF
296 ENDIF
297
298 ELSE
299
300
301
302 IF(uvar(i,8) == zero )THEN
303 signxx(i) = zero
304 signyy(i) = zero
305 signzz(i) = zero
306 signxy(i) = zero
307 signzx(i) = zero
308 signyz(i) = zero
309 ELSE IF(uvar(i,8) < one) THEN
310 uvar(i,8)= exp(-(time - uvar(i,7))/tmax)
311 IF(uvar(i,8) < em02)uvar(i,8) = zero
312 signxx(i) = uvar(i,1)*uvar(i,8)
313 signyy(i) = uvar(i,2)*uvar(i,8)
314 signzz(i) = uvar(i,3)*uvar(i,8)
315 signxy(i) = uvar(i,4)*uvar(i,8)
316 signyz(i) = uvar(i,5)*uvar(i,8)
317 signzx(i) = uvar(i,6)*uvar(i,8)
318 IF(uvar(i,8) == zero )THEN
319 noff(i) = noff(i) + 1
320 IF(npt0 == 1 .OR. noff(i) == npt0 ) THEN
321 off(i) = four_over_5
322 nindx=nindx+1
323 indx(nindx)=i
324 tdele(i) = time
325 ENDIF
326 ENDIF
327 ELSE
328
329
330
331 IF(sxx(i) > 0 ) THEN
332 f1 = sxx(i)/sigt1
333 dfmax(i,2) =
max(dfmax(i,2),f1)
334 dfmax(i,2) =
min(dfmax(i,2),one)
335 ELSE
336 f1 = -sxx(i)/sigc1
337 dfmax(i,3) =
max(dfmax(i,3),f1)
338 dfmax(i,3) =
min(dfmax(i,3),one)
339 ENDIF
340
341
342
343 IF(syy(i) >= zero) THEN
344 fac = one - pp12*sigt2/fsig12
345 fac = fac*syy(i)/sigt2
346 fa = sqrt((sxy(i)/fsig12)**2 + fac*fac)
347 . + pp12*syy(i)/fsig12
348 dfmax(i,4) =
max(dfmax(i,4),fa)
349 dfmax(i,4) =
min(dfmax(i,4),one)
350 ELSE
351 fac = half/(one + pn22)/fsig12
352 fc = (sxy(i)*fac)**2 + (syy(i)/sigc2)**2
353 fc =-fc*sigc2/syy(i)
354 dfmax(i,6) =
max(dfmax(i,6),fc)
355 dfmax(i,6) =
min(dfmax(i,6),one)
356
357
358
359
360
361
362
363
364 ENDIF
365 fb = sqrt(sxy(i)**2 + (pn12*syy(i))**2 )
366 . + pn12*syy(i)
367 fb = fb/fsig12
368 dfmax(i,5) =
max(dfmax(i,5),fb)
369 dfmax(i,5) =
min(dfmax(i,5),one)
370
371
372
373 IF(szz(i) >= zero) THEN
374 fac = one - pp12*sigt2/fsig12
375 fac = fac*szz(i)/sigt2
376 fa_2 = sqrt((szx(i)/fsig12)**2 + fac*fac)
377 .
378 dfmax(i,4) =
max(dfmax(i,4),fa_2)
379 dfmax(i,4) =
min(dfmax(i,4),one)
380 ELSE
381 fac = half/(one + pn22)/fsig12
382 fc_2 = (szx(i)*fac)**2 + (szz(i)/sigc2)**2
383 fc_2 =-fc_2*sigc2/szz(i)
384 dfmax(i,6) =
max(dfmax(i,6),fc_2)
385 dfmax(i,6) =
min(dfmax(i,6),one)
386
387
388
389
390
391
392
393
394 ENDIF
395
396 fb_2 = sqrt(szx(i)**2 + (pn12*szz(i))**2 )
397 . + pn12*szz(i)
398 fb_2 = fb_2/fsig12
399 dfmax(i,5) =
max(dfmax(i,5),fb_2)
400 dfmax(i,5) =
min(dfmax(i,5),one)
401
402 dfmax(i,1) =
min(one,
max(dfmax(i,1),f1,fa,fb,fc,fa_2,fb_2,fc_2))
403
404 IF(f1 >= one .OR. fa >= one .OR. fb >= one .OR.
405 . fc >= one .OR. fa_2 >= one .OR. fb_2 >= one .OR.
406 . fc_2 >= one )THEN
407 uvar(i,1) = signxx(i)
408 uvar(i,2) = signyy(i)
409 uvar(i,3) = signzz(i)
410 uvar(i,4) = signxy(i)
411 uvar(i,5) = signyz(i)
412 uvar(i,6) = signzx(i)
413 uvar(i,7) = time
414 uvar(i,8) = four_over_5
415 nindx0= nindx0+1
416 indx0(nindx0)=i
417 ENDIF
418 ENDIF
419 ENDIF
420 ENDIF
421 ENDDO
422
423
424
425 IF(nindx > 0)THEN
426 DO j=1,nindx
427 i = indx(j)
428#include "lockon.inc"
429 WRITE(iout, 1200) ngl(i),time
430 WRITE(istdo,1200) ngl(i),time
431#include "lockoff.inc"
432 END DO
433 ENDIF
434
435 IF(nindx0 > 0)THEN
436 DO j=1,nindx0
437 i = indx0(j)
438#include "lockon.inc"
439 WRITE(iout, 1100) ngl(i),ilay,time
440 WRITE(istdo,1100) ngl(i),ilay,time
441#include "lockoff.inc"
442 END DO
443 ENDIF
444
445 1100 FORMAT(1x,'FAILURE ELEMENT #',i10,1x,
446 .'IP #',i10,1x, 'AT TIME #:',1pe20.13)
447
448 1200 FORMAT(1x,'DELETE SOLID ELEMENT (PUCK MODEL) #',i10,1x,
449 .'AT TIME # ',1pe20.13)
450
451 RETURN