46
47
48
49#include "implicit_f.inc"
50
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#include "param_c.inc"
102#include "com01_c.inc"
103
104
105
106 INTEGER NEL, NUPARAM, NUVAR, NPT0, IPT,ISRATE,
107 . IFLAG(*),NGL(NEL),MAT(NEL),IPM(NPROPMI,*)
109 my_real ,
DIMENSION(NEL) ,
INTENT(INOUT) :: epsp
110 my_real time,timestep,uparam(*),
111 .
area(nel),rho0(nel),eint(nel,2),
112 . thkly(nel),pla(nel),
113 . epspxx(nel),epspyy(nel),
114 . epspxy(nel),epspyz(nel),epspzx(nel),
115 . depsxx(nel),depsyy(nel),
116 . depsxy(nel),depsyz(nel),depszx(nel),
117 . epsxx(nel) ,epsyy(nel) ,
118 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
119 . sigoxx(nel),sigoyy(nel),
120 . sigoxy(nel),sigoyz(nel),sigozx(nel),
121 . gs(*)
122
123
124
126 . signxx(nel),signyy(nel),
127 . signxy(nel),signyz(nel),signzx(nel),
128 . sigvxx(nel),sigvyy(nel),
129 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
130 . soundsp(nel),viscmax(nel),etse(nel),
131 . dpla_i(nel)
132
133
134
135 my_real uvar(nel,nuvar), off(nel),thk(nel),yld(nel)
136
137
138
139 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
141 EXTERNAL finter
142
143
144
145
146
147
148
149
150
151
152 INTEGER I,I1,I2,J,J1,J2,K,K1,N0,N1,N2,N3,IADBUF,NFUNC,FUNC,FUND,
153 . NP1,NP2,NRATE
154 INTEGER JJ(NEL),IFUNC(NEL,100),
155 . IPOS(NEL),IAD(NEL),ILEN(NEL),
156 . IPOSC1(NEL),IADC1(NEL),ILENC1(),
157 . IPOSC2(NEL),IADC2(),ILENC2(NEL),
158 . IPOSD1(NEL),IADD1(NEL),ILEND1(NEL),
159 . IPOSD2(NEL),IADD2(NEL),ILEND2(NEL)
161 . r,dezz,dpla,a11,a22,rate1,rate2,sigy1,sigy2,dydx,dtds,
alpha,
162 . s1,s2,sx,t1,t2,ty,x1,x2,y1,y2,a,b,c,epseff,sfc,sfd,epspl
164 . e(nel),a1(nel),a2(nel),g(nel),g3(nel),hc(nel),hd(nel),
165 . nu(nel),nnu1(nel),nu3(nel),epsmax(nel),fac(nel),deplzz(nel),
166 . sigo(nel),svm(nel),sigyld(nel),
167 . dydxc1(nel),dydxc2(nel),yc1(nel),yc2(nel),
168 . dydxd1(nel),dydxd2(nel),yd1(nel),yd2(nel),
169 . depse(nel),epse(nel),depss(nel),epss(nel),
170 . dsigxx(nel),dsigyy(nel),dsigxy(nel),
171 . crit(nel),sigfd(nel),sigfc(nel),dsigv(nel),
172 . sds(nel),dsig2(nel),sv2(nel),dsvm(nel),
173 . epsc1(nel),epsc2(nel),epsd1(nel),epsd2(nel),
174 . dydxc(nel),yc(nel),yfac1(nel),yfac2(nel)
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 DO i=1,nel
192 nfunc = ipm(10,mat(i))
193 DO j=1,nfunc
194 ifunc(i,j)=ipm(10+j,mat(i))
195 ENDDO
196 ENDDO
197 iadbuf = ipm(7,mat(1)) - 1
198 DO i=1,nel
199 e(i) = uparam(iadbuf+2)
200 g(i) = uparam(iadbuf+3)
201 nu(i) = uparam(iadbuf+4)
202 a1(i) = uparam(iadbuf+5)
203 a2(i) = uparam(iadbuf+6)
204 g3(i) = uparam(iadbuf+8)
205 nnu1(i)= nu(i) / (one - nu(i))
206 nu3(i) = one - nnu1(i)
207 epsmax(i)= uparam(iadbuf+11)
208 ENDDO
209 nrate = nint(uparam(iadbuf+1))
210 n0 = 5
211 n1 = nrate + n0
212 n2 = nrate + n1
213 n3 = nrate + n2
214
215 IF (time == zero)THEN
216 IF (isigi == 0) THEN
217 DO i=1,nel
218 DO j=1,10
219 uvar(i,j)=zero
220 ENDDO
221 uvar(i,3) = sqrt(sigoxx(i)*sigoxx(i) + sigoyy(i)*sigoyy(i)
222 . -sigoxx(i)*sigoyy(i) + sigoxy(i)*sigoxy(i)*three)
223 ENDDO
224 ENDIF
225
226 DO i=1,nel
227 DO i1=1,nrate
228 func = ifunc(i,i1)
229 fund = ifunc(i,i1+nrate)
230 np1 = (npf(func+1)-npf(func))/2
231 np2 = (npf(fund+1)-npf(fund))/2
232
233 DO j=3,np1
234 j1=2*(j-2)
235 s1=tf(npf(func)+j1)
236 s2=tf(npf(func)+j1+2)
237 t1=tf(npf(func)+j1+1)
238 t2=tf(npf(func)+j1+3)
239 DO k=3,np2
240 k1=2*(k-2)
241 x1=tf(npf(fund)+k1)
242 x2=tf(npf(fund)+k1+2)
243 y1=tf(npf(fund)+k1+1)
244 y2=tf(npf(fund)+k1+3)
245 IF (y2>=t1 .AND. y1<=t2 .AND. x2>=s1 .AND. x1<=s2) THEN
246 dydx = (y2-y1) / (x2-x1)
247 dtds = (t2-t1) / (s2-s1)
248 IF (dydx > dtds) THEN
249 sx = (t1-y1-dtds*s1+dydx*x1) / (dydx-dtds)
250 ty = t1 + dtds*(sx - s1)
251 IF (ty>=y1 .AND. ty<=y2 .AND. sx>=x1 .AND. sx<=x2)THEN
252 iadbuf = ipm(7,mat(i)) + 13
253 uparam(iadbuf+i1+nrate*2) = ty
254 GOTO 150
255 ENDIF
256 ENDIF
257 ENDIF
258 ENDDO
259 ENDDO
260 150 CONTINUE
261
262 ENDDO
263 ENDDO
264 ENDIF
265
266
267
268 DO i=1,nel
269 epspl = half*(abs(epspxx(i)+epspyy(i))
270 . + sqrt((epspxx(i)-epspyy(i))**2 + epspxy(i)**2))
271 epsp(i) = asrate*epspl + (one-asrate)*epsp(i)
272 ENDDO
273
274
275
276 DO i=1,nel
277 epss(i) = uvar(i,1)
278 epse(i) = uvar(i,2)
279 ENDDO
280
281
282
283 DO i=1,nel
284 a11 = e(i) * a1(i)
285 a22 = e(i) * a2(i)
286
287 dsigxx(i) = a11*depsxx(i)+a22*depsyy(i)
288 dsigyy(i) = a22*depsxx(i)+a11*depsyy(i)
289 dsigxy(i) = g(i)*depsxy(i)
290
291 signxx(i) = sigoxx(i)+dsigxx(i)
292 signyy(i) = sigoyy(i)+dsigyy(i)
293 signxy(i) = sigoxy(i)+dsigxy(i)
294 signyz(i) = sigoyz(i) + gs(i)*depsyz(i)
295 signzx(i) = sigozx(i) + gs(i)*depszx(i)
296
297 crit(i) = sigoxx(i)*depsxx(i) + sigoyy(i)*depsyy(i)
298 . + half*(sigoxy(i)*depsxy(i))
299 dsvm(i) = dsigxx(i)*dsigxx(i) + dsigyy(i)*dsigyy(i)
300 . -dsigxx(i)*dsigyy(i) + dsigxy(i)*dsigxy(i)*three
301 sigo(i) = uvar(i,3)
302 sv2(i) = signxx(i)*signxx(i) + signyy(i)*signyy(i)
303 . -signxx(i)*signyy(i) + signxy(i)*signxy(i)*three
304 svm(i) = sqrt(sv2(i))
305 dsig2(i) = dsigxx(i)*dsigxx(i) + dsigyy(i)*dsigyy(i)
306 . -dsigxx(i)*dsigyy(i) + dsigxy(i)*dsigxy(i)*three
307 sds(i) = (sigoxx(i)*dsigxx(i) + sigoyy(i)*dsigyy(i)
308 . +sigoxy(i)*dsigxy
309 . -sigoxx(i)*dsigyy(i) - sigoyy(i
310
311
312
313
314 soundsp(i) = sqrt(e(i)/rho0(i))
315 viscmax(i) = zero
316 etse(i) = one
317 ENDDO
318
319
320
321 iadbuf = ipm(7,mat(1))-1+14
322 DO i=1,nel
323 jj(i) = 1
324 DO j=2,nrate-1
325 IF (epsp(i) > uparam(iadbuf+j)) jj(i) = j
326 ENDDO
327
328 i1 = iadbuf + jj(i)
329 j1 = jj(i)
330 rate1 = uparam(i1)
331 yfac1(i) = uparam(i1+nrate)
332 sigy1 = uparam(i1+nrate*2)*yfac1(i)
333
334 IF (nrate > 1) THEN
335 i2 = i1 + 1
336 j2 = j1 + 1
337
338 rate2 = uparam(i2)
339 yfac2(i) = uparam(i2+nrate)
340 fac(i) = (epsp(i) - rate1) / (rate2 - rate1)
341 sigy2 = uparam(i2+nrate*2)*yfac2(i)
342 sigyld(i) = sigy1 + fac(i)*(sigy2-sigy1)
343
344 iposc1(i) = nint(uvar(i,n0+j1))
345 iposc2(i) = nint(uvar(i,n0+j2))
346 epsc1(i) = uvar(i,n1+j1)
347 epsc2(i) = uvar(i,n1+j2)
348 iadc1(i) = npf(ipm(10+j1,mat(i)))/2 + 1
349 iadc2(i) = npf(ipm(10+j2,mat(i)))/2 + 1
350 ilenc1(i) = npf(ipm(10+j1,mat(i))+1)/2-iadc1(i)-iposc1(i)
351 ilenc2(i) = npf(ipm(10+j2,mat(i))+1)/2-iadc2(i)-iposc2(i)
352
353 iposd1(i) = nint(uvar(i,n2+j1))
354 iposd2(i) = nint(uvar(i,n2+j2))
355 epsd1(i) = uvar(i,n3+j1)
356 epsd2(i) = uvar(i,n3+j2)
357 iadd1(i) = npf(ipm(10+nrate+j1,mat(i)))/2 + 1
358 iadd2(i) = npf(ipm(10+nrate+j2,mat(i)))/2 + 1
359 ilend1(i) = npf(ipm(10+nrate+j1,mat(i))+1)/2
360 . - iadd1(i) - iposd1(i)
361 ilend2(i) = npf(ipm(10+nrate+j2,mat(i))+1)/2
362 . - iadd2(i) - iposd2(i)
363 ELSE
364 sigyld(i) = sigy1
365 iposc1(i) = nint(uvar(i,n0+j1))
366 iposd1(i) = nint(uvar(i,n2+j1))
367 epsc1(i) = uvar(i,n1+j1)
368 epsd1(i) = uvar(i,n3+j1)
369
370 iadc1(i) = npf(ipm(10+j1,mat(i)))/2 + 1
371 iadd1(i) = npf(ipm(10+nrate+j1,mat(i)))/2 + 1
372 ilenc1(i) = npf(ipm(10+j1,mat(i))+1)/2-iadc1(i)-iposc1(i
373 ilend1(i) = npf(ipm(10+nrate+j1,mat(i))+1)/2
374 . - iadd1(i) - iposd1(i)
375 ENDIF
376 ENDDO
377
378 IF (nrate > 1) THEN
379
380 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
381 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
382 CALL interstar(tf ,iadc2,iposc2,ilenc2,nel ,
383 . epss ,epsc2,dydxc2,e ,yc2 ,yfac2 )
384
385 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
386 . epse ,epsd1,dydxd1,e ,yd1 ,yfac1 )
387 CALL interstar(tf ,iadd2,iposd2,ilend2,nel ,
388 . epse ,epsd2,dydxd2,e ,yd2 ,yfac2 )
389 ELSE
390 CALL interstar(tf ,iadc1,iposc1,ilenc1,nel ,
391 . epss ,epsc1,dydxc1,e ,yc1 ,yfac1 )
392 CALL interstar(tf ,iadd1,iposd1,ilend1,nel ,
393 . epse ,epsd1,dydxd1,e ,yd1 ,yfac1 )
394 ENDIF
395
396 IF (nrate > 1) THEN
397 DO i=1,nel
398 j1 = jj(i)
399 j2 = j1 + 1
400 uvar(i,n0+j1) = iposc1(i)
401 uvar(i,n0+j2) = iposc2(i)
402 uvar(i,n1+j1) = epsc1(i)
403 uvar(i,n1+j2) = epsc2(i)
404 uvar(i,n2+j1) = iposd1(i)
405 uvar(i,n2+j2) = iposd2(i)
406 uvar(i,n3+j1) = epsd1(i)
407 uvar(i,n3+j2) = epsd2(i)
408
409 yc1(i) = yc1(i)
410 yd1(i) = yd1(i)
411 yc2(i) = yc2(i)
412 yd2(i) = yd2(i)
413 dydxc1(i)= dydxc1(i)
414 dydxd1(i)= dydxd1(i)
415 dydxc2(i)= dydxc2(i)
416 dydxd2(i)= dydxd2(i)
417
418 hc(i) = dydxc1(i) + (dydxc2(i)-dydxc1(i))*fac(i)
419 hd(i) = dydxd1(i) + (dydxd2(i)-dydxd1(i))*fac(i)
420 sigfc(i) = yc1(i) + (yc2(i)-yc1(i))*fac(i)
421 sigfd(i) = yd1(i) + (yd2(i)-yd1(i))*fac(i)
422
423 ENDDO
424 ELSE
425 DO i=1,nel
426 j1 = jj(i)
427 uvar(i,n0+j1) = iposc1(i)
428 uvar(i,n1+j1) = epsc1(i)
429 uvar(i,n2+j1) = iposd1(i)
430 uvar(i,n3+j1) = epsd1(i)
431
432 sigfc(i) = yc1(i)
433 sigfd(i) = yd1(i)
434 hc(i) = dydxc1(i)
435 hd(i) = dydxd1(i)
436 ENDDO
437 ENDIF
438
439
440
441
442 DO i=1,nel
443 depss(i) = zero
444 depse(i) = zero
445 deplzz(i) = zero
446
447 IF (svm(i) > sigfc(i)) THEN
448
449 depss(i) = (svm(i) - sigfc(i)) / (e(i) + hc(i))
450 sfc = sigfc(i) + hc(i)*depss(i)
451 sfd = sigfd(i) + hd(i)*depss(i)
452
453 a = dsig2(i)
454 b = sds(i)
455 c = sigo(i)*sigo(i) - sfc*sfc
458 signxx(i) = sigoxx(i) + dsigxx(i)*
alpha
459 signyy(i) = sigoyy(i) + dsigyy(i)*
alpha
460 signxy(i) = sigoxy(i) + dsigxy(i)*
alpha
461
462 IF (sfd > sfc) THEN
463 depss(i) = (svm(i) - sigfc(i)) / (g3(i) + hc(i))
464 sigfc(i) = sigfc(i) + hc(i)*depss(i)
465 sigfd(i) = sigfd(i) + hd(i)*depss(i)
466
467 a = dsig2(i)
468 b = sds(i)
469 c = sigo(i)*sigo(i) - sigfc(i)*sigfc(i)
472 signxx(i) = sigoxx(i) + dsigxx(i)*
alpha
473 signyy(i) = sigoyy(i) + dsigyy(i)*
alpha
474 signxy(i) = sigoxy(i) + dsigxy(i)*
alpha
475
476 dpla_i(i) = depss(i)
477 pla(i) = pla(i) + off(i)*dpla_i(i)
478 deplzz(i) = dpla_i(i)*(signxx(i)+signyy(i))*half*nu3(i)
479 . /
max(em20,sigfc(i))
480 etse(i)= hc(i)/(hc(i)+e(i))
481 ELSE
482 sigfc(i) = sfc
483 sigfd(i) = sfd
484 dpla_i(i)= zero
485 ENDIF
486
487 ELSEIF (svm(i) < sigfd(i)) THEN
488
489 depss(i) = (svm(i) - sigfd(i)) / (e(i) + hd(i))
490 sigfd(i) = sigfd(i) + hd(i)*depss(i)
491 a = dsig2(i)
492 b = sds(i)
493 c = sigo(i)*sigo(i) - sigfd(i)*sigfd(i)
498 signxx(i) = sigoxx(i) + dsigxx(i)*
alpha
499 signyy(i) = sigoyy(i) + dsigyy(i)*
alpha
500 signxy(i) = sigoxy(i) + dsigxy(i)*
alpha
501 dpla_i(i) = zero
502
503 ELSE
504
505 dpla_i(i) = zero
506 ENDIF
507 ENDDO
508
509 DO i=1,nel
510 dezz = (depsxx(i)+depsyy(i))*nnu1(i) + deplzz(i)
511 thk(i)= thk(i) - dezz*thkly(i)*off(i)
512
513 svm(i) = sqrt(signxx(i)*signxx(i) + signyy(i)*signyy(i)
514 . -signxx(i)*signyy(i) + three*signxy(i)*signxy(i))
515 epss(i) = epss(i) + depss(i)
516 epse(i) = epss(i) - pla(i)
517
518 uvar(i,1) = epss(i)
519 uvar(i,2) = epse(i)
520 uvar(i,3) = svm(i)
521 uvar(i,4) = pla(i)
522 uvar(i,5) = epsp(i)
523 IF (pla(i) > epsmax(i) .and. off(i) == one) off(i)=four_over_5
524
525
526
527 ENDDO
528
529 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine eqsolv_2(a, b, c, x1, x2)
subroutine interstar(tf, iad, ipos, ilen, nel, x, epss_i, dydx, e, y, yfac)