43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "mvsiz_p.inc"
51
52
53
54
55
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#include "param_c.inc"
103
104
105
106
107 INTEGER NEL0, NUPARAM, NUVAR, NPT0,ISRATE, IPT,IFLAG(*),
108 . NGL(NEL0),MAT(NEL0),IPM(NPROPMI,*),INLOC
110 my_real ,
DIMENSION(NEL0) ,
INTENT(IN) :: epsd_pg
111 my_real ,
DIMENSION(NEL0) ,
INTENT(INOUT) :: epsp
113 . time,timestep,uparam(*),
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(*),dplanl(nel0)
125 my_real,
DIMENSION(NEL0),
INTENT(IN) :: loff
126
127
128
130 . signxx(nel0),signyy(nel0),
131 . signxy(nel0),signyz(nel0),signzx(nel0),
132 . sigvxx(nel0),sigvyy(nel0),
133 . sigvxy(nel0),sigvyz(nel0),sigvzx(nel0),
134 . soundsp(nel0),viscmax(nel0),etse(nel0),
135 . dpla_i(nel0)
136
137
138
140 . uvar(nel0,nuvar), off(nel0),thk(nel0),yld(nel0)
141
142
143
144 INTEGER NPF(*),MFUNC,KFUNC(MFUNC)
146 . tf(*)
147
148
149
150 INTEGER I,J,N,NINDX,NMAX,IADBUF,INDEX(MVSIZ)
152 . svm(mvsiz),dr(mvsiz),
153 . aa(mvsiz),bb(mvsiz),dpla_j(mvsiz),
154 . pp(mvsiz),qq(mvsiz),fail(mvsiz),h(mvsiz),hs(mvsiz),
155 . epsm(mvsiz),
156 . ylo(mvsiz),epsgm(mvsiz),
157 . sigexx(mvsiz),sigeyy(mvsiz),sigexy(mvsiz)
159 . r,umr,nux,a,b,c,s11,s22,s12,p,p2,dezz,sigz,s1,s2,s3,
160 . vm2,epst,nnu2,f,df,q2,yld_i,sigpxx,e1,a11,a21,g1,g31,
161 . nnu11,nu11,nu21,nu31,nu41,nu51,nu61,sigpyy,sigpxy,sigm1,
162 . epsm1,epsr11,epsr21,yd1,hc1,cn1,c11,c21,cm1,c31,cl1,
163 . fisokin1,epsgm1,eps01,pa,pb,pc,pda,pdb,yy,
164 . dsxx,dsyy,dsxy,dexx,deyy,dexy,
alpha
165
166 DATA nmax/3/
167
168 IF(time==zero)THEN
169 DO i=1,nel0
170 uvar(i,1)=zero
171 uvar(i,2)=zero
172 uvar(i,3)=zero
173 ENDDO
174 ENDIF
175 iadbuf = ipm(7,mat(1))-1
176 e1 = uparam(iadbuf+1)
177 nux = uparam(iadbuf+2)
178 sigm1= uparam(iadbuf+4)
179 epsm1= uparam(iadbuf+5)
180 epsr11=uparam(iadbuf+6)
181 epsr21=uparam(iadbuf+7)
182 yd1 = uparam(iadbuf+3)
183 hc1 = uparam(iadbuf+8)
184 cn1 = uparam(iadbuf+9)
185 c11 = uparam(iadbuf+10)
186 c21 = uparam(iadbuf+11)
187 cm1 = uparam(iadbuf+12)
188 fisokin1=uparam(iadbuf+15)
189 g1 = uparam(iadbuf+16)
190 g31 = uparam(iadbuf+18)
191 a11 = uparam(iadbuf+20)
192 a21 = uparam(iadbuf+21)
193
194 eps01= uparam(iadbuf+23)
195 c31 = uparam(iadbuf+24)
196 cl1 = uparam(iadbuf+25)
197
198 nnu11 = nux / (one - nux)
199 nnu2 = nnu11*nnu11
200 nu11 = one/(one-nux)
201 nu21 = one/(one+nux)
202 nu31 = one-nnu11
203 nu41 = one + nnu2 + nnu11
204 nu51 = one + nnu2 - two*nnu11
205 nu61 = half- nnu2 + half*nnu11
206
207
208
209
210
211 DO i=1,nel0
212! sigoxx(i) = sigoxx(i) - uvar(i,1)
213
214
215 ENDDO
216
217
218
219 DO i=1,nel0
220
221 signxx(i)=sigoxx(i) - uvar(i,1) +a11*depsxx(i)+a21*depsyy(i)
222 signyy(i)=sigoyy(i) - uvar(i,2) +a21*depsxx(i)+a11*depsyy(i)
223 signxy(i)=sigoxy(i) - uvar(i,3) +g1 *depsxy(i)
224 signyz(i)=sigoyz(i)+gs(i) *depsyz(i)
225 signzx(i)=sigozx(i)+gs(i) *depszx(i)
226 sigexx(i) = signxx(i)
227 sigeyy(i) = signyy(i)
228 sigexy(i) = signxy(i)
229 soundsp(i) = sqrt(a11/rho0(i))
230 viscmax(i) = zero
231 etse(i) = one
232
233
234
235 IF (israte == 0) THEN
236 epsp(i) = half*( abs(epspxx(i)+epspyy(i))
237 . + sqrt( (epspxx(i)-epspyy(i))*(epspxx(i)-epspyy(i))
238 . + epspxy(i)*epspxy(i) ) )
239 ELSE
240 epsp(i) = asrate*epsd_pg(i) + (one-asrate)*epsp(i)
241 END IF
242
243
244
245 epst = half*( epsxx(i)+epsyy(i)
246 . + sqrt( (epsxx(i)-epsyy(i))*(epsxx(i)-epsyy(i))
247 . + epsxy(i)*epsxy(i) ) )
248 fail(i) =
max(zero,
min(one,(epsr21-epst)/(epsr21-epsr11)))
249
250 ENDDO
251
252
253
254
255 DO i=1,nel0
256 IF(pla(i)<=zero) THEN
257 pa=yd1
258 ELSE
259 pa=yd1+hc1*pla(i)**cn1
260 ENDIF
261 IF(epsp(i)<=eps01) THEN
262 pb=0.
263 ELSEIF(pla(i)<=zero) THEN
264 pb=c11*log(epsp(i)/eps01)
265 ELSE
266 pb=(c11-c21*pla(i)**cm1)*log(epsp(i)/eps01)
267 ENDIF
268 IF(epsp(i)<=zero) THEN
269 pc=zero
270 ELSE
271 pc=c31*epsp(i)**cl1
272 ENDIF
273
274 IF(pla(i)>zero. and .cn1>=one) THEN
275 pda = hc1*cn1*pla(i)**(cn1-one)
276 ELSEIF(pla(i)>zero. and .cn1<one)THEN
277 pda = hc1*cn1*pla(i)**(one -cn1)
278 ELSE
279 pda = e1
280 ENDIF
281 IF(pla(i)<=0. or .epsp(i)<=eps01) THEN
282 pdb = zero
283 ELSEIF(cm1>=one) THEN
284 pdb = c21*cm1*pla(i)**(cm1 - one)*log(epsp(i)/eps01)
285 ELSE
286 pdb = c21*cm1*pla(i)**(one-cm1)*log(epsp(i)/eps01)
287 ENDIF
288
289
290
291
292
293
294
295
296 ylo(i)= yd1 + pc
297 yy = pa + pb + pc
298 hs(i) = pda + pdb
299 yld(i)=
min(sigm1+pc, yy)
300 IF (yld(i)<yy) hs(i) = zero
301 hs(i) = fail(i)*hs(i)
302 yld(i) = fail(i)*yld(i)
303 ENDDO
304
305
306
307 IF (fisokin1==one) THEN
308 DO i=1,nel0
309 yld(i) = fail(i)*ylo(i)
310 ENDDO
311 ELSEIF (fisokin1>zero) THEN
312 DO i=1,nel0
313 yld(i) = (one-fisokin1)*yld(i) + fisokin1*fail(i)*ylo(i)
314 ENDDO
315 ENDIF
316
317
318
319
320
321 IF(iflag(1)==0) THEN
322 DO i=1,nel0
323 svm(i)=sqrt(signxx(i)*signxx(i)
324 . +signyy(i)*signyy(i)
325 . -signxx(i)*signyy(i)
326 . +three*signxy(i)*signxy(i))
327 r =
min(one,yld(i)/
max(em20,svm(i)))
328 signxx(i)=signxx(i)*r
329 signyy(i)=signyy(i)*r
330 signxy(i)=signxy(i)*r
331 umr = one - r
332 dpla_i(i) = off(i)*svm(i)*umr/(g31+hs(i))
333 pla(i) = pla(i) + dpla_i(i)
334 s1=half*(signxx(i)+signyy(i))
335 IF (inloc == 0) THEN
336 dezz = dpla_i(i) * s1 / yld(i)
337 dezz = -(depsxx(i)+depsyy(i))*nnu11-nu31*dezz
338 thk(i) = thk(i) + dezz*thkly(i)*off(i)
339 ENDIF
340 ENDDO
341
342
343
344
345
346 ELSEIF(iflag(1)==1)THEN
347
348
349
350 DO i=1,nel0
351 s1=signxx(i)+signyy(i)
352 s2=signxx(i)-signyy(i)
353 s3=signxy(i)
354 aa(i)=fourth*s1*s1
355 bb(i)=three_over_4*s2*s2+3.*s3*s3
356 svm(i)=sqrt(aa(i)+bb(i))
357 IF (inloc == 0) THEN
358 dezz = -(depsxx(i)+depsyy(i))*nnu11
359 thk(i) = thk(i) + dezz*thkly(i)*off(i)
360 ENDIF
361 ENDDO
362
363
364
365 nindx=0
366 DO i=1,nel0
367 IF(svm(i)>yld(i).AND.off(i)==one) THEN
368 nindx=nindx+1
369 index(nindx)=i
370 ENDIF
371 ENDDO
372
373
374
375 IF(nindx/=0) THEN
376 DO j=1,nindx
377 i=index(j)
378 hs(i) =
max(zero,hs(i))
379 etse(i)= hs(i)/(hs(i)+e1)
380 h(i) = (one-fisokin1)*hs(i)
381 dpla_j(i)=(svm(i)-yld(i))/(g31+hs(i))
382 ENDDO
383
384 DO n=1,nmax
385#include "vectorize.inc"
386 DO j=1,nindx
387 i =index(j)
388 dpla_i(i)=dpla_j(i)
389 yld_i = yld(i)+h(i)*dpla_i(i)
390 dr(i) = half*e1*dpla_i(i)/yld_i
391 pp(i) = one/(one+dr(i)*nu11)
392 qq(i) = one/(one + three*dr(i)*nu21)
393 p2 = pp(i)*pp(i)
394 q2 = qq(i)*qq(i)
395 f =aa(i)*p2+bb(i)*q2-yld_i*yld_i
396 df =-(aa(i)*nu11*p2*pp(i)+three*bb(i)*nu21*q2*qq(i))
397 . *(e1-two*dr(i)*h(i))/yld_i
398 . -two*h(i)*yld_i
399 IF(dpla_i(i)>zero) THEN
400 dpla_j(i) =
max(zero,dpla_i(i)-f/df)
401 ELSE
402 dpla_j(i) = zero
403 ENDIF
404 ENDDO
405 ENDDO
406
407
408
409#include "vectorize.inc"
410 DO j=1,nindx
411 i=index(j)
412 pla(i) = pla(i) + dpla_i(i)
413 s1=(signxx(i)+signyy(i))*pp(i)
414 s2=(signxx(i)-signyy(i))*qq(i)
415 signxx(i)=half*(s1+s2)
416 signyy(i)=half*(s1-s2)
417 signxy(i)=signxy(i)*qq(i)
418 IF (inloc == 0) THEN
419 dezz =-nu31*dr(i)*s1/e1
420 thk(i) = thk(i) + dezz*thkly(i)*off(i)
421 ENDIF
422 ENDDO
423 ENDIF
424
425
426
427
428
429
430
431
432
433 ELSEIF(iflag(1)==2)THEN
434
435 DO i=1,nel0
436 p = -(signxx(i)+signyy(i))*third
437 s11 = signxx(i)+p
438 s22 = signyy(i)+p
439
440 s12 = signxy(i)
441
442 p2 = p*p
443 vm2= three*(s12*s12 - s11*s22)
444 a = p2*nu41 + vm2
445 vm2= 3.*p2 + vm2
446 b = p2*nu61
447 c = p2*nu51 - yld(i)*yld(i)
448 r =
min(one,(-b + sqrt(
max(zero,b*b-a*c)))/
max(a ,em20))
449 signxx(i) = s11*r - p
450 signyy(i) = s22*r - p
451 signxy(i) = s12*r
452
453
454 umr = one-r
455 sigz = nnu11*p*umr
456 signxx(i) = signxx(i) + sigz
457 signyy(i) = signyy(i) + sigz
458 svm(i)=sqrt(vm2)
459 dpla_i(i) = off(i)*svm(i)*umr/(g31+hs(i))
460 pla(i) = pla(i) + dpla_i(i)
461 IF (inloc == 0) THEN
462 dezz = dpla_i(i) * half*(signxx(i)+signyy(i)) / yld(i)
463 dezz=-(depsxx(i)+depsyy(i))*nnu11-nu31*dezz
464 thk(i) = thk(i) + dezz*thkly(i)*off(i)
465 ENDIF
466 IF(r<one) etse(i)= hs(i)/(hs(i)+e1)
467 ENDDO
468 ENDIF
469
470 DO i=1,nel0
471 IF(pla(i)>epsm1.AND.off(i)==one)off(i)=four_over_5
472 ENDDO
473
474
475
476 IF (fisokin1/=zero) THEN
477 DO i=1,nel0
478 dsxx = sigexx(i) - signxx(i)
479 dsyy = sigeyy(i) - signyy(i)
480 dsxy = sigexy(i) - signxy(i)
481 dexx = (dsxx - nux*dsyy)
482 deyy = (dsyy - nux*dsxx)
483 dexy = two*(one+nux)*dsxy
484 alpha = fisokin1*hs(i)/(e1+hs(i))/three
485 sigpxx =
alpha*(four*dexx+two*deyy)
486 sigpyy =
alpha*(four*deyy+two*dexx)
488
489 signxx(i) = signxx(i) + uvar(i,1)
490 signyy(i) = signyy(i) + uvar
491 signxy(i) = signxy(i) + uvar(i,3)
492 uvar(i,1) = uvar(i,1) + sigpxx
493 uvar(i,2) = uvar(i,2) + sigpyy
494 uvar(i,3) = uvar(i,3) + sigpxy
495 ENDDO
496 ENDIF
497
498
499
500 IF (inloc > 0) THEN
501 DO i = 1,nel0
502 IF (loff(i) == one) THEN
503 svm(i) = sqrt(signxx(i)*signxx(i)
504 . + signyy(i)*signyy(i)
505 . - signxx(i)*signyy(i)
506 . + three*signxy(i)*signxy(i))
507 dezz =
max(dplanl(i),zero)*half*(signxx(i)+signyy(i))/
max(svm(i),em20)
508 dezz = -nux*((signxx(i)-sigoxx(i)+signyy(i)-sigoyy(i))/e1) - dezz
509 thk(i) = thk(i) + dezz*thkly(i)*off(i)
510 ENDIF
511 ENDDO
512 ENDIF
513
514 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)