39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "scr17_c.inc"
47#include "tabsiz_c.inc"
48#include "units_c.inc"
49#include "comlock.inc"
50
51
52
53 INTEGER, INTENT(IN) :: NEL,NUPARAM,NUVAR,NGL(NEL)
54 my_real,
INTENT(IN) :: time,uparam(nuparam),
55 . signxx(nel),signyy(nel),signzz(nel),
56 . signxy(nel),signyz(nel),signzx(nel),
57 . dpla(nel),aldt(nel)
58 my_real,
INTENT(INOUT) :: uvar(nel,nuvar),dfmax(nel),
59 . tdele(nel),off(nel),dmgscl(nel)
60
61
62
63 INTEGER NPF(SNPC), MFUNC, KFUNC(MFUNC)
65 EXTERNAL finter
66
67
68
69 INTEGER I,J,INDX(NEL),NINDX,SEL,FLAG_PERTURB,ICOUP
71 . df,p,triaxs,svm,sxx,syy,szz,eps_fail,p1x,p1y,s1x,s1y,
72 . s2y,a1,b1,c1,ref_el_len,lambda,fac,x_1(3),x_2(3),dcrit,exp
73
74
75
76
77
78 x_1(1) = uparam(1)
79 x_1(2) = uparam(2)
80 x_1(3) = uparam(3)
81 x_2(1) = uparam(4)
82 x_2(2) = uparam(5)
83 x_2(3) = uparam(6)
84 flag_perturb = uparam(8)
85 sel = int(uparam(11)+0.0001)
86 IF (sel == 3) sel = 2
87 ref_el_len = uparam(13)
88 icoup = nint(uparam(14))
89 dcrit = uparam(15)
90 exp = uparam(16)
91 eps_fail = zero
92
93
94
95 IF (mfunc > 0) THEN
96 IF (nuvar == 3) THEN
97 IF (uvar(1,3) == zero) THEN
98 DO i = 1,nel
99 uvar(i,3) = aldt(i)
100 lambda = uvar(i,3) / ref_el_len
101 fac = finter(kfunc(1),lambda,npf,tf,df)
102 uvar(i,3) = fac
103 ENDDO
104 ENDIF
105 ELSEIF (nuvar == 9) THEN
106 IF (uvar(1,9) == zero) THEN
107 DO i = 1,nel
108 uvar(i,9) = aldt(i)
109 lambda = uvar(i,9) / ref_el_len
110 fac = finter(kfunc(1),lambda,npf,tf,df)
111 uvar(i,9) = fac
112 ENDDO
113 ENDIF
114 ENDIF
115 ENDIF
116
117
118 DO i = 1,nel
119 IF (off(i) < em01) off(i) = zero
120 IF (off(i) < one .AND. off(i) > zero) off(i) = off(i)*four_over_5
121 END DO
122
123
124
125
126
127 nindx = 0
128
129
130 IF (flag_perturb == 0) THEN
131 DO i = 1,nel
132 IF (off(i) == one .AND. dpla(i) /= zero) THEN
133
134 p = third*(signxx(i) + signyy(i) + signzz(i))
135
136
137 sxx = signxx(i) - p
138 syy = signyy(i) - p
139 szz = signzz(i) - p
140 svm = half*(sxx**2 + syy**2 + szz**2)
141 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
142 svm = sqrt(three*svm)
143
144
145 triaxs = p/
max(em20,svm)
146 IF (triaxs < -two_third) triaxs = -two_third
147 IF (triaxs > two_third) triaxs = two_third
148
149
150
151 IF (triaxs <= third) THEN
152 eps_fail = x_1(1) + x_1(2)*triaxs + x_1(3)*triaxs**2
153 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
154
155 ELSE
156
157 IF (sel == 1) THEN
158 eps_fail = x_2(1) + x_2(2)*triaxs + x_2(3)*triaxs**2
159 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
160
161 ELSEIF (sel == 2) THEN
162 IF (triaxs <= one/sqr3) THEN
163 p1x = third
164 p1y = x_1(1) + x_1(2)*p1x + x_1(3)*p1x**2
165 s1x = one/sqr3
166 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
167 a1 = (p1y - s1y)/(p1x - s1x)**2
168 b1 = -two*a1*s1x
169 c1 = a1*s1x**2 + s1y
170 eps_fail = c1 + b1*triaxs + a1*triaxs**2
171 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
172 ELSE
173 p1x = two*third
174 p1y = x_2(1) + x_2(2)*p1x + x_2(3)*p1x**2
175 s1x = one/sqr3
176 s1y = x_2(1) + x_2(2)/sqr3 + x_2(3)*(one/sqr3)**2
177 a1 = (p1y - s1y)/(p1x - s1x)**2
178 b1 = -two*a1*s1x
179 c1 = a1*s1x**2 + s1y
180 eps_fail = c1 + b1*triaxs + a1*triaxs**2
181 IF ((nuvar == 3).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,3)
182 ENDIF
183 ENDIF
184 ENDIF
185
186
187 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
188 dfmax(i) =
min(one,dfmax(i))
189
190 IF (dfmax(i) >= one .AND. off(i) == one) THEN
191 off(i) = four_over_5
192 nindx = nindx+1
193 indx(nindx) = i
194 tdele(i) = time
195 ENDIF
196 ENDIF
197 ENDDO
198
199 ELSE
200 DO i = 1,nel
201 IF (off(i) == one .AND. dpla(i) /= zero) THEN
202
203 p = third*(signxx(i) + signyy(i) + signzz(i))
204
205
206 sxx = signxx(i) - p
207 syy = signyy(i) - p
208 szz = signzz(i) - p
209 svm = half*(sxx**2 + syy**2 + szz**2)
210 . + signxy(i)**2 + signzx(i)**2 + signyz(i)**2
211 svm = sqrt(three*svm)
212
213
214 triaxs = p/
max(em20,svm)
215 IF (triaxs < -two_third) triaxs = -two_third
216 IF (triaxs > two_third) triaxs = two_third
217
218
219
220 IF (triaxs <= third) THEN
221 eps_fail = uvar(i,3) + uvar(i,4)*triaxs + uvar(i,5)*triaxs**2
222 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
223
224 ELSE
225
226 IF (sel == 1) THEN
227 eps_fail = uvar(i,6) + uvar(i,7)*triaxs + uvar(i,8)*triaxs**2
228 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
229
230 ELSEIF (sel == 2) THEN
231 IF (triaxs <= one/sqr3) THEN
232 p1x = third
233 p1y = uvar(i,3) + uvar(i,4)*p1x + uvar(i,5)*p1x**2
234 s1x = one/sqr3
235 s1y = uvar(i,6) + uvar(i,7)/sqr3 + uvar(i,8)*(one/sqr3)**2
236 a1 = (p1y - s1y)/(p1x - s1x)**2
237 b1 = -two*a1*s1x
238 c1 = a1*s1x**2 + s1y
239 eps_fail = c1 + b1*triaxs + a1*triaxs**2
240 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
241 ELSE
242 p1x = two*third
243 p1y = uvar(i,3) + uvar(i,4)*p1x + uvar(i,5)*p1x**2
244 s1x = one/sqr3
245 s1y = uvar(i,6) + uvar(i,7)/sqr3 + uvar(i,8)*(one/sqr3)**2
246 a1 = (p1y - s1y)/(p1x - s1x)**2
247 b1 = -two*a1*s1x
248 c1 = a1*s1x**2 + s1y
249 eps_fail = c1 + b1*triaxs + a1*triaxs**2
250 IF ((nuvar == 9).AND.(mfunc > 0)) eps_fail = eps_fail*uvar(i,9)
251 ENDIF
252 ENDIF
253 ENDIF
254
255
256 dfmax(i) = dfmax(i) + dpla(i)/
max(eps_fail,em6)
257 dfmax(i) =
min(one,dfmax(i))
258
259 IF (dfmax(i) >= one .AND. off(i) == one) THEN
260 off(i) = four_over_5
261 nindx = nindx+1
262 indx(nindx) = i
263 tdele(i) = time
264 ENDIF
265 ENDIF
266 ENDDO
267 ENDIF
268
269
270
271
272 IF (icoup == 1) THEN
273 DO i = 1,nel
274 IF (dfmax(i) >= dcrit) THEN
275 IF (dcrit < one) THEN
276 dmgscl(i) = one - ((dfmax(i)-dcrit)/
max(one-dcrit,em20))**exp
277 ELSE
278 dmgscl(i) = zero
279 ENDIF
280 ELSE
281 dmgscl(i) = one
282 ENDIF
283 ENDDO
284 ENDIF
285
286
287
288
289 IF (nindx > 0) THEN
290 DO j=1,nindx
291 i = indx(j)
292#include "lockon.inc"
293 WRITE(iout, 1000) ngl(i),time
294 WRITE(istdo,1100) ngl(i),time
295#include "lockoff.inc"
296 ENDDO
297 ENDIF
298
299 1000 FORMAT(1x,' -- RUPTURE OF SOLID ELEMENT (BIQUAD)',i10,
300 . ' AT TIME : ',1pe12.4)
301 1100 FORMAT(1x,' -- RUPTURE OF SOLID ELEMENT (BIQUAD)',i10,
302 . ' AT TIME : ',1pe12.4)