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#include "units_c.inc"
72#include "comlock.inc"
73
74
75
76 INTEGER NEL,NUPARAM,NUVAR,NFUNC,IPG,NPG,NDAMF,ISOLID
77 INTEGER NGL(NEL),NPF(*),IFUNC(*)
79 my_real uparam(nuparam),uvar(nel,nuvar),damt(nel,ndamf),tf(*)
80 my_real ,
DIMENSION(NEL) :: offg,offl,epsd,pla,dein,deit,
81 . signzz,signyz,signzx,sym,dmg,dfmax,tdele,
area
82
83
84
85 INTEGER I,J,IDEL,IDEV,NINDX,NINDXD,NINDXA,ISYM,FUNN,FUNT,IFUN2N,
86 . IFUN2T,IFUN3N,IFUN3T
87 INTEGER INDX(NEL),INDXD(NEL),INDXA(NEL)
88 my_real a2,b2,a3,b3,xscale2,xscale3,svmn,svmt,t1,t2,ttn,tts,fct,
89 . dydx,dama,ssym,cphi,sphi,areascale,defo
90 my_real ,
DIMENSION(NEL) :: fun2n,fun2t,fun3n,fun3t,dydx2n,
91 . dydx2t,dydx3n,dydx3t,phi,pla1,pla2
92
93
94
96 EXTERNAL finter
97
98
99
100
101
102
103
104
105
106
107
108
109 a2 = uparam(1)
110 b2 = uparam(2)
111 a3 = uparam(3)
112 b3 = uparam(4)
113 isolid = nint(uparam(5))
114 xscale2 = uparam(6)
115 xscale3 = uparam(7)
116 isym = nint(uparam(8))
117 areascale = uparam(9)
118
119 ifun2n = ifunc(1)
120 ifun2t = ifunc(2)
121 ifun3n = ifunc(3)
122 ifun3t = ifunc(4)
123
124 IF (uvar(1,3) == zero) THEN
125 DO i=1,nel
127 ENDDO
128 ENDIF
129
130 DO i=1,nel
131 pla1(i) = uvar(i,1)
132 pla2(i) = uvar(i,2)
133 END DO
134
135
136
137 IF (ifun2n == 0) THEN
138 fun2n(1:nel) = one
139 ELSE
140 DO i=1,nel
141 fun2n(i) = finter(ifun2n,epsd(i)*xscale2,npf,tf,dydx2n)
142 ENDDO
143 ENDIF
144 IF (ifun2t == 0) THEN
145 fun2t(1:nel) = one
146 ELSE
147 DO i=1,nel
148 fun2t(i) = finter(ifun2t,epsd(i)*xscale2,npf,tf,dydx2t)
149 ENDDO
150 ENDIF
151 IF (ifun3n == 0) THEN
152 DO i=1,nel
153 fun3n(i) = one
154 ENDDO
155 ELSE
156 DO i=1,nel
157 fun3n(i) = finter(ifun3n,epsd(i)*xscale3,npf,tf,dydx3n)
158 ENDDO
159 ENDIF
160 IF (ifun3t == 0) THEN
161 DO i=1,nel
162 fun3t(i) = one
163 ENDDO
164 ELSE
165 DO i=1,nel
166 fun3t(i) = finter(ifun3t,epsd(i)*xscale3,npf,tf,dydx3t)
167 ENDDO
168 ENDIF
169
170 nindx = 0
171 nindxd = 0
172 nindxa = 0
173
174 DO i=1,nel
175 idel = 0
176 dama = zero
177 ssym = sin(sym(i))
178 svmn = abs(signzz(i))
179 svmt = sqrt(signyz(i)**2 + signzx(i)**2)
180 phi(i)= atan(svmn/
max(em20,svmt))
181 sphi = sin(phi(i))
182 cphi = cos(phi(i))
183
184 IF (pla1(i) == zero) THEN
185 IF (isym == 1 .AND. signzz(i)<= zero) THEN
186 t1 = zero
187 ELSE
188 t1 = sphi/(one-a2*ssym)/fun2n(i)
189 ENDIF
190 t2 = cphi/fun2t(i)
191 ttn = t1*pla(i)
192 tts = t2*pla(i)
193 fct = (ttn**b2 + tts**b2)**(one/b2)
194 damt(i,2) =
min(fct, one)
195 IF (fct > one ) THEN
196 pla1(i) = (t1**b2 + t2**b2)**(-one/b2)
197 IF (isym == 1 .AND. signzz(i) <= zero)THEN
198 t1 = zero
199 ELSE
200 t1 = sphi/(one-a3*ssym)/fun3n(i)
201 ENDIF
202 t2 = cphi/fun3t(i)
203 ttn = t1*pla(i)
204 tts = t2*pla(i)
205 fct = (ttn**b3 + tts**b3) **(one / b3)
206 pla2(i) = (t1**b3 + t2**b3)**(-one/b3)
207 damt(i,1) = (pla(i)-pla1(i))/
max(em20
208 damt(i,1) =
min(damt(i,1), one)
209 damt(i,3) =
min(fct, one)
210 dama = damt(i,1)
211 nindxd = nindxd+1
212 indxd(nindxd) = i
213 ENDIF
214
215 ELSE
216 IF (isym == 1 .AND. signzz(i) <= zero) THEN
217 t1 = zero
218 ELSE
219 t1 = sphi/(one-a3*ssym)/fun3n(i)
220 ENDIF
221 t2 = cphi/fun3t(i)
222 ttn = t1*pla(i)
223 tts = t2*pla
224 fct = (ttn**b3 + tts**b3) **(one / b3)
225 pla2(i) = (t1**b3 + t2**b3)**(-one/b3)
226 damt(i,1) = (pla(i)-pla1(i))/
max(em20,(pla2(i) - pla1(i)))
227 damt(i,1) =
min(damt(i,1), one)
228 damt(i,3) =
min(fct, one)
229 dama = damt(i,1)
230
231 IF (fct > one) THEN
232 idel =1
233 dama = one
234 ENDIF
235 ENDIF
236 dmg(i) =
max(dmg(i),dama)
237 dmg(i) =
min(dmg(i),one)
238
239 IF (idel == 1 .AND. offl(i) == one) THEN
240 offl(i) = zero
241 nindx = nindx+1
242 indx(nindx) = i
243 tdele(i) = time
244 ENDIF
245
246 uvar(i,1) = pla1(i)
247 uvar(i,2) = pla2(i)
248
249 dfmax(i) =
min(one,
max(dfmax(i),damt(i,1)))
250
251
252 IF (areascale > zero ) THEN
253 defo = uvar(i,3) * areascale
254 IF (
area(i) > defo .AND. offg(i) == one)
THEN
255 offl(i) = zero
256 nindxa = nindxa+1
257 indxa(nindxa) = i
258 tdele(i) = time
259 isolid = 1
260 ENDIF
261 ENDIF
262
263 ENDDO
264
265 IF (nindxd > 0) THEN
266 DO j=1,nindxd
267 i = indxd(j)
268#include "lockon.inc"
269 WRITE(iout ,1000) ngl(i),ipg,pla1(i)
270 WRITE(istdo,1100) ngl(i),ipg,pla1(i),time
271#include "lockoff.inc"
272 END DO
273 ELSEIF (nindx > 0) THEN
274 DO j=1,nindx
275 i = indx(j)
276#include "lockon.inc"
277 WRITE(iout ,1200) ngl(i),ipg,pla2(i)
278 WRITE(istdo,1300) ngl(i),ipg,pla2(i),time
279#include "lockoff.inc"
280 END DO
281 ELSEIF (nindxa > 0) THEN
282 DO j=1,nindxa
283 i = indxa(j)
284#include "lockon.inc"
285 WRITE(iout ,1400) ngl(i),
area(i)
286 WRITE(istdo,1500) ngl(i),
area(i),time
287#include "lockoff.inc"
288 END DO
289 ENDIF
290
291 1000 FORMAT(5x,'START DAMAGE CONNECTION ELEMENT ',i10,
292 . ' INTEGRATION POINT',i2,', PLASTIC ELONGATION =',1pe16.9)
293 1100 FORMAT(5x,'START DAMAGE CONNECTION ELEMENT ',i10,
294 . ' INTEGRATION POINT',i2,', PLASTIC ELONGATION =',1pe16.9,
295 . ' AT TIME ',1pe16.9)
296 1200 FORMAT(5x,'FAILURE CONNECTION SOLID ELEMENT ',i10,
297 . ' INTEGRATION POINT',i2,', PLASTIC ELONGATION=',1pe16.9)
298 1300 FORMAT(5x,'FAILURE CONNECTION SOLID ELEMENT ',i10,
299 . ' INTEGRATION POINT',i2,', PLASTIC ELONGATION :',1pe16.9,
300 . ' AT TIME ',1pe16.9)
301 1400 FORMAT(5x,'FAILURE CONNECTION SOLID ELEMENT ',i10,
302 . ', AREA (LIMIT REACHED) :',1pe16.9)
303 1500 FORMAT(5x,'FAILURE CONNECTION SOLID ELEMENT ',i10,
304 . ', AREA (LIMIT REACHED) :',1pe16.9,' AT TIME ',1pe16.9)
305
306 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)