38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "mvsiz_p.inc"
46#include "units_c.inc"
47#include "comlock.inc"
48#include "com01_c.inc"
49#include "tabsiz_c.inc"
50
51
52
53 INTEGER, INTENT(IN) ::
54 . NEL ,NUPARAM,NUVAR ,IPT ,NFUNC ,
55 . IPG ,NGL(NEL),IFUNC(NFUNC)
57 . time ,uparam(nuparam),dpla(nel) ,pla(nel),
58 . aldt(nel),epsxx(nel) ,epsyy(nel),
59 . epsxy(nel),epsyz(nel) ,epszx(nel)
60
61
62
63 INTEGER, INTENT(INOUT) ::
64 . DMG_FLAG,FOFF(NEL)
66 . uvar(nel,nuvar),dfmax(nel),dmg_scale(nel) ,
67 . signxx(nel),signyy(nel),signxy(nel),signyz(nel),
68 . signzx(nel)
69
70
71
72 INTEGER, INTENT(IN) :: NPF(SNPC)
75 . finter
76 EXTERNAL finter
77
78
79
80 INTEGER I,J,NINDX,INST,DINIT,IFORM
81 INTEGER, DIMENSION(MVSIZ) :: INDX
83 . c1 ,c2 ,c3 ,c4 ,c5 ,c6 ,
84 . n_val ,softexp,ref_len,reg_scale,dam_sf,max_dam
86 . lambda ,dydx ,fac(nel),dc(nel),p ,svm ,
87 . triax ,cos3theta,lodep ,epsfail,e12 ,s1 ,
88 . s2 ,q ,emaj ,emin ,beta ,
alpha ,
89 . equa1 ,equa2 ,e1 ,eps_c ,dinst(nel),epfmin,
90 . delta ,denom
91
92
93
94
95 c1 = uparam(1)
96 c2 = uparam(2)
97 c3 = uparam(3)
98 c4 = uparam(4)
99 c5 = uparam(5)
100 c6 = uparam(6)
101 iform = nint(uparam(7))
102 dinit = nint(uparam(8))
103 dam_sf = uparam(9)
104 max_dam = uparam(10)
105 inst = nint(uparam(11))
106 n_val = uparam(12)
107 softexp = uparam(13)
108 ref_len = uparam(14)
109 reg_scale = uparam(15)
110 epfmin = uparam(16)
111
112
113 IF (inst > 0) dmg_flag = 1
114
115
116
117 IF (uvar(1,1) == zero) uvar(1:nel,1) = one
118 IF (uvar(1,3) == zero) THEN
119 IF (ifunc(1) > 0) THEN
120 DO i=1,nel
121 lambda = aldt(i)/ref_len
122 uvar(i,3) = finter(ifunc(1),lambda,npf,tf,dydx)
123 uvar(i,3) = uvar(i,3)*reg_scale
124 ENDDO
125 ELSE
126 uvar(1:nel,3) = one
127 ENDIF
128 ENDIF
129
130
131 DO i=1,nel
132
133 dc(i) = uvar(i,1)
134
135 dinst(i) = uvar(i,2)
136
137 fac(i) = uvar(i,3)
138 ENDDO
139
140
141
142
143 IF (time == zero .AND. isigi /= 0 .AND. dinit > 0) THEN
144 DO i = 1,nel
145 IF (pla(i) > zero) THEN
146
147 e12 = half*epsxy(i)
148 s1 = half*(epsxx(i) + epsyy(i))
149 s2 = half*(epsxx(i) - epsyy(i))
150 q = sqrt(s2**2 + e12**2)
151 emaj = s1 + q
152 emin = s1 - q
153
154 beta = emin/
max(emaj,em20)
155 beta =
max(-one,beta)
156 beta =
min( one,beta)
157
158 triax = (one/sqrt(three))*((one + beta)/sqrt(one + beta + beta**2))
159 IF (triax < -two_third) triax = -two_third
160 IF (triax > two_third) triax = two_third
161
162 cos3theta = -half*twenty7*triax*(triax**2 - third)
163 IF (cos3theta < -one ) cos3theta = -one
164 IF (cos3theta > one ) cos3theta = one
165 lodep = one - two*acos(cos3theta)/pi
166
167 epsfail = c1 + c2*triax + c3*lodep + c4*(triax**2) +
168 . c5*(lodep**2) + c6*triax*lodep
169 epsfail = epsfail*fac(i)
170 epsfail =
max(epfmin,epsfail)
171
172 dfmax(i) = pla(i)/
max(epsfail,em6)
173 dfmax(i) = dfmax(i)*dam_sf
174 dfmax(i) =
min(max_dam,dfmax(i))
175
176 IF (inst > 0 .AND. triax > em10) THEN
177
178 alpha = (two*beta + one)/(two + beta)
179
182 e1 = (two*(two-
alpha)*equa1/
max(equa2,em20))*n_val
183 eps_c = e1*sqrt(four*third*(one + beta + beta
184 eps_c = eps_c*fac(i)
185
186 dinst(i) = pla(i)/
max(eps_c,em20)
187 dinst(i) =
min(dinst(i),one)
188 uvar(i,2) = dinst(i)
189
190 IF (dinst(i) >= one) THEN
191 dc(i) = dfmax(i)
192 uvar(i,1) = dc(i)
193 ENDIF
194 ENDIF
195 ENDIF
196 ENDDO
197 ENDIF
198
199
200
201
202
203 nindx = 0
204 indx(1:nel) = 0
205
206
207 DO i=1,nel
208
209 IF (foff(i) /= 0 .AND. dpla(i) > zero) THEN
210
211
212 p = third*(signxx(i) + signyy(i))
213
214 svm = signxx(i)**2 + signyy(i)**2 - signxx(i)*signyy(i) +
215 . three*signxy(i)**2
216 svm = sqrt(
max(svm,zero))
217 triax = p/
max(em20,svm)
218 IF (triax < -two_third) triax = -two_third
219 IF (triax > two_third) triax = two_third
220
221
222 cos3theta = -half*twenty7*triax*(triax**2 - third)
223 IF (cos3theta < -one ) cos3theta = -one
224 IF (cos3theta > one ) cos3theta = one
225 lodep = one - two*acos(cos3theta)/pi
226
227
228 epsfail = c1 + c2*triax + c3*lodep + c4*(triax**2) +
229 . c5*(lodep**2) + c6*triax*lodep
230 epsfail = epsfail*fac(i)
231 epsfail =
max(epfmin,epsfail)
232
233
234 dfmax(i) = dfmax(i) + dpla(i)/
max(epsfail,em20)
235 dfmax(i) =
min(dfmax(i),one)
236
237
238 IF (inst > 0) THEN
239
240 IF (dinst(i) < one .AND. triax > em10) THEN
241
242 delta = three*(triax**2)*(four - nine*(triax**2))
243 denom = two*(three*(triax**2)-one)
244 denom = sign(
max(abs(denom),em20),denom)
245 beta = ((two - three*(triax**2))-sqrt(delta))/denom
246 beta =
max(-one,beta)
247 beta =
min( one,beta)
248
249 alpha = (two*beta + one)/(two + beta)
250
253 e1 = (two*(two-
alpha)*equa1/
max(equa2,em20))*n_val
254 eps_c = e1*sqrt(four*third*(one + beta + beta**2))
255 eps_c = eps_c*fac(i)
256
257 IF (iform == 2) THEN
258 dinst(i) =
max(dinst(i),pla(i)/
max(eps_c,em20))
259 ELSE
260 dinst(i) = dinst(i) + dpla(i)/
max(eps_c,em20)
261 ENDIF
262 dinst(i) =
min(dinst(i),one)
263 uvar(i,2) = dinst(i)
264
265 IF (dinst(i) >= one) THEN
266 dc(i) = dfmax(i)
267 uvar(i,1) = dc(i)
268 ENDIF
269 ENDIF
270 ENDIF
271
272
273 IF (dfmax(i) >= one) THEN
274 foff(i) = 0
275 nindx = nindx + 1
276 indx(nindx) = i
277 ENDIF
278 ENDIF
279 ENDDO
280
281
282
283
284 IF (inst > 0) THEN
285 DO i = 1,nel
286
287 IF (dfmax(i) >= dc(i)) THEN
288 IF (dc(i) < one) THEN
289 dmg_scale(i) = one - ((dfmax(i)-dc(i))/
max(one-dc(i),em20))**softexp
290 ELSE
291 dmg_scale(i) = zero
292 ENDIF
293 ELSE
294 dmg_scale(i) = one
295 ENDIF
296 ENDDO
297 ENDIF
298
299
300
301
302 IF (nindx > 0) THEN
303 DO j = 1,nindx
304 i = indx(j)
305#include "lockon.inc"
306 WRITE(iout, 1000) ngl(i),ipg,ipt,time
307 WRITE(istdo,1000) ngl(i),ipg,ipt,time
308#include "lockoff.inc"
309 ENDDO
310 ENDIF
311
312 1000 FORMAT(1x,'FOR SHELL ELEMENT NUMBER el#',i10,
313 . ' FAILURE (SYAZWAN) AT GAUSS POINT ',i3,' LAYER ',i3,
314 . ' AT TIME :',1pe12.4)
315