36
37
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "units_c.inc"
46#include "comlock.inc"
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 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,IPG,ILAY,IPT,PLY_ID,LF_DAMMX
77 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: NGL
79 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: off,timestep
80 my_real,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
81
82
83
84 INTEGER ,INTENT(OUT) ::DMG_FLAG
85 INTEGER ,DIMENSION(*) :: FWAVE_EL
86 INTEGER ,DIMENSION(NEL) ,INTENT(INOUT) :: FOFF
87 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: dadv,
88 . signxx,signyy,signxy,signyz,signzx,epsp
89 my_real ,
DIMENSION(NEL,LF_DAMMX) ,
INTENT(INOUT) :: dfmax
90 my_real ,
DIMENSION(NEL) ,
INTENT(OUT) :: tdel,dmg_scale
91 my_real ,
DIMENSION(NEL,NUVAR) ,
INTENT(INOUT) :: uvar
92
93
94
95 INTEGER :: I,J,JJ,NINDX,IFAIL_SH,IMODEL,IMODE,TMOD,IFRWAVE,FAC
96 INTEGER ,DIMENSION(NEL) :: INDX,FS
97 INTEGER ,DIMENSION(7,NEL) :: MODE
98 my_real :: sigt1,sigt2,sigc1,sigc2,csig,fsig12,msig12,msig23,
99 . msig13,angle,sdel,tmax,ratio,f1,f2,f3,f4,f5,sig,p,f6,f7,
100 . tsig12,xsig12,xsig23,dammx, telem,k2m,instf,k0,k1,k2,k3,
101 . zep669741,dtinv,km,epspref,filt,
alpha
102
103 zep669741 = six*em01 + six*em02 + nine*em3 + seven*em04 +
104 . four*em05 + em06
105
106 imodel = int(uparam(1))
107 sigt1 = uparam(2)
108 sigt2 = uparam(3)
109 sigc1 = uparam(5)
110 sigc2 = uparam(6)
111 csig = uparam(7)
112 fsig12 = uparam(8)
113 msig12 = uparam(9)
114 msig13 = uparam(10)
115 msig23 = uparam(11)
116 angle = uparam(12)
117 sdel = uparam(13)
118 tmax = uparam(14)
119 ifail_sh = int(uparam(15))
120 ratio = uparam(17)
121 dmg_flag = int(uparam(18))
122 tmod = int(uparam(19))
123 epspref = uparam(20)
124 filt = uparam(21)
125 km = uparam(22)
126 ifrwave = nint(uparam(23))
127
128 mode(1,1:nel) = 0
129 mode(2,1:nel) = 0
130 mode(3,1:nel) = 0
131 mode(4,1:nel) = 0
132 mode(5,1:nel) = 0
133 mode(6,1:nel) = 0
134 mode(7,1:nel) = 0
135 nindx = 0
136
137 IF (time == zero) then
138 dadv(:) = one
139 ENDIF
140
141 IF (ifrwave > 1) THEN
142 DO i=1,nel
143 IF (fwave_el(i) /= 0) dadv(i) = uparam(24)
144 END DO
145 ENDIF
146
147 SELECT CASE (imodel)
148
149 CASE (1)
150
151 DO i=1,nel
152 IF (off(i) == one .and. foff(i) == 1) THEN
153 f1 = zero
154 f2 = zero
155 f3 = zero
156 f4 = zero
157 f5 = zero
158
159 dtinv = timestep(i)/
max(timestep(i)**2,em20)
161
163 fs(i)=uvar(i,10)
164
165 epsp(i)=(one -
alpha)*uvar(i,11) +
alpha*epsp(i)
166 uvar(i,11)=epsp(i)
167 IF (uvar(i,6) == zero) THEN
168
169
170
171 sig = half*(signxx(i) + abs(signxx(i)))
172 f1 = (sig/sigt1)**2
173 . + (signxy(i)**2 + signzx(i)**2)/fsig12**2
174 dfmax(i,2) =
max(dfmax(i,2),f1)
175 dfmax(i,2) =
min(dfmax(i,2),one)
176
177 sig = -half*signyy(i)
178 sig = -signxx(i) + half*(sig + abs(sig))
179 sig = half*(sig + abs(sig))
180 f2 = (sig /sigc1)**2
181 dfmax(i,3) =
max(dfmax(i,3),f2)
182 dfmax(i,3) =
min(dfmax(i,3),one)
183
184
185 p = -third*(signxx(i) + signyy(i))
186 IF (p > 0) f3 = (p/csig)**2
187 dfmax(i,4) =
max(dfmax(i,4),f3)
188 dfmax(i,4) =
min(dfmax(i,4),one)
189
190
191
192 f5 = (signyz(i)/msig23)**2 + (signzx(i)/msig13)**2
193 f5 = sdel*sdel*f5
194 dfmax(i,6) =
max(dfmax(i,6),f5)
195 dfmax(i,6) =
min(dfmax(i,6),one)
196
197
198 IF (signyy(i) < zero) THEN
199 xsig12 = msig12 - signyy(i)*(tan(angle))
200 xsig23 = msig23 - signyy(i)*(tan(angle))
201 ELSE
202 xsig12 = msig12
203 xsig23 = msig23
204 ENDIF
205 sig = half*(signyy(i) + abs(signyy(i)))
206 f4 = (sig/sigt2)**2
207 . + (signyz(i)/xsig23)**2 + (signxy(i)/xsig12)**2
208 dfmax(i,5) =
max(dfmax(i,5),f4)
209 dfmax(i,5) =
min(dfmax(i,5),one)
210
211 dammx =
min(one,
max(f1,f2,f3,f4,f5))
212 dfmax(i,1) =
min(one,dammx)
213 IF (dammx >= dadv(i)) THEN
214 nindx = nindx+1
215 indx(nindx) = i
216 uvar(i,6) = time
217
218 fac = hundred*
max(abs(signxx(i)),abs(signyy(i)),
219 . abs(signxy(i)),abs(signyz(i)),abs(signzx(i)))
220 k0 = fac*epspref**2*zep669741*tmax**2 + zep9*epspref*tmax
221 k1 = zep9*epsp(i)
222 k2 = zep669741*fac*epsp(i)**2
223 k2m = zep669741*fac*km*epspref**2
224 k2 =
max(k2m,k2,em20)
225 telem = (sqrt(k1**2+4*k2*k0)-k1)/2/k2
226 uvar(i,12) = telem
227 IF (f1>=dadv(i)) mode(1,i) = 1
228 IF (f2>=dadv(i)) mode(2,i) = 1
229 IF (f3>=dadv(i)) mode(3,i) = 1
230 IF (f4>=dadv(i)) mode(4,i) = 1
231 IF (f5>=dadv(i)) mode(5,i) = 1
232 IF (dmg_flag == 0) THEN
233 uvar(i,1) = signxx(i)
234 uvar(i,2) = signyy(i)
235 uvar(i,3) = signxy(i)
236 uvar(i,4) = signyz(i)
237 uvar(i,5) = signzx(i)
238 ENDIF
239 ENDIF
240 ENDIF
241
242 IF (uvar(i,6) > zero .AND. time > uvar(i,6) ) THEN
243 IF(tmod == 1) THEN
244 telem =
max((timestep(i)*1.0),tmax*(epspref/epsp(i))**2)
245 dmg_scale(i)= dmg_scale(i)*exp(-timestep(i)/telem)
246 ELSEIF(tmod == 2) THEN
247 telem = uvar(i, 12)
248 dmg_scale(i) = exp(-(time - uvar(i,6))/telem)
249 ELSE
250 dmg_scale(i) = exp(-(time - uvar(i,6))/tmax)
251 ENDIF
252 IF (dmg_scale(i) < em02) THEN
253 foff(i) = 0
254 tdel(i)= time
255 dmg_scale(i) = zero
256 ENDIF
257 IF (dmg_flag == 0) THEN
258 signxx(i) = uvar(i,1)*dmg_scale(i)
259 signyy(i) = uvar(i,2)*dmg_scale(i)
260 signxy(i) = uvar(i,3)*dmg_scale(i)
261 signyz(i) = uvar(i,4)*dmg_scale(i)
262 signzx(i) = uvar(i,5)*dmg_scale(i)
263 ENDIF
264 ENDIF
265 ENDIF
266 ENDDO
267
268 CASE (2)
269
270 DO i=1,nel
271 IF (off(i) == one .and. foff(i) == 1) THEN
272 f1 = zero
273 f2 = zero
274 f3 = zero
275 f4 = zero
276 f5 = zero
277 f6 = zero
278 f7 = zero
279
280
281 dtinv = timestep(i)/
max(timestep(i)**2,em20)
283
285 fs(i)=uvar(i,10)
286
287 epsp(i)=(one -
alpha)*uvar(i,11) +
alpha*epsp(i)
288 uvar(i,11)=epsp(i)
289 IF (uvar(i,6) == zero) THEN
290
291
292
293 sig = half*(signxx(i) + abs(signxx(i)))
294 f1 = (sig/sigt1)**2
295 . + (signxy(i)**2 + signzx(i)**2)/fsig12**2
296 dfmax(i,2) =
max(dfmax(i,2),f1)
297 dfmax(i,2) =
min(dfmax(i,2),one)
298
299
300 sig = half*(signyy(i) + abs(signyy(i)))
301 tsig12 = fsig12*sigt2/sigt1
302 f2 = (sig/sigt2)**2
303 . + (signxy(i)**2 + signyz(i)**2)/tsig12**2
304 dfmax(i,3) =
max(dfmax(i,3),f2)
305 dfmax(i,3) =
min(dfmax(i,3),one)
306
307
308 IF (signxx(i) < zero) f3 = (signxx(i)/sigc1)**2
309 dfmax(i,4) =
max(dfmax(i,4),f3)
310 dfmax(i,4) =
min(dfmax(i,4),one)
311 IF (signyy(i) < zero) f4 = (signyy(i)/sigc2)**2
312 dfmax(i,5) =
max(dfmax(i,5),f4)
313 dfmax(i,5) =
min(dfmax(i,5),one)
314
315
316 p = -third*(signxx(i) + signyy(i) )
317 IF (p > zero) f5 = (p/csig)**2
318 dfmax(i,6) =
max(dfmax(i,6),f5)
319 dfmax(i,6) =
min(dfmax(i,6),one)
320
321
322 f6 = (signxy(i)/msig12)**2
323 dfmax(i,7) =
max(dfmax(i,7),f6)
324 dfmax(i,7) =
min(dfmax(i,7),one)
325
326
327 f7 = (signyz(i)/msig23)**2 + (signzx(i)/msig13)**2
328 f7 = sdel*sdel*f7
329 dfmax(i,8) =
max(dfmax(i,8),f7)
330 dfmax(i,8) =
min(dfmax(i,8),one)
331
332 dammx =
min(one,
max(f1,f2,f3,f4,f5,f6,f7))
333 dfmax(i,1) =
min(one,dammx)
334 IF (dammx >= dadv(i)) THEN
335 nindx = nindx+1
336 indx(nindx) = i
337 uvar(i,6) = time
338
339 fac = hundred*
max(abs(signxx(i)),abs(signyy(i)),
340 . abs(signxy(i)),abs(signyz(i)),abs(signzx(i)))
341 k0 = fac*epspref**2*zep669741*tmax**2 + zep9*epspref*tmax
342 k1 = zep9*epsp(i)
343 k2 = zep669741*fac*epsp(i)**2
344 k2m = zep669741*fac*km*epspref**2
345 k2 =
max(k2m,k2,em20)
346 telem = (sqrt(k1**2+4*k2*k0)-k1)/2/k2
347 uvar(i,12) = telem
348
349 IF (f1>=dadv(i)) mode(1,i) = 1
350 IF (f2>=dadv(i)) mode(2,i) = 1
351 IF (f3>=dadv(i)) mode(3,i) = 1
352 IF (f4>=dadv(i)) mode(4,i) = 1
353 IF (f5>=dadv(i)) mode(5,i) = 1
354 IF (f6>=dadv(i)) mode(6,i) = 1
355 IF (f7>=dadv(i)) mode(7,i) = 1
356 IF (dmg_flag == 0) THEN
357 uvar(i,1) = signxx(i)
358 uvar(i,2) = signyy(i)
359 uvar(i,3) = signxy(i)
360 uvar(i,4) = signyz(i)
361 uvar(i,5) = signzx(i)
362 ENDIF
363 ENDIF
364 ENDIF
365
366 IF (uvar(i,6) > zero .AND. time > uvar(i,6) ) THEN
367 dfmax(i,1) = one
368 IF(tmod == 1) THEN
369 telem =
max((timestep(i)*1.0),tmax*(epspref/epsp(i))**2)
370 dmg_scale(i)=dmg_scale(i)*exp(-timestep(i)/telem)
371 ELSEIF(tmod == 2) THEN
372 telem = uvar(i,12)
373 dmg_scale(i)=exp(-(time - uvar(i,6))/telem)
374 ELSE
375 dmg_scale(i)= exp(-(time - uvar(i,6))/tmax)
376 ENDIF
377
378 IF (dmg_scale(i) < em02) THEN
379 foff(i) = 0
380 tdel(i) = time
381 dmg_scale(i) = zero
382 ENDIF
383 IF (dmg_flag == 0) THEN
384 signxx(i) = uvar(i,1)*dmg_scale(i)
385 signyy(i) = uvar(i,2)*dmg_scale(i)
386 signxy(i) = uvar(i,3)*dmg_scale(i)
387 signyz(i) = uvar(i,4)*dmg_scale(i)
388 signzx(i) = uvar(i,5)*dmg_scale(i)
389 ENDIF
390 ENDIF
391 ELSEIF (foff(i) == 0) THEN
392 dmg_scale(i) = zero
393 ENDIF
394 ENDDO
395
396 END SELECT
397
398
399
400 IF (nindx > 0) THEN
401 DO j=1,nindx
402 i = indx(j)
403 DO jj=1,6
404 imode = mode(jj,i)
405 IF (imode == 1) THEN
406 imode = jj
407#include "lockon.inc"
408 WRITE(iout ,1000) ngl(i),ipg,ilay,ipt
409 WRITE(istdo ,1000) ngl(i),ipg,ilay,ipt
410 WRITE(iout ,2000) imode,time
411 WRITE(istdo ,2000) imode,time
412 WRITE(iout ,3000) signxx(i),signyy(i),signxy(i),
413 . signyz(i),signzx(i)
414 IF (dadv(i) < one) WRITE(iout,4000) dadv(i)
415#include "lockoff.inc"
416 ENDIF
417 ENDDO
418 END DO
419 ENDIF
420
421 1000 FORMAT(1x,'FAILURE (HASHIN) OF SHELL ELEMENT ',i10,
422 . 1x,',gauss pt',I2,1X,',layer',I3,1X,',integration pt',I3)
423 2000 FORMAT(10X,'hashin mode #',I10,1X, ',TIME #:',1PE12.4)
424 3000 FORMAT(10x,'RESPONSIBLE STRESS: SIG_11= ',1pe12.4,
425 . 1x,'SIG_22= ',1pe12.4,1x,'SIG_12= ',1pe12.4,/,
426 . 10x,'SIG_13= ',1pe12.4,1x,'SIG_23= ',1pe12.4,1x)
427 4000 FORMAT(1x,'CRITERIA REDUCTION FACTOR= ',1pe12.4)
428
429 RETURN