37
38
39
40#include "implicit_f.inc"
41#include "comlock.inc"
42
43
44
45#include "param_c.inc"
46#include "scr17_c.inc"
47#include "com04_c.inc"
48#include "com08_c.inc"
49#include "units_c.inc"
50#include "impl1_c.inc"
51
52
53
54 INTEGER ,INTENT(IN) :: NEL,NUPARAM,NUVAR,NFUNC,IFUNC(NFUNC),
55 . NPF(*)
56 INTEGER ,DIMENSION(NEL) ,INTENT(IN) :: MAT,PID,NGL
57 my_real ,
DIMENSION(NPROPM ,NUMMAT) ,
INTENT(IN) :: pm
58 my_real ,
DIMENSION(NPROPG ,NUMGEO) ,
INTENT(IN) :: geo
59 my_real ,
DIMENSION(NUPARAM) ,
INTENT(IN) :: uparam
60 my_real ,
DIMENSION(NEL,NUVAR) :: uvar
62 my_real ,
DIMENSION(NEL) :: off,pla,al,exx,exy,exz,kxx,kyy,kzz,
63 . fa1,fa2,fa3,ma1,ma2,ma3
65 . tf(*),finter
66 EXTERNAL finter
67 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: sigy
68
69
70
71 INTEGER ,DIMENSION(NEL) :: INDX,ICC,ISRATE,VFLAG,IPOS,IAD,ILEN
72 INTEGER :: I,J,IPID,NINDX
74 my_real ,
DIMENSION(NEL) :: e,g,g3,ca,cb,cn,cp,a1,b1,b2,b3,shf,
75 . degmb,degfx,dmpm,dmpf,f1,m1,m2,m3,degsh,yeq,yld,yma2,yldmax,
76 . dwpla,epmax,epst,epsr1,epsr2,epdr,epsp,rho,epmx,dwelm,dwelf,rr,
77 . sh,sh10,sh20,sh0,sh1,sh2,asrate,yscale,dpla,dfdpla
78
79 epif = zero
80
81 IF (impl_s == 0 .OR. idyna > 0) THEN
82 DO i=1,nel
83 dmpm(i)=geo(16,pid(i))*al(i)
84 dmpf(i)=geo(17,pid(i))*al(i)
85 ENDDO
86 ELSE
87 DO i=1,nel
88 dmpm(i)=zero
89 dmpf(i)=zero
90 ENDDO
91 ENDIF
92
93 DO i=1,nel
94 ipid = pid(i)
95 e(i) = uparam(1)
96 ca(i) = uparam(3)
97 yldmax(i)= uparam(4)
98 epmax(i) = uparam(5)
99 epsr1(i) = uparam(6)
100 epsr2(i) = uparam(7)
101 cb(i) = uparam(8)
102 cn(i) = uparam(9)
103 icc(i) = nint(uparam(10))
104 epdr(i) = uparam(11)
105 epif =
max(epif,epdr(i))
106 cp(i) = uparam(12)
107 g(i) = uparam(16)
108 g3(i) = uparam(18)
109 israte(i)= nint(uparam(13))
110 asrate(i)= uparam(14)
111 vflag(i) = nint(uparam(23))
112 yscale(i)= uparam(24)
113
114 rho(i) = pm(1,mat(i))
115
116 a1(i) = geo(1 ,ipid)
117 b1(i) = geo(2 ,ipid)
118 b2(i) = geo(18,ipid)
119 b3(i) = geo(4 ,ipid)
120 shf(i) = geo(37,ipid)
121 dpla(i) = zero
122 ENDDO
123
124
125 DO i=1,nel
126 degmb(i) =
for(i,1)*exx(i)
127 degsh(i) =
for(i,2)*exy(i)+
for(i,3)*exz(i)
128 degfx(i) = mom(i,1)*kxx(i)+mom(i,2)*kyy(i)+mom(i,3)*kzz(i)
129 ENDDO
130
131
132
133 DO i=1,nel
134 sh(i) = five_over_6*g(i)*a1(i)
135 yma2(i)= twelve*e(i)/al(i)**2
136 sh10(i)= yma2(i)*b1(i)
137 sh20(i)= yma2(i)*b2(i)
138 sh0(i) = (one - shf(i))*sh(i)
139 sh1(i) = sh0(i)*sh10(i)/(sh(i)+sh10(i)) + shf(i)*sh10(i)
140 sh2(i) = sh0(i)*sh20(i)/(sh(i)+sh20(i)) + shf(i)*sh20(i)
141
142 f1(i) =
for(i,1) + exx(i)*a1(i)*e(i)
143 for(i,2)=
for(i,2) + exy(i)*sh2(i)
144 for(i,3)=
for(i,3) + exz(i)*sh1(i)
145 m1(i) = mom(i,1) + kxx(i)*g(i) *b3(i)
146 m2(i) = mom(i,2) + kyy(i)*e(i)*b1(i)
147 m3(i) = mom(i,3) + kzz(i)*e(i)*b2(i)
148 epst(i) = f1(i)/a1(i)/e(i)
149 ENDDO
150
151
152
153 DO i=1,nel
154 yeq(i) = f1(i)*f1(i) + three * a1(i) *
155 . (m1(i)*m1(i) /
max(b3(i),em20)
156 . + m2(i)*m2(i) /
max(b1(i),em20)
157 . + m3(i)*m3(i) /
max(b2(i),em20) )
158 yeq(i) =
max(em20, sqrt(yeq(i)) / a1(i) )
159 ENDDO
160
161
162
163 IF (nfunc > 0) THEN
164
165
166
167
168 DO i = 1, nel
169 yld(i) = yscale(i)*finter(ifunc(1),pla(i),npf,tf,dfdpla(i))
170 ENDDO
171
172 ENDIF
173
174
175
176 DO i = 1,nel
177 IF (nfunc > 0) THEN
178 yld(i) = yscale(i)*yld(i)
179 ELSE
180 yld(i) = ca(i)
181 ENDIF
182 ENDDO
183
184
185
186 DO i = 1,nel
187 IF (pla(i) > zero) THEN
188 IF (nfunc > 0) THEN
189 yld(i) = yscale(i)*yld(i)
190 ELSE
191 yld(i) = ca(i) + cb(i)*exp(cn(i)*log(pla(i)))
192 ENDIF
193 ENDIF
194 ENDDO
195
196
197
198 IF (epif > zero) THEN
199 DO i = 1,nel
200 IF (epdr(i) > zero) THEN
201 epsp(i) = abs(degmb(i) + degfx(i))/yeq(i)/a1(i)
202 IF (vflag(i) /= 1) THEN
203 IF (israte(i) == 1) THEN
205 epsdot =
alpha*abs(epsp(i)/
max(em20,dt1)) + (one-
alpha)*uvar(i,1)
206 uvar(i,1) = epsdot
207 ELSE
208 epsdot = abs(epsp(i)/
max(em20,dt1))
209 ENDIF
210 ELSE
211 epsdot = uvar(i,1)
212 ENDIF
213 frate = one + (epsdot*epdr(i))**cp(i)
214 IF (icc(i)== 1) yldmax(i) = yldmax(i) * frate
215 IF ((nfunc > 0) .AND. (ca(i) /= zero)) THEN
216 IF (pla(i)>zero) THEN
217 yld(i) = yld(i) + (ca(i) + cb(i)*exp(cn(i)*log(pla(i))))*(frate-one)
218 ELSE
219 yld(i) = yld(i) + ca(i)*(frate-one)
220 ENDIF
221 ELSE
222 yld(i) = yld(i) * frate
223 ENDIF
224 ENDIF
225 ENDDO
226 ELSE
227 epsp(1:nel )= one
228 ENDIF
229
230
231
232 DO i=1,nel
233 yld(i) =
min(yld(i),yldmax(i))
234 sigy(i) = yld(i)
235 rr(i) =
min(one, yld(i) / yeq(i))
236 f1(i) = f1(i)*rr(i)
237 dwelm(i) =(f1(i) +
for(i,1))*(f1(i)-
for(i,1)) / e(i)/a1(i)
238 degmb(i) = degmb(i)+ f1(i)*exx(i)
239 ENDDO
240
241 DO i=1,nel
242 m1(i) = m1(i)*rr(i)
243 m2(i) = m2(i)*rr(i)
244 m3(i) = m3(i)*rr(i)
245 dwelf(i) =(m1(i)+mom(i,1))*(m1(i)-mom(i,1))/ g(i)/b3(i)+
246 . (m2(i)+mom(i,2))*(m2(i)-mom(i,2))/e(i)/b1(i)+
247 . (m3(i)+mom(i,3))*(m3(i)-mom(i,3))/e(i)/b2(i)
248 degfx(i) = degfx(i) + m1(i)*kxx(i) + m2(i)*kyy(i) + m3(i)*kzz(i)
249 ENDDO
250
251 DO i=1,nel
252 dwpla(i) = degmb(i) + degfx(i) - dwelm(i) - dwelf(i)
253 degsh(i) = degsh(i) +
for(i,2)*exy(i) +
for(i,3)*exz(i)
254 fact = half*off(i)*al(i)
255 ENDDO
256
257
258
259 DO i=1,nel
260 fact = dwpla(i)/yld(i)
261 dpla(i) = off(i)*
max(zero,half*fact/a1(i))
262 pla(i) = pla(i) + off(i)*
max(zero,half*fact/a1(i))
263 ENDDO
264
265
266
267 DO i=1,nel
268 IF (off(i) < em01) off(i) = zero
269 IF (off(i) < one ) off(i) = off(i)*four_over_5
270 ENDDO
271
272
273
274 nindx = 0
275 DO i = 1,nel
276 IF (off(i) == one) THEN
277 dmg = one
278 IF (epst(i) > epsr1(i)) THEN
279 dmg = (epsr2(i) - epst(i)) / (epsr2(i) - epsr1(i))
284 mom(i,1) = m1(i)*dmg
285 mom(i,2) = m2(i)*dmg
286 mom(i,3) = m3(i)*dmg
287 ENDIF
288
289 IF (dmg == zero .or. pla(i) >= epmax(i)) THEN
290 off(i) = four_over_5
291 idel7nok = 1
292 nindx = nindx+1
293 indx(nindx) = i
294 ENDIF
295
296 IF (vflag(i) == 1) THEN
298 epsdot = dpla(i)/
max(em20,dt1)
299 uvar(i,1) =
alpha*epsdot + (one -
alpha)*uvar(i,1)
300 ENDIF
301
302 ENDIF
303 ENDDO
304
305 IF (nindx > 0 .AND. imconv == 1) THEN
306 DO j=1,nindx
307 i = indx(j)
308#include "lockon.inc"
309 WRITE(iout, 1000) ngl(i)
310 WRITE(istdo,1100) ngl(i),tt
311#include "lockoff.inc"
312 ENDDO
313 ENDIF
314
315 DO i=1,nel
316 fa1(i) = f1(i)
319 ma1(i) = m1(i)
320 ma2(i) = m2(i)
321 ma3(i) = m3(i)
322 ENDDO
323
324 1000 FORMAT(1x,'-- RUPTURE OF BEAM ELEMENT NUMBER ',i10)
325 1100 FORMAT(1x,'-- RUPTURE OF BEAM ELEMENT :',i10,' AT TIME :',g11.4)
326
327 RETURN
for(i8=*sizetab-1;i8 >=0;i8--)