50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "mvsiz_p.inc"
58#include "scr05_c.inc"
59#include "impl1_c.inc"
60
61
62
63 INTEGER NEL, NUPARAM, NUVAR,ISMSTR,IHET
64
66 . time , timestep , uparam(nuparam),
67 . rho(nel), rho0(nel), volume(nel), eint(nel),
68 . epspxx(nel), epspyy(nel), epspzz(nel),
69 . epspxy(nel), epspyz(nel), epspzx(nel),
70 . depsxx(nel), depsyy(nel), depszz(nel),
71 . depsxy(nel), depsyz(nel), depszx(nel),
72 . epsxx(nel), epsyy(nel), epszz(nel),
73 . epsxy(nel), epsyz(nel), epszx(nel),
74 . sigoxx(nel), sigoyy(nel), sigozz(nel),
75 . sigoxy(nel), sigoyz(nel), sigozx(nel),
76 . mfxx(nel) , mfxy(nel), mfxz(nel),
77 . mfyx(nel) , mfyy(nel), mfyz(nel),
78 . mfzx(nel) , mfzy(nel), mfzz(nel),offg(nel)
79
80
81
83 . signxx(nel), signyy(nel), signzz(nel),
84 . signxy(nel), signyz(nel), signzx(nel),
85 . sigvxx(nel), sigvyy(nel), sigvzz(nel),
86 . sigvxy(nel), sigvyz(nel), sigvzx(nel),
87 . soundsp(nel), viscmax(nel),
88 . den1,den2,den3,den1d,den2d,
89 . den3d,old1,old2,old3,old4,old5,old6,et(*),epsd(nel)
90
91
92
94 . uvar(nel,nuvar), off(nel)
95
96
97
98 INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
100 . finter,tf(*)
101 EXTERNAL finter
102
103
104
105 INTEGER MFUNC,IUNLOAD
106 INTEGER NUPARAM0
107 INTEGER I,J,L,N,M,MDIR,NROT
108 INTEGER K(MVSIZ,3),K1(MVSIZ,3),KF(MVSIZ,3)
109 INTEGER KF1(MVSIZ,3),KUN(MVSIZ,3)
110 INTEGER IFLAG,ITOTAL,IMSTA
111 INTEGER NFUNC1,NFUNCUL,NFUNCP,NPCURVE,KCOMPAIR
112 INTEGER ,KDECAY
113 LOGICAL TOTAL,UNCHANGED,JACOBI,UNLOADING
114 INTEGER IND1,LD
115 INTEGER II,JJ,KEN,IDEAC
116
118 . strain(mvsiz,3),rate(mvsiz,3),ratem(mvsiz),
119 . visc(mvsiz,3),
120
121 . dsigma(mvsiz,3),decay,tensioncut,
122 . amin,amax,tolerance,lamda,efinal,epsfin,efactor,
123 . a(3,3),sn(3,3),earj(3),
124 . psc(mvsiz,3),ear(mvsiz,3),
125 . ebr(mvsiz,3),ecr(mvsiz,3),
126 . psn(mvsiz,3),ean(mvsiz,3),
127 . ebn(mvsiz,3),ecn(mvsiz,3),
128 . el(mvsiz,3),
129 . dpra(3,3),dprao(3,3),dprad(3,3),
130 . av(mvsiz,6),earv(mvsiz,3),dirprv(mvsiz,3,3),
131 . sigprv(mvsiz,3),ei(mvsiz),
132 . e0,vt,vc,rv,kkk,ggg,
133 . beta,hyster,ratedamp,theta,
134 . p0,relaxp,maxpres,phi,gamma,
135 . pair(mvsiz),volumer(mvsiz),
136 . df,df1,df2,
137 . viscosity,
139 . psn1(mvsiz,3),psn2(mvsiz,3),
140 . edot0(mvsiz,3),edots(mvsiz,3),
141 . edotl(mvsiz,3),edotu(mvsiz,3),
142 . exponas,exponbs,funload,runload,
143 . e12(mvsiz),e23(mvsiz),e31(mvsiz),
144 . a11(mvsiz),a12(mvsiz),a13(mvsiz),a22(mvsiz),
145 . a23(mvsiz),a33(mvsiz),detc(mvsiz),
146 . v12(mvsiz),v23(mvsiz),v31(mvsiz),
147 . d11(mvsiz),d12(mvsiz),d44(mvsiz),
148 . emax(mvsiz),eyn(mvsiz,3),
149 . huge,small,tiny,shift,pscale
151 . ar1(6),dar1(6),ar2(6),dar2(6),dar3(3),earjd(3),
152 . tmp0,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,ad(3,3),
153 . aa(mvsiz),sigmax(mvsiz),esecant(mvsiz,3),
154 . tmp0p,tmp1p,tmp2p,tmp3p,tmp4p,tmp5p,tmp6p, dti,iemax,efac(mvsiz),
155 . ratio, pui,pui_1,pui_2,eymin,eymax,eyav
156
157 huge = ep30
158 small= em3
159 tiny = em30
160
161
162
163 nuparam0= uparam(1)
164
165 e0 = uparam(2)
166 vt = uparam(3)
167 vc = uparam(4)
168 rv = uparam(5)
169 iflag = uparam(6)
170 itotal = uparam(7)
171
172 beta = uparam(8)
173 hyster = uparam(9)
174 ratedamp = uparam(10)
175 krecover = uparam(11)
176 kdecay = uparam(12)
177 theta = uparam(13)
178
179
180 kcompair = uparam(14)
181 p0 = uparam(15)
182 gamma = uparam(16)
183 relaxp = uparam(17)
184 maxpres = uparam(18)
185 phi = uparam(19)
186
187 iunload = uparam(20)
188 funload = uparam(21)
189 runload = uparam(22)
190 exponas = uparam(23)
191 exponbs = uparam(24)
192
193 mfunc = uparam(25)
194 imsta = uparam(26)
195 ideac=0
196 IF (imsta>=10) THEN
197 imsta=imsta-10
198 ideac=1
199 END IF
200 tensioncut= uparam(27)
201
202 efinal = uparam(28)
203 epsfin = uparam(29)
204 lamda = uparam(30)
205 viscosity = uparam(31)
206 tolerance = uparam(32)
207 pscale = uparam(33)
208 nfunc1=(nfunc-2)/2
209
210 nfuncul=nfunc-1
211
212 nfuncp=nfunc
213
214
215 DO i=1,nfunc1
216 edot(i) =uparam(nuparam-nfunc1+i)
217 alpha(i)=uparam(nuparam-nfunc1*2+i)
218 ENDDO
219
220
221 total=.true.
222
223
224
225
226 IF(itotal==2.OR.itotal==3) total=.false.
227 IF (ismstr>=10.AND.ismstr>=12) total=.true.
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261 DO i=1,nel
262 ei(i)=e0
263 DO j=1,3
264 visc(i,j)=zero
265 ENDDO
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296 ENDDO
297
298 IF(iflag==2)THEN
299 jacobi=.true.
300 iflag=0
301 ELSE
302 jacobi=.false.
303 ENDIF
304 IF (krecover==2) THEN
305 IF (time==zero) THEN
306 efac(1:nel) =zero
307 uvar(1:nel,32)=em20
308 ELSE
309 DO i=1,nel
310 uvar(i,32)=
max(uvar(i,32),eint(i))
311
312
313
314
315
316 IF(eint(i)/=uvar(i,32)) THEN
317 IF( (eint(i)/uvar(i,32))>zero ) THEN
318 pui = exp( beta*log( eint(i)/uvar(i,32) ) )
319 ELSE
320 pui = zero
321 ENDIF
322 ELSE
323 pui = one
324 ENDIF
325 efac(i) =(one-hyster)*( one- pui )
326 END DO
327 END IF
328 END IF
329
330
331
332
333
334 IF(iflag==0)THEN
335
336 mdir=3
337 DO i=1,nel
338 IF(total) THEN
339 av(i,1)=epsxx(i)
340 av(i,2)=epsyy(i)
341 av(i,3)=epszz(i)
342 av(i,4)=epsxy(i)*half
343 av(i,5)=epsyz(i)*half
344 av(i,6)=epszx(i)*half
345 ELSE
346 av(i,1)=depsxx(i)
347 av(i,2)=depsyy(i)
348 av(i,3)=depszz(i)
349 av(i,4)=depsxy(i)*half
350 av(i,5)=depsyz(i)*half
351 av(i,6)=depszx(i)*half
352 ENDIF
353 ENDDO
354 IF(jacobi) THEN
355 DO i=1,nel
356 a(1,1)=av(i,1)
357 a(2,2)=av(i,2)
358 a(3,3)=av(i,3)
359 a(2,1)=av(i,4)
360 a(3,2)=av(i,5)
361 a(3,1)=av(i,6)
363 earv(i,1)=earj(1)
364 earv(i,2)=earj(2)
365 earv(i,3)=earj(3)
366 DO n=1,3
367 DO j=1,3
368 dirprv(i,n,j)=dpra(n,j)
369 ENDDO
370 ENDDO
371 ENDDO
372 ELSE
373
374
375 IF (iresp==1) THEN
377 ELSE
379 ENDIF
380 ENDIF
381
382 DO i=1,nel
383 m=0
384 DO n=1,3
385 DO l=1,3
386 m=m+1
387 dprao(l,n)=uvar(i,16+m)
388 ENDDO
389 ENDDO
390 m=0
391 DO n=1,3
392 DO j=1,3
393 m=m+1
394 dpra(n,j)=dirprv(i,n,j)
395 ENDDO
396 ENDDO
397
398
399
400
401 CALL checkaxes(dprao,dpra,amin,amax,unchanged,tolerance)
402 IF(.NOT.unchanged) THEN
403 DO m=1,4
404 DO n=1,3
405 DO l=1,3
406 sn(n,l)=zero
407 IF(n==l) sn(n,l)= uvar(i,n+3*(m-1))
408 ENDDO
409 ENDDO
410
411 ii = 1
412 jj = 1
413 ken = 1
414 CALL dreh(sn,dprao,ii,jj,ken)
415
416
417 ii = 1
418 jj = 1
419 ken = 0
420 CALL dreh(sn,dpra ,ii,jj,ken)
421
422 DO n=1,3
423 uvar(i,n+3*(m-1)) = sn(n,n)
424 ENDDO
425 ENDDO
426
427 IF (beta>tiny.AND.krecover/=2) THEN
428 DO m=1,2
429 DO n=1,3
430 DO l=1,3
431 sn(n,l)=zero
432 IF(n==l) sn(n,l)= uvar(i,n+3*(m-1)+25)
433 ENDDO
434 ENDDO
435 ii = 1
436 jj = 1
437 ken = 1
438 CALL dreh(sn,dprao ,ii,jj,ken)
439
440 ii = 1
441 jj = 1
442 ken = 0
443 CALL dreh(sn,dpra ,ii,jj,ken)
444
445 DO n=1,3
446 uvar(i,n+3*(m-1)+25) = sn(n,n)
447 ENDDO
448 ENDDO
449 ENDIF
450 uvar(i,17)=dpra(1,1)
451 uvar(i,18)=dpra(2,1)
452 uvar(i,19)=dpra(3,1)
453 uvar(i,20)=dpra(1,2)
454 uvar(i,21)=dpra(2,2)
455 uvar(i,22)=dpra(3,2)
456 uvar(i,23)=dpra(1,3)
457 uvar(i,24)=dpra(2,3)
458 uvar(i,25)=dpra(3,3)
459 ENDIF
460
461 IF(total) THEN
462 ear(i,1)=earv(i,1)
463 ear(i,2)=earv(i,2)
464 ear(i,3)=earv(i,3)
465 ELSE
466 ecr(i,1)=earv(i,1)
467 ecr(i,2)=earv(i,2)
468 ecr(i,3)=earv(i,3)
469 ENDIF
470 ENDDO
471 ELSE
472
473
474
475 mdir=1
476 DO i=1,nel
477 IF(total) THEN
478 ear(i,1)= sign(one,epsxx(i)+epsyy(i)+epszz(i))*sqrt(
479 & (epsxx(i)-epsyy(i))**2+
480 & (epsyy(i)-epszz(i))**2+
481 & (epszz(i)-epsxx(i))**2+
482 & two*(epsxy(i)**2+epsyz(i)**2+epszx(i)**2))/sqrt(two)
483 ELSE
484 ecr(i,1)= sign(one,depsxx(i)+depsyy(i)+depszz(i))*sqrt(
485 & (depsxx(i)-depsyy(i))**2+
486 & (depsyy(i)-depszz(i))**2+
487 & (depszz(i)-depsxx(i))**2+
488 & ((depsxy(i))**2+(depsyz(i))**2+(depszx(i))**2))
489 & /sqrt(two)
490 ENDIF
491 ENDDO
492
493 ENDIF
494
495 IF(ismstr==10.OR.ismstr==12)THEN
496 DO i=1,nel
497 IF(off(i)==zero )THEN
498 ear(i,1)=zero
499 ear(i,2)=zero
500 ear(i,3)=zero
501 END IF
502 END DO
503 END IF
504
505 IF(timestep<=zero) THEN
506 dti=zero
507 ELSE
508 dti=one/timestep
509 ENDIF
510
511 DO j=1,mdir
512 DO i=1,nel
513 IF( total) THEN
514 IF ((ismstr==10.OR.ismstr==12).AND.ideac==0.AND.offg(i) <=one) THEN
515 ecr(i,j)=sqrt(ear(i,j)+one)-uvar(i,j)
516 ELSE
517 ecr(i,j)=ear(i,j)-uvar(i,j)
518 END IF
519 ELSE
520 ear(i,j)=ecr(i,j)+uvar(i,j)
521 END IF
522 ebr(i,j)=ecr(i,j)*dti
523 ENDDO
524
525 DO i=1,nel
526
527
528 IF(ismstr==0.OR.ismstr==2.OR.ismstr==4) THEN
529 el(i,j)=exp(ear(i,j))
530
531
532 ebn(i,j)=ebr(i,j)*el(i,j)
533 ecn(i,j)=el(i,j)*(one-exp(-ecr(i,j)))
534 ELSEIF(ismstr==10.OR.ismstr==12) THEN
535 IF (offg(i) <=one) THEN
536 el(i,j)=sqrt(ear(i,j)+one)
537 ELSE
538 el(i,j)=ear(i,j)+one
539 END IF
540 ebn(i,j)=ebr(i,j)
541 ecn(i,j)=ecr(i,j)
542 ELSE
543 el(i,j)=ear(i,j)+one
544 ebn(i,j)=ebr(i,j)
545 ecn(i,j)=ecr(i,j)
546 ENDIF
547
548 ean(i,j)=el(i,j)-one
549
550 ebn(i,j)=uvar(i,j+6)+(ebn(i,j)-uvar(i,j+6))*ratedamp
551 ENDDO
552 ENDDO
553
554
555
556
557 DO i=1,nel
558 pair(i)=zero
559 volumer(i)=el(i,1)*el(i,2)*el(i,3)
560 ENDDO
561
562
563 DO i=1,nel
564 IF (kcompair==1.AND.volumer(i)<one) THEN
565 npcurve=ifunc(nfuncp)
566 IF (volumer(i)-phi>small) THEN
567 IF(npcurve/=0) THEN
568 pair(i)=-finter(npcurve,volumer(i),npf,tf,df)
569 pair(i)=pair(i)*pscale
570 ELSE
571 pair(i)=p0*(volumer(i)-one)/(volumer(i)-phi)
572 ENDIF
573 ELSE
574 pair(i)=uvar(i,16)
575 ENDIF
576
577 pair(i)=exp(-relaxp*time)*
max(pair(i),-maxpres)
578 uvar(i,16)=pair(i)
579 ELSEIF (kcompair==2.AND.volumer(i)<one) THEN
580 npcurve=ifunc(nfuncp)
581 pair(i)=-finter(npcurve,volumer(i),npf,tf,df)
582 ENDIF
583 ENDDO
584
585
586
587
588
589
590
591
592 DO j=1,mdir
593 DO i=1,nel
594 psn(i,j)=zero
595
596 strain(i,j)=-ean(i,j)
597 rate(i,j)=abs(ebn(i,j))
598 shift=zero
599 unloading=.false.
600 IF((ean(i,j)<zero.AND.ebn(i,j)>zero).OR.
601 & (ean(i,j)>zero.AND.ebn(i,j)<zero))unloading=.true.
602
603 psn1(i,j)=-
alpha(1)*finter(ifunc(1),strain(i,j),npf,tf,df)
604
605
606
607
608
609 edot0(i,j)=rate(i,j)
610 IF(edot0(i,j)<edot(1)) edot0(i,j)=edot(1)
611 IF(unloading.AND.iunload/=0) THEN
612
613
614 IF (abs(runload-edot(1))<em20) THEN
615 psn(i,j)=-funload*
616 & (finter(ifunc(nfuncul),strain(i,j),npf,tf,df1))
617 eyn(i,j)=funload*df1
618 visc(i,j)=zero
619 ELSE
620 edotu(i,j)=edot0(i,j)
621 edots(i,j)=edot(1)
622 edotl(i,j)=
max(runload,edots(i,j))
623
624 IF(edotu(i,j)<edots(i,j))edotu(i,j)=edots(i,j)
625 IF(edotu(i,j)>edotl(i,j))edotu(i,j)=edotl(i,j)
626
628 & finter(ifunc(1),strain(i,j),npf,tf,df1)
629 eyn(i,j)=
alpha(1)*df1
630 psn2(i,j)=-funload*
631 & (finter(ifunc(nfuncul),strain(i,j),npf,tf,df2))
632
633 ratio = (
min(one,(edotu(i,j)-edots(i,j))/
634 & (
max(tiny,edotl(i,j)-edots(i,j)))))
635
636 IF(ratio>zero) THEN
637 pui_1 = exp( exponas*log(ratio) )
638 ELSE
639 pui_1 = zero
640 ENDIF
641 IF(pui_1 < one) THEN
642 psn(i,j)=psn2(i,j)+(psn1(i,j)-psn2(i,j))*
643 & exp( exponbs*log( one - pui_1 ) )
644 ELSE
645 psn(i,j)=psn2(i,j)
646 ENDIF
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661 IF(abs(edotu(i,j)-edots(i,j))>tiny.AND.
662 & abs(psn(i,j)-psn1(i,j))>tiny)visc(i,j)=
663 & abs((psn(i,j)-psn1(i,j))/(edotu(i,j)-edots(i,j)))
664
665 visc(i,j)=
min(visc(i,j),viscosity)
666 psn(i,j)=psn1(i,j)-visc(i,j)*(edotu(i,j)-edots(i,j))
667 ENDIF
668
669 ELSE
670 kun(i,j)=0
671 IF(unloading) kun(i,j)=nfunc1
672
673
674
675 IF (nfunc1==1) THEN
677 & finter(ifunc(kun(i,j)+1),strain(i,j)+shift,npf,tf,df)
679 ELSE
680
681
682
683
684
685 DO l=1,nfunc1
686 IF(edot0(i,j)<=edot(l)) GOTO 10
687 ENDDO
688 l=nfunc1
689 edot0(i,j)=edot(l)
690 10 CONTINUE
691 k(i,j)=l
692 kf(i,j)=l+kun(i,j)
693
694 psn2(i,j)=-
alpha(k(i,j))*
695 & finter(ifunc(kf(i,j)),strain(i,j)+shift,npf,tf,df2)
697 kf1(i,j)=
max(1,l-1)+kun(i,j)
698 edotl(i,j)=edot(k(i,j))
699 edots(i,j)=edot(k1(i,j))
700 psn1(i,j)=-
alpha(k1(i,j))*
701 & finter(ifunc(kf1(i,j)),strain(i,j)+shift,npf,tf,df1)
702 IF(l==nfunc1) THEN
703 eyn(i,j)=
alpha(l)*df2
704 ELSE
705 eyn(i,j)=
alpha(k1(i,j))*df1
706 ENDIF
707
708 ratio = (
min(one,(edot0(i,j)-edots(i,j))/
709 & (
max(tiny,edotl(i,j)-edots(i,j)))))
710 IF(ratio>zero) THEN
711 pui_1 = exp( exponas*log(ratio) )
712 ELSE
713 pui_1 = zero
714 ENDIF
715 IF(pui_1 < one) THEN
716 psn(i,j)=psn2(i,j)+(psn1(i,j)-psn2(i,j))*
717 & exp(exponbs*log(one - pui_1 ) )
718 ELSE
719 psn(i,j)=psn2(i,j)
720 ENDIF
721
722
723
724
725
726
727
728
729 IF(abs(edot0(i,j)-edots(i,j))>tiny.AND.
730 & abs(psn(i,j)-psn1(i,j))>tiny)visc(i,j)=
731 & abs((psn(i,j)-psn1(i,j))/(edot0(i,j)-edots(i,j)))
732
733 visc(i,j)=
min(visc(i,j),viscosity)
734 psn(i,j)=psn1(i,j)-visc(i,j)*(edot0(i,j)-edots(i,j))
735 ENDIF
736 ENDIF
737
738 ENDDO
739
740
741
742
743
744 DO i=1,nel
745 decay = uvar(i,j+28)
746
747
748 IF(ean(i,j)<zero) THEN
749
750 IF(krecover==0.AND.ecn(i,j)<zero)
751 & uvar(i,j+25)=uvar(i,j+25)+abs(ecn(i,j))
752
753 IF(krecover==1)uvar(i,j+25)=uvar(i,j+25)-ecn(i,j)
754 IF(ebn(i,j)<zero) THEN
755 decay =
min(one,hyster*(one-exp(-beta*uvar(i,j+25))))
756 ENDIF
757 ENDIF
758
759 IF (krecover==2) decay = efac(i)
760
761 IF(kdecay==0)
762 & psn(i,j)=psn(i,j)*(one-decay)
763
764 IF(kdecay==1.AND.ecn(i,j)<zero)
765 & psn(i,j)=psn(i,j)*(one-decay)
766
767 IF(kdecay==2.AND.ecn(i,j)>zero)
768 & psn(i,j)=psn(i,j)*(one-decay)
769 uvar(i,j+28)=decay
770
771 dsigma(i,j)=psn(i,j)-uvar(i,j+3)
772 IF(total) THEN
773
774 tmp1 = eyn(i,j)
775 ELSE
776 IF(abs(ecn(i,j))>tiny)THEN
777 eyn(i,j)=abs(dsigma(i,j)/ecn(i,j))
778 ELSE
779 eyn(i,j)=uvar(i,j+9)
780 ENDIF
781 ENDIF
782 ENDDO
783
784 IF(.NOT.total) THEN
785 DO i=1,nel
786 IF(sign(one,(ebn(i,j)/(uvar(i,j+6)+tiny)))/=one)
787 & eyn(i,j)=uvar(i,j+9)
788 ENDDO
789
790 DO i=1,nel
791 eyn(i,j)=eyn(i,j)*theta+uvar(i,j+9)*(one-theta)
792 ENDDO
793 ENDIF
794
795
796 IF(itotal==0.OR.itotal==2) THEN
797
798 DO i=1,nel
799 IF(ean(i,j)>=zero) THEN
800 uvar(i,j+28)=zero
801 tmp1=exp(-lamda*(volumer(i)-1.+epsfin))
802 ei(i)=efinal+(e0-efinal)*(1-tmp1)
803 tmp2=lamda*(efinal-e0)*tmp1
804 eyn(i,j)=
max(ei(i),tmp2)
805 IF(total) THEN
806 psn(i,j)=ei(i)*ean(i,j)
807 ELSE
808 psn(i,j)=uvar(i,j+3)+ei(i)*ecn(i,j)
809 ENDIF
810 uvar(i,j+12)=vt/ei(i)
811 ENDIF
812 ENDDO
813
814 IF (krecover==2) THEN
815 DO i=1,nel
816 IF(ean(i,j)>=zero) THEN
817 decay = efac(i)
818
819 IF(kdecay==0) psn(i,j)=psn(i,j)*(one-decay)
820
821 IF(kdecay==1.AND.ecn(i,j)<zero)
822 & psn(i,j)=psn(i,j)*(one-decay)
823
824 IF(kdecay==2.AND.ecn(i,j)>zero)
825 & psn(i,j)=psn(i,j)*(one-decay)
827 END DO
828 END IF
829 ELSEIF(itotal==-1) THEN
830
831 DO i=1,nel
832 IF(ean(i,j)>0.) THEN
833 uvar(i,j+28)=zero
834 ei(i)=
max(uvar(i,10),uvar(i,11),uvar(i,12))
835 eyn(i,j)=ei(i)
836 psn(i,j)=ei(i)*ean(i,j)
837 uvar(i,j+12)=vt/ei(i)
838 ENDIF
839 ENDDO
840 ELSEIF(itotal==-2) THEN
841
842 DO i=1,nel
843 IF(ean(i,j)>zero) THEN
844 uvar(i,j+28)=zero
845 ei(i)=
max(uvar(i,10),uvar(i,11),uvar(i,12))
846 eyn(i,j)=ei(i)
847 psn(i,j)=uvar(i,j+3)+ei(i)*ecn(i,j)
848 uvar(i,j+12)=vt/ei(i)
849 ENDIF
850 ENDDO
851 ENDIF
852
853
854 ENDDO
855
856 IF (imsta>=1) THEN
857 DO i=1,nel
858 sigmax(i)=-(
min(psn(i,1),psn(i,2),psn(i,3))-
859 .
max(psn(i,1),psn(i,2),psn(i,3)))
860 ENDDO
861 DO j=1,mdir
862 DO i=1,nel
863 esecant(i,j)=0.4*abs(psn(i,j))/
max(tiny,abs(strain(i,j)))
864 IF (esecant(i,j)<=sigmax(i)) THEN
865 tmp1=0.2*(sigmax(i)-esecant(i,j))
866 psn(i,j)=psn(i,j)+tmp1*ean(i,j)
867 eyn(i,j)=
max(eyn(i,j),(one+tmp1)*esecant(i,j))
868 ENDIF
869 ENDDO
870 ENDDO
871 ENDIF
872
873 IF ((ismstr==10.OR.ismstr==12).AND.ideac==0) THEN
874 DO j=1,mdir
875 DO i=1,nel
876 tmp0=
max(eyn(i,j),uvar(i,j+9))
877 IF (offg(i) <=one) THEN
878 uvar(i,j )=sqrt(ear(i,j)+one)
879 ELSE
880 uvar(i,j )=ear(i,j)
881 END IF
882 uvar(i,j+3)=psn(i,j)
883 uvar(i,j+6)=ebn(i,j)
884 uvar(i,j+9)=eyn(i,j)
885 eyn(i,j)=tmp0
886 ENDDO
887
888 ENDDO
889 ELSE
890 DO j=1,mdir
891 DO i=1,nel
892 tmp0=
max(eyn(i,j),uvar(i,j+9))
893 uvar(i,j )=ear(i,j)
894 uvar(i,j+3)=psn(i,j)
895 uvar(i,j+6)=ebn(i,j)
896 uvar(i,j+9)=eyn(i,j)
897 eyn(i,j)=tmp0
898 ENDDO
899
900 ENDDO
901 END IF
902
903 DO i=1,nel
904 epsd(i)=
max(abs(ebn(i,1)),abs(ebn(i,2)),abs(ebn(i,3)))
905 ENDDO
906
907 IF(iflag==1) THEN
908
909 DO i=1,nel
910 emax(i)=ei(i)
911 d11(i)=emax(i)*(one-vt)/(one+vt)/(one-two*vt)
912 d12(i)=emax(i)*vt/(one+vt)/(one-two*vt)
913 d44(i)=emax(i)/two/(one+vt)
914 ENDDO
915 DO i=1,nel
916 IF(total) THEN
917 signxx(i)=d11(i)*epsxx(i)+d12(i)*epsyy(i)+d12(i)*epszz(i)
918 signyy(i)=d12(i)*epsxx(i)+d11(i)*epsyy(i)+d12(i)*epszz(i)
919 signzz(i)=d12(i)*epsxx(i)+d12(i)*epsyy(i)+d11(i)*epszz(i)
920 signxy(i)=d44(i)*epsxy(i)
921 signyz(i)=d44(i)*epsyz(i)
922 signzx(i)=d44(i)*epszx(i)
923 soundsp(i) = sqrt(d11(i)/rho0(i))
924 ELSE
925 signxx(i)=sigoxx(i)+
926 & d11(i)*depsxx(i)+d12(i)*depsyy(i)+d12(i)*depszz(i)
927 signyy(i)=sigoyy
928 & d12(i)*depsxx(i)+d11(i)*depsyy(i)+d12(i)*depszz(i)
929 signzz(i)=sigozz(i)+
930 & d12(i)*depsxx(i)+d12(i)*depsyy(i)+d11(i)*depszz(i)
931 signxy(i)=sigoxy(i)+d44(i)*depsxy(i)
932 signyz(i)=sigoyz(i)+d44(i)*depsyz(i)
933 signzx(i)=sigozx(i)+d44(i)*depszx(i)
934 soundsp(i) = sqrt(d11(i)/rho0(i))
935 ENDIF
936 viscmax(i)=visc(i,1)
937
938 ENDDO
939 RETURN
940 ENDIF
941
942 DO i=1,nel
943 IF(vt+vc<=two*tiny) THEN
944 IF(total) THEN
945 psc(i,1)=psn(i,1)
946 psc(i,2)=psn(i,2)
947 psc(i,3)=psn(i,3)
948 ELSE
949 psc(i,1)=eyn(i,1)*ecn(i,1)
950 psc(i,2)=eyn(i,2)*ecn(i,2)
951 psc(i,3)=eyn(i,3)*ecn(i,3)
952 ENDIF
953 ELSE
954 e12(i)=(ean(i,1)+ean(i,2))/two
955 e23(i)=(ean(i,2)+ean(i,3))/two
956 e31(i)=(ean(i,3)+ean(i,1))/two
957 v12(i)=vc+(vt-vc)*(one-exp(-rv*abs(e12(i))))*
958 & (sign(one,e12(i))+one)/two
959 v23(i)=vc+(vt-vc)*(one-exp(-rv*abs(e23(i))))*
960 & (sign(one,e23(i))+one)/two
961 v31(i)=vc+(vt-vc)*(one-exp(-rv*abs(e31(i))))*
962 & (sign(one,e31(i))+one)/two
963 IF(total) THEN
964 detc(i)=one-v23(i)*v23(i)-v31(i)*v31(i)-v12(i)*v12(i)-
965 & two*v12(i)*v31(i)*v23(i)
966 a11(i)=(one-v23(i)*v23(i))
967 a12(i)=(v12(i)+v23(i)*v31(i))
968 a13(i)=(v31(i)+v23(i)*v12(i))
969 a22(i)=(one-v31(i)*v31(i))
970 a23(i)=(v23(i)+v31(i)*v12(i))
971 a33(i)=(one-v12(i)*v12(i))
972 psc(i,1)=(a11(i)*psn(i,1)+a12(i)*psn(i,2)+a13(i)*psn(i,3))/
973 & detc(i)
974 psc(i,2)=(a12(i)*psn(i,1)+a22(i)*psn(i,2)+a23(i)*psn(i,3))/
975 & detc(i)
976 psc(i,3)=(a13(i)*psn(i,1)+a23(i)*psn(i,2)+a33(i)*psn(i,3))/
977 & detc(i)
978 ELSE
979 uvar(i,13)=theta*v23(i)/ei(i)+(one-theta)*uvar(i,13)
980 uvar(i,14)=theta*v31(i)/ei(i)+(one-theta)*uvar(i,14)
981 uvar(i,15)=theta*v12(i)/ei(i)+(one-theta)*uvar(i,15)
982 detc(i)=one/(eyn(i,1)*eyn(i,2)*eyn(i,3))-
983 & uvar(i,13)*uvar(i,13)/eyn(i,1)-
984 & uvar(i,14)*uvar(i,14)/eyn(i,2)-
985 & uvar(i,15)*uvar(i,15)/eyn(i,3)-
986 & 2*uvar(i,13)*uvar(i,14)*uvar(i,15)
987 a11(i)=one/(eyn(i,2)*eyn(i,3))-uvar(i,13)*uvar(i,13)
988 a12(i)=uvar(i,15)/eyn(i,3)+uvar(i,13)*uvar(i,14)
989 a13(i)=uvar(i,14)/eyn(i,2)+uvar(i,13)*uvar(i,15)
990 a22(i)=one/(eyn(i,1)*eyn(i,3))-uvar(i,14)*uvar(i,14)
991 a23(i)=uvar(i,13)/eyn(i,1)+uvar(i,14)*uvar(i,15)
992 a33(i)=one/(eyn(i,1)*eyn(i,2))-uvar(i,15)*uvar(i,15)
993
994 psc(i,1)=((a11(i)*ecn(i,1)+a12(i)*ecn(i,2)+a13(i)*ecn(i,3))
995 & /detc(i))
996 psc(i,2)=((a12(i)*ecn(i,1)+a22(i)*ecn(i,2)+a23(i)*ecn(i,3))
997 & /detc(i))
998 psc(i,3)=((a13(i)*ecn(i,1)+a23(i)*ecn(i,2)+a33(i)*ecn(i,3))
999 & /detc(i))
1000 ENDIF
1001 ENDIF
1002
1003 DO j=1,3
1004 IF(off(i)==zero.OR.psn(i,j)>abs(tensioncut))THEN
1005 psc(i,1)=zero
1006 psc(i,2)=zero
1007 psc(i,3)=zero
1008 off(i)=zero
1009 ENDIF
1010 ENDDO
1011
1012
1013 IF(ismstr==0.OR.ismstr==2.OR.ismstr==4) THEN
1014
1015 den1=el(i,2)*el(i,3)
1016 den2=el(i,3)*el(i,1)
1017 den3=el(i,1)*el(i,2)
1018 psc(i,1)=psc(i,1)/den1
1019 psc(i,2)=psc(i,2)/den2
1020 psc(i,3)=psc(i,3)/den3
1021 eyn(i,1)=eyn(i,1)/den1
1022 eyn(i,2)=eyn(i,2)/den2
1023 eyn(i,3)=eyn(i,3)/den3
1024 ELSEIF(ismstr==10.OR.(ismstr==12.AND.offg(i)<=one)) THEN
1025
1026 den1=el(i,1)/volumer(i)
1027 den2=el(i,2)/volumer(i)
1028 den3=el(i,3)/volumer(i)
1029 psc(i,1)=psc(i,1)*den1
1030 psc(i,2)=psc(i,2)*den2
1031 psc(i,3)=psc(i,3)*den3
1032 eyn(i,1)=eyn(i,1)*den1
1033 eyn(i,2)=eyn(i,2)*den2
1034 eyn(i,3)=eyn(i,3)*den3
1035 ENDIF
1036 ENDDO
1037 IF (kcompair==2) THEN
1038 DO i=1,nel
1039 tmp0=volumer(i)
1040 tmp3=
min(el(i,1),el(i,2),el(i,3))
1041 IF (tmp0<one.AND.tmp3<one
1042 & .AND.tmp3>tmp0.AND.abs(tmp0-tmp3)>em6) THEN
1043 IF(volumer(i)>zero) THEN
1044 tmp2=exp((1./3.)*log(volumer(i)))-volumer(i)
1045 ELSE
1046 tmp2=zero
1047 ENDIF
1048 tmp4=(tmp3-tmp0)/tmp2
1050 ELSE
1051 aa(i)=zero
1052 ENDIF
1053 ENDDO
1054 DO j=1,3
1055 DO i=1,nel
1056 sigprv(i,j)=psc(i,j)+aa(i)*(pair(i)-psc(i,j))
1057 ENDDO
1058 ENDDO
1059 ELSE
1060 DO j=1,3
1061 DO i=1,nel
1062 sigprv(i,j)=psc(i,j)+pair(i)
1063 ENDDO
1064 ENDDO
1065 ENDIF
1066
1067 DO i=1,nel
1068 signxx(i) = dirprv(i,1,1)*dirprv(i,1,1)*sigprv(i,1)
1069 & + dirprv(i,1,2)*dirprv(i,1,2)*sigprv(i,2)
1070 & + dirprv(i,1,3)*dirprv(i,1,3)*sigprv(i,3)
1071 signyy(i) = dirprv(i,2,2)*dirprv(i,2,2)*sigprv(i,2)
1072 & + dirprv(i,2,3)*dirprv(i,2,3)*sigprv(i,3)
1073 & + dirprv(i,2,1)*dirprv(i,2,1)*sigprv(i,1)
1074 signzz(i) = dirprv(i,3,3)*dirprv(i,3,3)*sigprv(i,3)
1075 & + dirprv(i,3,1)*dirprv(i,3,1)*sigprv(i,1)
1076 & + dirprv(i,3,2)*dirprv(i,3,2)*sigprv(i,2)
1077 signxy(i) = dirprv(i,1,1)*dirprv(i,2,1)*sigprv(i,1)
1078 & + dirprv(i,1,2)*dirprv(i,2,2)*sigprv(i,2)
1079 & + dirprv(i,1,3)*dirprv(i,2,3)*sigprv(i,3)
1080 signyz(i) = dirprv(i,2,2)*dirprv(i,3,2)*sigprv(i,2)
1081 & + dirprv(i,2,3)*dirprv(i,3,3)*sigprv(i,3)
1082 & + dirprv(i,2,1)*dirprv(i,3,1)*sigprv(i,1)
1083 signzx(i) = dirprv(i,3,3)*dirprv(i,1,3)*sigprv(i,3)
1084 & + dirprv(i,3,1)*dirprv(i,1,1)*sigprv(i,1)
1085 & + dirprv(i,3,2)*dirprv(i,1,2)*sigprv(i,2)
1086 ENDDO
1087
1088 IF(.NOT.total) THEN
1089 DO i=1,nel
1090
1091 signxx(i)=signxx(i)+sigoxx(i)
1092 signyy(i)=signyy(i)+sigoyy(i)
1093 signzz(i)=signzz(i)+sigozz(i)
1094 signxy(i)=signxy(i)+sigoxy(i)
1095 signyz(i)=signyz(i)+sigoyz(i)
1096 signzx(i)=signzx(i)+sigozx(i)
1097 ENDDO
1098 ENDIF
1099
1100 IF(iflag==0) THEN
1101 DO i=1,nel
1102 emax(i)=
max(ei(i),eyn(i,1),eyn(i,2),eyn(i,3))
1103 ENDDO
1104 ENDIF
1105
1106 IF (imsta==2) THEN
1107 DO i=1,nel
1108 epsxy(i) = dirprv(i,1,1)*dirprv(i,2,1)*ean(i,1)
1109 & + dirprv(i,1,2)*dirprv(i,2,2)*ean(i,2)
1110 & + dirprv(i,1,3)*dirprv(i,2,3)*ean(i,3)
1111 epsyz(i) = dirprv(i,2,2)*dirprv(i,3,2)*ean(i,2)
1112 & + dirprv(i,2,3)*dirprv(i,3,3)*ean(i,3)
1113 & + dirprv(i,2,1)*dirprv(i,3,1)*ean(i,1)
1114 epszx(i) = dirprv(i,3,3)*dirprv(i,1,3)*ean(i,3)
1115 & + dirprv(i,3,1)*dirprv(i,1,1)*ean(i,1)
1116 & + dirprv(i,3,2)*dirprv(i,1,2)*ean(i,2)
1117 ENDDO
1118 DO i=1,nel
1119 esecant(i,1)=0.5*abs(signxy(i))/
max(tiny,abs(epsxy(i)))
1120 esecant(i,2)=0.5*abs(signyz(i))/
max(tiny,abs(epsyz(i)))
1121 esecant(i,3)=0.5*abs(signzx(i))/
max(tiny,abs(epszx(i)))
1122 sigmax(i)=
max(0.5*ei(i),sigmax(i))
1123 IF (esecant(i,1)<=sigmax(i)) THEN
1124 tmp1=0.1*(sigmax(i)-esecant(i,1))
1125 signxy(i)=signxy(i)+tmp1*epsxy(i)
1126 ENDIF
1127 IF (esecant(i,2)<=sigmax(i)) THEN
1128 tmp1=0.1*(sigmax(i)-esecant(i,2))
1129 signyz(i)=signyz(i)+tmp1*epsyz(i)
1130 ENDIF
1131 IF (esecant(i,3)<=sigmax(i)) THEN
1132 tmp1=0.1*(sigmax(i)-esecant(i,3))
1133 signzx(i)=signzx(i)+tmp1*epszx(i)
1134 ENDIF
1135 ENDDO
1136 ENDIF
1137 DO i=1,nel
1138 kkk=emax(i)/(three*(one-two*
max(vc,vt)))
1139 ggg=emax(i)/(two*(one+
max(vc,vt)))
1140 soundsp(i)=sqrt((kkk+four_over_3*ggg)/rho0(i))
1141 viscmax(i)=
max(visc(i,1),visc(i,2),visc(i,3))
1142 ENDDO
1143
1144 IF (impl_s > 0 .OR. ihet > 1) THEN
1145
1146 IF(iflag/=0) THEN
1147 DO i=1,nel
1148 emax(i)=
max(ei(i),eyn(i,1),eyn(i,2),eyn(i,3))
1149 ENDDO
1150 ENDIF
1151 DO i=1,nel
1152 eymin=
min(eyn(i,1),eyn(i,2),eyn(i,3))
1153 eyav = third*(eyn(i,1)+eyn(i,2)+eyn(i,3))
1154 et(i)= eymin/emax(i)
1155 ENDDO
1156
1157 IF (time==zero) THEN
1158 tmp1=-
alpha(1)*finter(ifunc(1),em20,npf,tf,df)
1159 tmp2 =
alpha(1)*df/e0
1160 IF (tmp2>0.05) THEN
1161 uvar(1:nel,33) = -one
1162 ELSE
1163 uvar(1:nel,33) =et(1:nel)
1164 END IF
1165 ELSEIF (nel>0.AND.uvar(1,33)<zero) THEN
1166 et(1:nel) = one
1167 ELSE
1168 tmp1 = 0.75
1169 et(1:nel)=tmp1*et(1:nel)+(one-tmp1)*uvar(1:nel,33)
1170 uvar(1:nel,33) =et(1:nel)
1171 END IF
1172 END IF
1173
1174 RETURN
1175
if(complex_arithmetic) id
subroutine checkaxes(tran1, tran2, amin, amax, unchanged, tol)
subroutine dreh(b, tr, ii, jj, ken)
subroutine jacobiew(a, n, ew, ev, nrot)
subroutine valpvecdp_v(sig, val, vec, nel)
subroutine valpvec_v(sig, val, vec, nel)