48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "mvsiz_p.inc"
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107#include "com01_c.inc"
108
109
110
111 INTEGER NEL0, NUPARAM, NUVAR, NPT0, IPT,IFLAG(*),
112 . NGL(NEL0),MAT(NEL0),INLOC
114 .
area(nel0),rho0(nel0),eint(nel0,2),
115 . thkly(nel0),pla(nel0),
116 . epspxx(nel0),epspyy(nel0),
117 . epspxy(nel0),epspyz(nel0),epspzx(nel0),
118 . depsxx(nel0),depsyy(nel0),
119 . depsxy(nel0),depsyz(nel0),depszx(nel0),
120 . epsxx(nel0) ,epsyy(nel0) ,
121 . epsxy(nel0) ,epsyz(nel0) ,epszx(nel0) ,
122 . sigoxx(nel0),sigoyy(nel0),
123 . sigoxy(nel0),sigoyz(nel0),sigozx(nel0),
124 . gs(*),vol(nel0) ,tempel(nel0),
125 . die(nel0),coef(nel0),dplanl(nel0)
126 my_real ,
DIMENSION(NUPARAM) :: uparam
127 INTEGER, INTENT(IN) :: JTHE
128 my_real,
DIMENSION(NEL0),
INTENT(IN) :: loff
129
130
131
133 . signxx(nel0),signyy(nel0),
134 . signxy(nel0),signyz(nel0),signzx(nel0),
135 . sigvxx(nel0),sigvyy(nel0),
136 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
137 . soundsp(nel0),viscmax(nel0),etse(nel0)
138
139
140
141 my_real uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
142
143
144
145 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
147 EXTERNAL finter
148
149
150
151
152
153
154
155
156
157
158 INTEGER I,J,NRATE(MVSIZ),J1,J2,N,NINDX,NMAX,INDEX(MVSIZ)
160 . e,a1,a2,g,g3,
161 . aa(mvsiz),bb(mvsiz),pp(mvsiz),qq(mvsiz),h(mvsiz),
162 . epsmax(mvsiz),cc,dd(mvsiz),ahs,
163 . bhs, cn, cm, k1,
164 . k2, dh, vm0, temp(mvsiz),
165 . vol0,dvm, vm(mvsiz),hk(mvsiz),nu,
166 . nnu2,nu1,nu2,nu3,nu4,
167 . nu5,nu6,svm(mvsiz)
169 . dpla(mvsiz),umr, r, cp, eps0,dezz,s1, s2,
170 . s3, dpla_j(mvsiz), yld_i,dr(mvsiz), p2,q2,nnu1,
171 . s11,s22,pla_i,
172 . s12, vm2, a, b, c, sigz, f, df, p,
173 . ca,cb,cq,pn, cd,
174 . hl, argexp, aux0, aux1, aux2, aux3, kt(mvsiz)
175 DATA nmax/3/
176
177
178
179 e = uparam(1)
180 a1 = uparam(2)
181 a2 = uparam(3)
182 g = uparam(4)
183 nu = uparam(5)
184 ca = uparam(6)
185 cb = uparam(7)
186 cq = uparam(8)
187 cc = uparam(9)
188 cd = uparam(10)
189 pn = uparam(11)
190 ahs = uparam(12)
191 bhs = uparam(13)
192 cm = uparam(14)
193 cn = uparam(15)
194 k1 = uparam(16)
195 k2 = uparam(17)
196 dh = uparam(18)
197 vm0 = uparam(19)
198 eps0= uparam(20)
199 cp = uparam(21)
200 hl = uparam(23)
201 g3 = three*g
202
203 nnu1 = nu / (one - nu)
204 nnu2 = nnu1*nnu1
205 nu1 = one/(one-nu)
206 nu2 = one/(one+nu)
207 nu3 = one-nnu1
208 nu4 = one + nnu2 + nnu1
209 nu5 = one + nnu2 - two*nnu1
210 nu6 = half - nnu2 + half*nnu1
211 DO i=1,nel0
212 temp(i) = uparam(22)
213
214 coef(i) = uparam(24)
215 ENDDO
216
217 IF (isigi==0) THEN
218 IF(time==0.0)THEN
219 DO i=1,nel0
220 uvar(i,1) = zero
221 uvar(i,2) = vm0
222 uvar(i,3) = zero
223 uvar(i,4) = zero
224 ENDDO
225 ENDIF
226 ENDIF
227
228 DO i=1,nel0
229
230 signxx(i)=sigoxx(i) + a1*depsxx(i) + a2*depsyy(i)
231 signyy(i)=sigoyy(i) + a2*depsxx(i) + a1*depsyy(i)
232 signxy(i)=sigoxy(i) + g *depsxy(i)
233 signyz(i)=sigoyz(i) + gs(i)*depsyz(i)
234 signzx(i)=sigozx(i) + gs(i)*depszx(i)
235
236 soundsp(i) = sqrt(a1/rho0(i))
237 viscmax(i) = zero
238 etse(i) = one
239 ENDDO
240
241 IF(jthe > 0 ) THEN
242 DO i=1,nel0
243 temp(i) = tempel(i)
244 ENDDO
245 ELSE
246 DO i=1,nel0
247 vol0 = vol(i) * rho0(i)
248 vm(i) = uvar(i,2)
249 temp(i) = temp(i)
250 . + ( coef(i)*(eint(i,1)+ eint(i,2))
251 . + vm(i)*hl ) * cp /vol0
252
253
254 ENDDO
255 ENDIF
256
257
258 DO i=1,nel0
259 vm(i) = uvar(i,2)
260
261
262
263
264
265
266
267
268
269 aux0 = pla(i)+eps0
270 aux1 = log(
max(em20,aux0))
271 aux2 = exp( (cn - one)*aux1 )
272 aux3 = (bhs - ahs) * exp(-cm * aux0 * aux2)
273 kt(i)= k1 + k2*temp(i)
274
275 yld(i) = ( bhs - aux3 ) * kt(i)
276 . + dh*vm(i)
277 h(i) = cm*cn* aux2 * aux3 * kt(i)
278
279
280
281 dpla(i) =zero
282 ENDDO
283
284
285
286 IF(iflag(1)==0)THEN
287
288 DO i=1,nel0
289 svm(i)=sqrt(signxx(i)*signxx(i)
290 . +signyy(i)*signyy(i)
291 . -signxx(i)*signyy(i)
292 . + three*signxy(i)*signxy(i))
293 r =
min(one,yld(i)/
max(em20,svm(i)))
294 signxx(i)=signxx(i)*r
295 signyy(i)=signyy(i)*r
296 signxy(i)=signxy(i)*r
297 umr = one - r
298
299 dpla(i) = off(i)*svm(i)*umr/(e)
300 pla(i) = pla(i) + dpla(i)
301 s1=half*(signxx(i)+signyy(i))
302 IF (inloc == 0) THEN
303 dezz = dpla(i) * half*(signxx(i)+signyy(i)) / yld(i)
304 dezz=-(depsxx(i)+depsyy(i))*nnu1-nu3*dezz
305 thk(i) = thk(i) + dezz*thkly(i)*off(i)
306 ENDIF
307 IF(r<1.) etse(i)= h(i)/(h(i)+e)
308 ENDDO
309 ELSEIF(iflag(1)==1)THEN
310
311
312
313 DO i=1,nel0
314 h(i) =
max(zero,h(i))
315 s1=signxx(i)+signyy(i)
316 s2=signxx(i)-signyy(i)
317 s3=signxy(i)
318 aa(i)=fourth*s1*s1
319 bb(i)=three_over_4*s2*s2+three*s3*s3
320 svm(i)=sqrt(aa(i)+bb(i))
321 IF (inloc == 0) THEN
322 dezz = -(depsxx(i)+depsyy(i))*nnu1
323 thk(i) = thk(i) + dezz*thkly(i)*off(i)
324 ENDIF
325 ENDDO
326
327
328
329 nindx=0
330 DO i=1,nel0
331 IF(svm(i)>yld(i).AND.off(i)==1.) THEN
332 nindx=nindx+1
333 index(nindx)=i
334 ENDIF
335 ENDDO
336
337 IF(nindx/=0) THEN
338
339
340
341 DO j=1,nindx
342 i=index(j)
343 dpla_j(i)=(svm(i)-yld(i))/(g3+h(i))
344 etse(i)= h(i)/(h(i)+e)
345 ENDDO
346
347 DO n=1,nmax
348#include "vectorize.inc"
349 DO j=1,nindx
350 i=index(j)
351 dpla(i)=dpla_j(i)
352 pla_i = pla(i) + dpla(i)
353
354 yld_i = ( bhs - (bhs - ahs)*
355 . exp(-cm*exp(cn*log(
max(em20,pla_i+eps0))) ))
356 . * kt(i) + dh*vm(i)
357
358 dr(i) =half*e*dpla(i)/yld_i
359 pp(i) =one/(one+dr(i)*nu1)
360 qq(i) =one/(one+three*dr(i)*nu2)
361 p2 =pp(i)*pp(i)
362 q2 =qq(i)*qq(i)
363 f =aa(i)*p2+bb(i)*q2-yld_i*yld_i
364 df =-(aa(i)*nu1*p2*pp(i)+three*bb(i)*nu2*q2*qq(i))
365 . *(e- two*dr(i)*h(i))/yld_i
366 . - two*h(i)*yld_i
367 df = sign(
max(abs(df),em20),df)
368 IF(dpla(i)>zero) THEN
369 dpla_j(i)=
max(zero,dpla(i)-f/df)
370 ELSE
371 dpla_j(i)=zero
372 ENDIF
373 ENDDO
374 ENDDO
375
376
377
378#include "vectorize.inc"
379 DO j=1,nindx
380 i=index(j)
381 pla(i) = pla(i) + dpla(i)
382 s1=(signxx(i)+signyy(i))*pp(i)
383 s2=(signxx(i)-signyy(i))*qq(i)
384 signxx(i)=half*(s1+s2)
385 signyy(i)=half*(s1-s2)
386 signxy(i)=signxy(i)*qq(i)
387 IF (inloc == 0) THEN
388 dezz = - nu3*dr(i)*s1/e
389 thk(i) = thk(i) + dezz*thkly(i)*off(i)
390 ENDIF
391 ENDDO
392 ENDIF
393
394 ELSEIF(iflag(1)==2)THEN
395
396
397
398
399 DO i=1,nel0
400 p = -(signxx(i)+signyy(i))*third
401 s11 = signxx(i)+p
402 s22 = signyy(i)+p
403
404 s12 = signxy(i)
405
406 p2 = p*p
407 vm2= three*(s12*s12 - s11*s22)
408 a = p2*nu4 + vm2
409 vm2= three*p2 + vm2
410 b = p2*nu6
411 c = p2*nu5 - yld(i)*yld(i)
412 r =
min(one,(-b + sqrt(
max(zero,b*b-a*c)))/
max(a ,em20))
413 signxx(i) = s11*r - p
414 signyy(i) = s22*r - p
415 signxy(i) = s12*r
416
417
418 umr = one - r
419 sigz = nnu1*p*umr
420 signxx(i) = signxx(i) + sigz
421 signyy(i) = signyy(i) + sigz
422 svm(i)=sqrt(vm2)
423 dpla(i) = off(i)*svm(i)*umr/(three*g)
424
425 pla(i) = pla(i) + dpla(i)
426 IF (inloc == 0) THEN
427 dezz = dpla(i) * half*(signxx(i)+signyy(i)) / yld(i)
428 dezz=-(depsxx(i)+depsyy(i))*nnu1-nu3*dezz
429 thk(i) = thk(i) + dezz*thkly(i)*off(i)
430 ENDIF
431 IF(r<one) etse(i)= h(i)/(h(i)+e)
432 ENDDO
433 ENDIF
434
435 DO i=1,nel0
436 dvm = half*(one - tanh(cc + cd*temp(i)) )
437
438 argexp= cq/
max(em20, temp(i))
439 . + ((cb+one)/cb)
440 . *log(
max(em20,one - vm(i))/
max(em20,vm(i)))
441 . + pn*log(
max(em20,vm(i)))
442
443 dvm = cb*exp( argexp )*dvm/
max(ca,em20)
444
445 IF(dpla(i)/=zero) uvar(i,3) = dvm
446 vm(i) = vm(i) +
max(dvm*dpla(i),zero)
447 vm(i) =
min(vm(i), one)
448
449 IF(jthe > 0 ) die(i) = (vm(i) - uvar(i,2))*hl
450 uvar(i,2) = vm(i)
451 uvar(i,4) = temp(i)
452 uvar(i,1) = pla(i)
453 ENDDO
454
455
456
457 IF (inloc > 0) THEN
458 DO i = 1,nel0
459 IF (loff(i) == one) THEN
460 svm(i) = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
461 . - signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
462 dezz =
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(svm(i),em20)
463 dezz = -nu*((signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/e) - dezz
464 thk(i) = thk(i) + dezz*thkly(i)*off(i)
465 ENDIF
466 ENDDO
467 ENDIF
468
469 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)