42
43
44
45#include "implicit_f.inc"
46#include "comlock.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
103
104
105
106
107
108
109#include "param_c.inc"
110
111 INTEGER NEL, NUPARAM, NUVAR,IPT,
112 . NGL(NEL),MAT(NEL),IPLA,IPM(NPROPMI,*)
114 . time,timestep,uparam(*),
115 . rho(nel),rho0(nel),volume(nel),eint(nel),
116 . epspxx(nel),epspyy(nel),epspzz(nel),
117 . epspxy(nel),epspyz(nel),epspzx(nel),
118 . depsxx(nel),depsyy(nel),depszz(nel),
119 . depsxy(nel),depsyz(nel),depszx(nel),
120 . epsxx(nel) ,epsyy(nel) ,epszz(nel) ,
121 . epsxy(nel) ,epsyz(nel) ,epszx(nel) ,
122 . sig0xx(nel),sig0yy(nel),sig0zz(nel),
123 . sig0xy(nel),sig0yz(nel),sig0zx(nel),
124 . pm(npropm,*),epsp(nel),fssp(nel)
125
126
127
129 . signxx(nel),signyy(nel),signzz(nel),
130 . signxy(nel),signyz(nel),signzx(nel),
131 . sigvxx
132 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
133 . soundsp(nel),viscmax(nel)
134
135
136
138 . uvar(nel,nuvar), off(nel), pla(nel)
139
140
141
142 INTEGER NPF(*), MFUNC, KFUNC(MFUNC)
144 . tf(*),finter
145 EXTERNAL finter
146
147
148
149
150
151
152
153
154
155
156
157 INTEGER I,J,J1,J2,I1,I2,IADBUF,NC,NFUNC,ILOAD(MVSIZ),
158 . IFUNC(MVSIZ,100),NLOAD,NUNLOAD,
159 . IE_CST(MVSIZ),ILOAD0,IDAMAGE,NPAR_FOAM,IFUNCR,
160 . IFUNCK
162 . r,fac,yp1,yp2,yn1,yn2,coeff,rmin,rmax,
163 . e,e1,e2,e3,e4,e5,e6,df,bb,cc,delta,
alpha,x1,x2,svm2,
164 . svm,rho_air,e_air,v0,dvol,mu ,gama,rho_air0,p0,
165 . e0,g(mvsiz),nu,aa1(mvsiz),aa2(mvsiz),pfoam,
166 . fail(mvsiz),
167 . epst(mvsiz),aa,yldmin(mvsiz),yldmax(mvsiz),
168 . yld(mvsiz),rate(mvsiz,2),ef(mvsiz),
169 . yfac(mvsiz,2),eps0(mvsiz),epss(mvsiz),
170 . epssmax,df1,df2,dav,emax,pext,p_air(mvsiz),
171 . eps_max,dsig ,yldelas(mvsiz),p,svm1(mvsiz),expo,hys,
172 . de,pgaz,vnew,el(mvsiz),den,pgaz0,e_air0,espe,pair0,
173 . var,kk,alpha0,et
174
175
176
177
178 DO i= 1, nel
179 nfunc = ipm(10,mat(i))
180 DO j=1,nfunc
181 ifunc(i,j)=ipm(10+j,mat(i))
182 ENDDO
183 ENDDO
184
185 e0 = uparam(2)
186 aa = uparam(3)
187 epssmax = uparam(4)
188
189 nu = uparam(6)
190 nload = uparam(7)
191 nunload = uparam(8)
192 idamage = uparam(9 + 2*nfunc )
193 expo = uparam(10 + 2*nfunc )
194 hys = uparam(11 + 2*nfunc)
195 emax = uparam(12 + 2*nfunc )
196
197 rho_air0 = uparam(14 + 2*nfunc)
198 p0 = uparam(15 + 2*nfunc)
199 gama = uparam(16 + 2*nfunc)
200 alpha0 = uparam(17 + 2*nfunc)
201 pext = uparam(18 + 2*nfunc)
202
203 pfoam = uparam(19 + 2*nfunc)
204 kk = uparam(21 + 2*nfunc)
205
206
207
208
209 DO i=1,nel
210
211 pair0 = uvar(i,19)
212
214 sig0xx(i) = sig0xx(i) +
alpha * pair0
215 sig0yy(i) = sig0yy(i) +
alpha * pair0
216 sig0zz(i) = sig0zz(i) +
alpha * pair0
217
218 rho_air = uvar(i,1)
219 e_air0 = uvar(i,2)
220 vnew = uvar(i,3)
221 dvol = uvar(i,4)
222 mu = rho_air/rho_air0
223 v0 = vnew*mu
224
225 espe = e_air0/
max(em15,v0)
226 pgaz0= (gama - one)*mu*espe
227 e_air = e_air0 - half*pgaz0*dvol
228 bb = one + half*(gama - one)*mu*dvol/
max(em15,v0)
229 e_air = e_air/
max(em20,bb)
230 espe = e_air/
max(em15,v0)
231 pgaz =(gama - one)*mu*espe
232
233 p_air(i) = pgaz - pext
234 p_air(i)=
max(p_air(i),-pext)
235
236
237 uvar(i,5) = -p_air(i)
238 uvar(i,6) = -p_air(i)
239 uvar(i,7) = -p_air(i)
240 uvar(i,8) = zero
241 uvar(i,9) = zero
242 uvar(i,10)= zero
243 uvar(i,20)= pgaz
244 uvar(i,2) = e_air/
max(em15,vnew)
245 ef(i) = p0*gama*mu**(gama - 1)
246 fssp(i) = sqrt(ef(i)/rho_air0)
247
248
249
250 ifuncr = ifunc(i,nfunc )
251 var = rho0(i)/rho(i)
252 IF( ifuncr > 0 )
253 . uvar(i,21) = alpha0*finter(ifuncr,var,npf,tf,df)
254
255 ifunck = ifunc(i,nfunc - 1)
256 IF( ifunck > 0 )
257 . uvar(i,22) = kk*finter(ifunck,var,npf,tf,df)
258
259 uvar(i,23)= var
260 ENDDO
261
262 DO i=1,nel
263
264
265
266 epst(i) = epsxx(i)**2+epsyy(i)**2 + epszz(i)**2 +
267 . half*(epsxy(i)**2+epsyz(i)**2+epszx(i)**2)
268 epst(i) = sqrt(epst(i))
269
270
271
272 eps0(i) = uvar(i,11)
273 ENDDO
274
275
276
277
278 DO i=1,nel
279
280 rate(i,1)=uparam(9)
281 yfac(i,1)=uparam(9 + nfunc )
282 IF(epst(i) >= epssmax) THEN
283 yldelas(i)=yfac(i,1)*finter(ifunc(i,1),epssmax,npf,tf,df)
284 yldelas(i)=emax*(epst(i) - epssmax) + yldelas(i)
285 ELSE
286 yldelas(i) = yfac(i,1)*finter(ifunc(i,1),epst(i),npf,tf,df)
287 ENDIF
288
289 nc = nload
290 j1 = 1
291 DO j=2,nc-1
292 IF(abs(epsp(i)) >= abs(uparam(8 + j )))THEN
293 j1 = j
294 ENDIF
295 ENDDO
296 rate(i,1)=uparam( 8 + j1)
297 yfac(i,1)=uparam( 8 + nfunc + j1)
298 IF(epst(i) >= epssmax) THEN
299 IF(nc > 1)THEN
300 j2 = j1+1
301 rate(i,2)=uparam(8 + j2 )
302 yfac(i,2)=uparam(8 + nfunc + j2 )
303
304 yp1 = yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df1)
305 yp2 = yfac(i,2)*finter(ifunc(i,j2),epssmax,npf,tf,df2)
306
307 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
308 yldmax(i) =
max(yp1 + fac*(yp2 - yp1), em20)
309 yldmax(i) = emax*(epst(i) - epssmax) + yldmax(i)
310
311 ELSE
312 yldmax(i) =
313 . yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df)
314 yldmax(i) = emax*(epst(i) - epssmax) + yldmax(i)
315 ENDIF
316 ELSE
317 IF(nc > 1)THEN
318 j2 = j1+1
319 rate(i,2)=uparam( 8 + j2 )
320 yfac(i,2)=uparam( 8 + nfunc + j2 )
321
322 yp1 = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df1)
323 yp2 = yfac(i,2)*finter(ifunc(i,j2),epst(i),npf,tf,df2)
324
325 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
326 yldmax(i) =
max(yp1 + fac*(yp2 - yp1), em20)
327 ELSE
328 yldmax(i) = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df)
329 ENDIF
330 ENDIF
331
332 nc = nunload
333 j1 = 1 + nload
334 yldmin(i) = zero
335 IF(nc > 0 ) THEN
336 DO j=2,nc-1
337 IF(abs(epsp(i)) >=
338 . abs(uparam(nload + 8 + j )))THEN
339 j1 = nload + j
340 ENDIF
341 ENDDO
342
343 rate(i,1)=uparam(8 + j1)
344 yfac(i,1)=uparam(8 + nfunc + j1)
345
346 IF(epst(i) >= epssmax) THEN
347 IF(nc > 1)THEN
348 j2 = j1+1
349 rate(i,2)=uparam(8 + j2 )
350 yfac(i,2)=uparam(8 + nfunc + j2 )
351
352 yp1 =yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df1)
353 yp2 =yfac(i,2)*finter(ifunc(i,j2),epssmax,npf,tf,df2)
354
355 IF(yp2 < yp1 ) THEN
356 fac = (rate(i,2) - epsp(i))/(rate(i,2) - rate(i,1))
357 yldmin(i) =
max(yp2 + fac*
358 ELSE
359 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
360 yldmin(i) =
max(yp1 + fac*(yp2 - yp1), em20)
361 ENDIF
362 yldmin(i) = emax*(epst(i) - epssmax) + yldmin(i)
363 ELSE
364 yldmin(i)=
365 . yfac(i,1)*finter(ifunc(i,j1),epssmax,npf,tf,df)
366 yldmin(i) = emax*(epst(i) - epssmax) + yldmin(i)
367 ENDIF
368 ELSE
369 IF(nc > 1)THEN
370 j2 = j1+1
371 rate(i,2)=uparam( 8 + j2 )
372 yfac(i,2)=uparam( 8 + nfunc + j2 )
373
374 yp1 = yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df1)
375 yp2 = yfac(i,2)*finter(ifunc(i,j2),epst(i),npf,tf,df2)
376
377 IF(yp2 < yp1 ) THEN
378 fac = (rate(i,2) - epsp(i))/(rate(i,2) - rate(i,1))
379 yldmin(i) =
max(yp2 + fac*(yp1-yp2), em20)
380 ELSE
381 fac = (epsp(i) - rate(i,1))/(rate(i,2) - rate(i,1))
382 yldmin(i) =
max(yp1 + fac*(yp2 - yp1), em20)
383 ENDIF
384 ELSE
385 yldmin(i) =
386 . yfac(i,1)*finter(ifunc(i,j1),epst(i),npf,tf,df)
387 ENDIF
388 ENDIF
389 ENDIF
390 ENDDO
391
392 DO i = 1,nel
393 ie_cst(i)= 0
394 delta = epst(i) - uvar(i,13)
395 IF(delta >= zero)THEN
396 yld(i) = yldmax(i)
397 iload(i) = 1
398 ELSEIF(delta < zero)THEN
399 yld(i) = yldmin(i)
400 iload(i) = -1
401 IF(idamage /= 1 )yld(i) = yldmax(i)
402 ENDIF
403
404 e = uvar(i,12)
405 iload0 = int(uvar(i,14))
406 epss(i) = epst(i) - yld(i)/ e
407 epss(i) =
max(zero, epss(i))
408 de = aa*(epss(i) - uvar(i,11))
409 IF(iload(i) == 1) THEN
410 e = e +
max(de, zero)
411 IF(iload0 == -1) e= uvar(i,12)
412 uvar(i,11) =
max(uvar(i,11), epss(i))
413 ELSE
414 e = e +
min(de ,zero)
415 IF(iload0 =
416 uvar(i,11) =
min(epss(i),uvar(i,11))
417 ENDIF
420 uvar(i,12) = e
421
422 aa1(i) = e*(one-nu)/(one + nu)/(one - two*nu)
423 aa2(i) = aa1(i)*nu/(one - nu)
424 g(i) =half*e/(one + nu)
425
426 signxx(i)= aa1(i)*depsxx(i) + aa2(i)*(depsyy(i) + depszz(i))
427 signyy(i)= aa1(i)*depsyy(i) + aa2(i)*(depsxx(i) + depszz(i))
428 signzz(i)= aa1(i)*depszz(i) + aa2(i)*(depsxx(i) + depsyy(i))
429 signxy(i)= g(i) *depsxy(i)
430 signyz(i)= g(i) *depsyz(i)
431 signzx(i)= g(i) *depszx(i)
432 dsig = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
433 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
434 dsig =sqrt(dsig)
435
436 signxx(i)=sig0xx(i) + aa1(i)*depsxx(i)
437 . + aa2(i)*(depsyy(i) + depszz(i))
438 signyy(i)=sig0yy(i) + aa1(i)*depsyy(i)
439 . + aa2(i)*(depsxx(i) + depszz(i))
440 signzz(i)=sig0zz(i) + aa1(i)*depszz(i)
441 . + aa2(i)*(depsxx(i) + depsyy(i))
442 signxy(i)=sig0xy(i) + g(i) *depsxy(i)
443 signyz(i)=sig0yz(i) + g(i) *depsyz(i)
444 signzx(i)=sig0zx(i) + g(i) *depszx(i)
445
446
447 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
448 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
449 svm =sqrt(svm2)
450
451 et = aa1(i)
452 soundsp(i) = sqrt((et + ef(i))/rho0(i))
453 viscmax(i) = zero
454
455 IF(idamage == 1 ) THEN
456 IF(svm >= yldmax(i) )THEN
457 yld(i) = yldmax(i)
458
459
460 IF(delta < zero ) yld(i) = yldmin(i)
461 ELSEIF(svm <= yldmin(i)) THEN
462 yld(i) = yldmin(i)
463
464 ELSE
465 yld(i) = svm
466 ie_cst(i) = 1
467 IF(delta < zero .AND. dsig > yldmin(i) .AND. dsig > svm)THEN
468 yld(i) = yldmin(i)
469 ie_cst(i) = 0
470 ENDIF
471 ENDIF
472 ELSE
473 yld(i) = yldmax(i)
474 IF(delta > zero .AND. svm < yldmax(i))yld(i)=svm
475
476
477 uvar(i,17) = uvar(i,17) +
478 . half*(yld(i ) + uvar(i,15))*delta
479 uvar(i,17) =
max(zero, uvar(i,17))
480 uvar(i,18) =
max(uvar(i,18), uvar(i,17))
481 ENDIF
482
483 ENDDO
484
485
486
487 IF(idamage == 1 ) THEN
488 DO i=1,nel
489 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
490 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
491 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
492 signxy(i)= g(i) *epsxy(i)
493 signyz(i)= g(i) *epsyz(i)
494 signzx(i)= g(i) *epszx(i)
495
496 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
497 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
498 svm =sqrt(svm2)
499 r = yld(i)/
max(em20,svm)
500 signxx(i)=signxx(i)*r
501 signyy(i)=signyy(i)*r
502 signzz(i)=signzz(i)*r
503 signxy(i)=signxy(i)*r
504 signyz(i)=signyz(i)*r
505 signzx(i)=signzx(i)*r
506
507 IF(ie_cst(i) == 1) THEN
508 iload0 = int(uvar(i,14))
509 IF(iload0 /= iload(i))THEN
510 iload(i) = iload0
511 uvar(i,11) = eps0(i)
512 ENDIF
513 ENDIF
514 uvar(i,13) = epst(i)
515 uvar(i,14) = iload(i)
516 uvar(i,15) = yld(i)
517 uvar(i,16) = epsp(i)
518 ENDDO
519 ELSEIF(idamage == 2 ) THEN
520 DO i=1,nel
521
522 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
523 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
524 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
525 signxy(i)= g(i) *epsxy(i)
526 signyz(i)= g(i) *epsyz(i)
527 signzx(i)= g(i) *epszx(i)
528
529 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
530 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
531 svm =sqrt(svm2)
532 r = yld(i)/
max(em20,svm)
533 signxx(i)=signxx(i)*r
534 signyy(i)=signyy(i)*r
535 signzz(i)=signzz(i)*r
536 signxy(i)=signxy(i)*r
537 signyz(i)=signyz(i)*r
538 signzx(i)=signzx(i)*r
539
540 IF(iload(i) == -1) THEN
541 r = yldmin(i)/
max(em20,yldelas(i))
542 signxx(i)=signxx(i)*r
543 signyy(i)=signyy(i)*r
544 signzz(i)=signzz(i)*r
545 signxy(i)=signxy(i)*r
546 signyz(i)=signyz(i)*r
547 signzx(i)=signzx(i)*r
548 ENDIF
549
550 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
551 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
552 svm =sqrt(svm2)
553 uvar(i,13) = epst(i)
554 uvar(i,14) = iload(i)
555 uvar(i,15) = yld(i)
556 uvar(i,16) = epsp(i)
557 ENDDO
558 ELSEIF(idamage == 3) THEN
559 DO i=1,nel
560
561 signxx(i)= aa1(i)*epsxx(i) + aa2(i)*(epsyy(i) + epszz(i))
562 signyy(i)= aa1(i)*epsyy(i) + aa2(i)*(epsxx(i) + epszz(i))
563 signzz(i)= aa1(i)*epszz(i) + aa2(i)*(epsxx(i) + epsyy(i))
564 signxy(i)= g(i) *epsxy(i)
565 signyz(i)= g(i) *epsyz(i)
566 signzx(i)= g(i) *epszx(i)
567
568
569 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
570 . + two*(signxy(i)**2 + signzx(i)**2 + signyz(i)**2)
571 svm =sqrt(svm2)
572 r = (yld(i)/
max(em20,svm))
573 signxx(i)=signxx(i)*r
574 signyy(i)=signyy(i)*r
575 signzz(i)=signzz(i)*r
576 signxy(i)=signxy(i)*r
577 signyz(i)=signyz(i)*r
578 signzx(i)=signzx(i)*r
579
580 IF(iload(i) == -1) THEN
581 r = one - (uvar(i,17)/
max(em20,uvar(i,18)))**expo
582 r = one - (one - hys)*r
583 signxx(i)=signxx(i)*r
584 signyy(i)=signyy(i)*r
585 signzz(i)=signzz(i)*r
586 signxy(i)=signxy(i)*r
587 signyz(i)=signyz(i)*r
588 signzx(i)=signzx(i)*r
589 ENDIF
590
591 svm2 = (signxx(i)**2 + signyy(i)**2 + signzz(i)**2)
592 . + two*(signxy(i)**2 + signzx
593 svm =sqrt(svm2)
594 uvar(i,13) = epst(i)
595 uvar(i,14) = iload(i)
596 uvar(i,15) = yld(i)
597 uvar(i,16) = epsp(i)
598 ENDDO
599 ENDIF
600
601 IF(time == 0 .AND. pfoam /= zero)THEN
602 DO i=1,nel
603 signxx(i)= -pfoam
604 signyy(i)= -pfoam
605 signzz(i)= -pfoam
606 ENDDO
607 ELSE
608
609 IF(pfoam /= zero) THEN
610 DO i=1,nel
611 IF( epst(i) == zero ) THEN
612 signxx(i)= -pfoam
613 signyy(i)= -pfoam
614 signzz(i)= -pfoam
615 ENDIF
616 ENDDO
617 ENDIF
618 ENDIF
619
620 DO i=1,nel
622 signxx(i) = signxx(i
623 signyy(i) = signyy(i) -
alpha * p_air(i)
624 signzz(i) = signzz(i) -
alpha * p_air(i)
625 uvar(i,19) = p_air(i)
626 ENDDO
627
628 RETURN