34
35
36
37
38
39#include "implicit_f.inc"
40
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
76
77
78#include "com01_c.inc"
79#include "mvsiz_p.inc"
80#include "units_c.inc"
81#include "comlock.inc"
82#include "param_c.inc"
83
84
85
86 INTEGER NEL,NUPARAM, NUVAR,ILAY,NPT0
87 INTEGER NGL(NEL)
89 . time,timestep,uparam(nuparam),
90 . signxx(nel),signyy(nel),signzz(nel),
91 . signxy(nel),signyz(nel),signzx(nel)
92
93
94
95 INTEGER NOFF(NEL)
96 my_real uvar(nel,nuvar), off(nel),dfmax(nel),tdele(nel)
97
98
99
100 INTEGER INDX0(MVSIZ),IFLAG,INDX(MVSIZ)
101 INTEGER I,J,JJ,IADBUF,NINDX,NINDX0,
102 . ,IMATLY
104 . k1,k2,k3,k,
105 . a,gama1,gama2,
106 . y0,yc,tmax,fac,
107 . dam, yd1,yd2,yd3,cc,delta,w,yd,sig
108
109 k1 = uparam(1)
110 k2 = uparam(2)
111 k3 = uparam(3)
112 gama1 = uparam(4)
113 gama2 = uparam(5)
114 y0 = uparam(6)
115 yc = uparam(7)
116 k = uparam(8)
117 a = uparam(9)
118 tmax = uparam(10)
119 iflag = int(uparam(12))
120 indx(1:mvsiz) = 0
121
122
123
124 IF(isigi == zero)THEN
125 IF ((uvar(1,12)==zero).AND.(uvar(1,1)==zero)) THEN
126 DO i=1,nel
127 uvar(i,12) = one
128 ENDDO
129 ENDIF
130 ENDIF
131
132 DO i=1,nel
133 IF(off(i)<em01) off(i)=zero
134 IF(off(i)<one) off(i)=off(i)*four_over_5
135 END DO
136
137 nindx=0
138 indx = 0
139 nindx0=0
140 indx0 = 0
141
142
143 DO i=1,nel
144 IF (off(i) == one )THEN
145 IF(iflag == 1) THEN
146
147
148
149 IF(uvar(i,12) < one)THEN
150 uvar(i,12)= exp(-(time - uvar(i,11))/tmax
151 IF(uvar(i,12) < em02) uvar(i,12) = zero
152 signxx(i) = uvar(i,5)*uvar(i,12)
153 signyy(i) = uvar(i,6)*uvar(i,12)
154 signzz(i) = uvar(i,7)*uvar(i,12)
155 signxy(i) = uvar(i,8)*uvar(i,12)
156 signyz(i) = uvar(i,9)*uvar(i,12)
157 signzx(i) = uvar(i,10)*uvar(i,12)
158 IF(uvar(i,12) == zero ) THEN
159 off(i)=four_over_5
160 nindx=nindx+1
161 indx(nindx)=i
162 tdele(i) = time
163 ENDIF
164 ELSE
165
166
167
168 dam = uvar(i,1)
169 sig = half*(signzz(i) + abs(signzz(i)))
170 yd3 = k3*(one - dam)**2
171 yd3 = half*sig*sig/
max(yd3, em20)
172 yd3 =
max(yd3, uvar(i,2))
173 uvar(i,2) = yd3
174
175
176
177 sig = signyz(i)
178 yd2 = k2*(one - dam)**2
179 yd2 = half*sig*sig/
max(yd2, em20)
180 yd2 =
max(yd2, uvar(i,3))
181 uvar(i,3) = yd2
182
183
184
185 sig = signzx(i)
186 yd1 = k1*(one - dam)**2
187 yd1 = half*sig*sig/
max(yd1, em20)
188 yd1 =
max(yd1, uvar(i,4))
189 uvar(i,4) = yd1
190
191
192
193 yd = yd3 + gama1*yd1 + gama2*yd2
194 delta = sqrt(yd) - y0
195 delta = half*(delta + abs(delta))
196 w = delta /(yc - y0)
197 cc = w - dam
198 cc = half*(cc + abs(cc))
199 fac = k*timestep/a
200 dam = dam + fac*(one - exp(-a*cc))
201 uvar(i,1) = dam
202 IF( dam >= 1 )THEN
203 uvar(i,5) = signxx(i)
204 uvar(i,6) = signyy(i)
205 uvar(i,7) = signzz(i)
206 uvar(i,8) = signxy(i)
207 uvar(i,9) = signyz(i)
208 uvar(i,10) = signzx(i)
209 uvar(i,11) = time
210 uvar(i,12) = four_over_5
211 ENDIF
212 ENDIF
213
214 ELSEIF(iflag == 2) THEN
215
216
217
218
219 IF(uvar(i,12) == zero )THEN
220 signxx(i) = zero
221 signyy(i) = zero
222 signzz(i) = zero
223 signxy(i) = zero
224 signzx(i) = zero
225 signyz(i) = zero
226 ELSE IF(uvar(i,12) < one) THEN
227 uvar(i,12)= exp(-(time - uvar(i,11))/tmax)
228 IF(uvar(i,12) < em02)uvar(i,12) = zero
229 signxx(i) = uvar(i,5)*uvar(i,12)
230 signyy(i) = uvar(i,6)*uvar(i,12)
231 signzz(i) = uvar(i,7)*uvar(i,12)
232 signxy(i) = uvar(i,8)*uvar(i,12)
233 signyz(i) = uvar(i,9)*uvar(i,12)
234 signzx(i) = uvar(i,10)*uvar(i,12)
235 IF( uvar(i,12) == zero )THEN
236 noff(i) = noff(i) + 1
237 IF(noff(i) == npt0 .OR. npt0 == 1) THEN
238 nindx=nindx+1
239 indx(nindx)=i
240 off(i) = four_over_5
241 tdele(i) = time
242 ENDIF
243 ENDIF
244 ELSE
245
246
247
248 dam = uvar(i,1)
249 sig = half*(signzz(i) + abs(signzz(i)))
250 yd3 = k3*(one - dam)**2
251 yd3 = half*sig*sig/
max(yd3, em20)
252 yd3 =
max(yd3, uvar(i,2))
253 uvar(i,2) = yd3
254
255
256
257 sig =signyz(i)
258 yd2 = k2*(one - dam)**2
259 yd2 = half*sig*sig/
max(yd2, em20)
260 yd2 =
max(yd2, uvar(i,3))
261 uvar(i,3) = yd2
262
263
264
265 sig = signzx(i)
266 yd1 = k1*(one - dam)**2
267 yd1 = half*sig*sig/
max(yd1, em20)
268 yd1 =
max(yd1, uvar(i,4))
269 uvar(i,4) = yd1
270
271
272
273 yd = yd3 + gama1*yd1 + gama2*yd2
274 delta = sqrt(yd) - y0
275 delta = half*(delta + abs(delta))
276 w = delta /(yc - y0)
277 cc = w - dam
278 cc = half*(cc + abs(cc))
279 fac = k*timestep/a
280 dam = dam + fac*(one - exp(-a*cc))
281 uvar(i,1) = dam
282 IF(dam >= one )THEN
283 uvar(i,5) = signxx(i)
284 uvar(i,6) = signyy(i)
285 uvar(i,7) = signzz(i)
286 uvar(i,8) = signxy(i)
287 uvar(i,9) = signyz(i)
288 uvar(i,10) = signzx(i)
289 uvar(i,11) = time
290 uvar(i,12) = four_over_5
291 nindx0= nindx0+1
292 indx0(nindx0)=i
293 ENDIF
294 ENDIF
295 ELSEIF(iflag == 3) THEN
296
297
298
299 IF(uvar(i,12) == zero )THEN
300 signzz(i) = zero
301 signzx(i) = zero
302 signyz(i) = zero
303 ELSE IF(uvar(i,12) < one) THEN
304 uvar(i,12)= exp(-(time - uvar(i,11))/tmax)
305 IF(uvar(i,12) < em02)uvar(i,12) = zero
306 signzz(i) = uvar(i,7)*uvar(i,12)
307 signyz(i) = uvar(i,9)*uvar(i,12)
308 signzx(i) = uvar(i,10)*uvar(i,12)
309 IF( uvar(i,12) == zero )THEN
310
311 nindx=nindx+1
312 indx(nindx)=i
313 IF (int(noff(i))==npt0 .OR. npt0 == 1)THEN
314
315
316
317 ENDIF
318 ENDIF
319
320 ELSE
321
322
323
324 dam = uvar(i,1)
325 sig = half*(signzz(i) + abs(signzz(i)))
326 yd3 = k3*(one - dam)**2
327 yd3 = half*sig*sig/
max(yd3, em20)
328 yd3 =
max(yd3, uvar(i,2))
329 uvar(i,2) = yd3
330
331
332
333 sig = signyz(i)
334 yd2 = k2*(one - dam)**2
335 yd2 = half*sig*sig/
max(yd2, em20)
336 yd2 =
max(yd2, uvar(i,3))
337 uvar(i,3) = yd2
338
339
340
341 sig = signzx(i)
342 yd1 = k1*(one - dam)**2
343 yd1 = half*sig*sig/
max(yd1, em20)
344 yd1 =
max(yd1, uvar(i,4))
345 uvar(i,4) = yd1
346
347
348
349 yd = yd3 + gama1*yd1 + gama2*yd2
350 delta = sqrt(yd) - y0
351 delta = half*(delta + abs(delta))
352 w = delta /(yc - y0)
353 cc = w - dam
354 cc = half*(cc + abs(cc))
355 fac = k*timestep/a
356 dam = dam + fac*(one - exp(-a*cc))
357 uvar(i,1) = dam
358 IF(dam >= one )THEN
359 uvar(i,7) = signzz(i)
360 uvar(i,9) = signyz(i)
361 uvar(i,10) = signzx(i)
362 uvar(i,11) = time
363 uvar(i,12) = four_over_5
364 ENDIF
365 ENDIF
366 ENDIF
367 ENDIF
368 ENDDO
369
370
371 DO i=1,nel
372 dfmax(i) =
min(one,
max(dfmax(i),uvar(i,1)))
373 ENDDO
374
375 IF(nindx > 0)THEN
376 DO j=1,nindx
377 i = indx(j)
378 IF(iflag == 1 .OR. iflag == 2) THEN
379#include "lockon.inc"
380 WRITE(iout, 1200) ngl(i),time
381 WRITE(istdo,1200) ngl(i),time
382#include "lockoff.inc"
383 ELSEIF(iflag == 3) THEN
384#include "lockon.inc"
385 WRITE(iout, 3200) ngl(i),time
386 WRITE(istdo,3200) ngl(i),time
387#include "lockoff.inc"
388 ENDIF
389 END DO
390 ENDIF
391
392 IF(nindx0 > 0)THEN
393 DO j=1,nindx0
394 i = indx0(j)
395#include "lockon.inc"
396 WRITE(iout, 1100) ngl(i),ilay,time
397 WRITE(istdo,1100) ngl(i),ilay,time
398#include "lockoff.inc"
399 END DO
400 ENDIF
401
402 1200 FORMAT(1x,'DELETE SOLID ELEMENT (LADEVEZE MODEL) #',i10,1x,
403 .'AT TIME # ',1pe20.13)
404 1100 FORMAT(1x,'FAILURE ELEMENT #',i10,1x,
405 .'IP #',i10,1x, 'AT TIME #:',1pe20.13)
406 3200 FORMAT(1x,'DELAMINATION OF ELEMENT (LADEVEZE MODEL) #',i10,1x,
407 .'AT TIME # ',1pe20.13)
408
409 RETURN