1 SUBROUTINE pull2(PK,SIG,FINV,DET,NDI)
4 include
'PARAM_UMAT.INC' 6 INTEGER I1,J1,II1,JJ1,NDI
7 DOUBLE PRECISION PK(ndi,ndi),FINV(ndi,ndi)
8 DOUBLE PRECISION SIG(ndi,ndi)
9 DOUBLE PRECISION AUX,DET
16 aux=aux+det*finv(i1,ii1)*finv(j1,jj1)*sig(ii1,jj1)
25 SUBROUTINE pinvariants(A,INV4,NDI,ST,LAMBDA,BARLAMBDA,DET)
28 include
'PARAM_UMAT.INC' 31 DOUBLE PRECISION A(ndi,ndi),DET,SCALE1,ST(ndi,ndi),LAMBDA
32 DOUBLE PRECISION BARLAMBDA,INV4
37 inv4=inv4+a(i,j)*st(i,j)
41 scale1=det**(-one /three)
43 lambda=barlambda/scale1
47 SUBROUTINE metvol(CVOL,C,PV,PPV,DET,NDI)
50 include
'PARAM_UMAT.INC' 52 INTEGER NDI,I1,J1,K1,L1
53 DOUBLE PRECISION C(ndi,ndi),CINV(ndi,ndi),
54 1 cvol(ndi,ndi,ndi,ndi)
55 DOUBLE PRECISION PV,PPV,DET
64 1 det*ppv*cinv(i1,j1)*cinv(k1,l1)
65 2 -det*pv*(cinv(i1,k1)*cinv(j1,l1)
66 3 +cinv(i1,l1)*cinv(j1,k1))
82 include
'PARAM_UMAT.INC' 84 INTEGER I1,J1,K1,L1,NDI
86 DOUBLE PRECISION RT(ndi,ndi),LT(ndi,ndi,ndi,ndi)
87 DOUBLE PRECISION S(ndi,ndi)
95 aux=aux+lt(i1,j1,k1,l1)*rt(k1,l1)
128 SUBROUTINE umat(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
129 1 rpl,ddsddt,drplde,drpldt,
130 2 stran,dstran,time,dtime,temp,dtemp,predef,dpred,cmname,
131 3 ndi,nshr,ntens,nstatev,props,nprops,coords,drot,pnewdt,
132 4 celent,dfgrd0,dfgrd1,noel,npt,layer,kspt,kstep,kinc)
138 include
'PARAM_UMAT.INC' 146 INTEGER NDI, NSHR, NTENS, NSTATEV, NPROPS, NOEL, NPT,
147 1 layer, kspt, kstep, kinc
149 DOUBLE PRECISION STRESS(ntens),STATEV(nstatev),
150 1 ddsdde(ntens,ntens),ddsddt(ntens),drplde(ntens),
151 2 stran(ntens),dstran(ntens),time(2),predef(1),dpred(1),
152 3 props(nprops),coords(3),drot(3,3),dfgrd0(3,3),dfgrd1(3,3),
155 DOUBLE PRECISION SSE, SPD, SCD, RPL, DRPLDT, DTIME, TEMP,
156 1 dtemp,pnewdt,celent
163 DOUBLE PRECISION UNIT2(ndi,ndi),UNIT4(ndi,ndi,ndi,ndi),
164 1 unit4s(ndi,ndi,ndi,ndi),
165 2 proje(ndi,ndi,ndi,ndi),projl(ndi,ndi,ndi,ndi)
167 DOUBLE PRECISION DISTGR(ndi,ndi),C(ndi,ndi),B(ndi,ndi),
168 1 cbar(ndi,ndi),bbar(ndi,ndi),distgrinv(ndi,ndi),
169 2 ubar(ndi,ndi),vbar(ndi,ndi),rot(ndi,ndi),
171 DOUBLE PRECISION DET,CBARI1,CBARI2
173 DOUBLE PRECISION PKVOL(ndi,ndi),SVOL(ndi,ndi),
174 1 cvol(ndi,ndi,ndi,ndi),cmvol(ndi,ndi,ndi,ndi)
175 DOUBLE PRECISION KBULK,PV,PPV,SSEV
177 DOUBLE PRECISION SISO(ndi,ndi),PKISO(ndi,ndi),PK2(ndi,ndi),
178 1 ciso(ndi,ndi,ndi,ndi),cmiso(ndi,ndi,ndi,ndi),
179 2 sfic(ndi,ndi),cfic(ndi,ndi,ndi,ndi),
180 3 pkfic(ndi,ndi),cmfic(ndi,ndi,ndi,ndi)
182 DOUBLE PRECISION C10,C01,SSEISO,DISO(5),PKMATFIC(ndi,ndi),
183 1 smatfic(ndi,ndi),sisomatfic(ndi,ndi),
184 2 cmisomatfic(ndi,ndi,ndi,ndi),
185 3 cisomatfic(ndi,ndi,ndi,ndi)
187 DOUBLE PRECISION K1,K2,KDISP,SSEANISO,
189 2 pkmatficaniso(ndi,ndi),
190 3 sanisomatfic(ndi,ndi),
191 4 cmanisomatfic(ndi,ndi,ndi,ndi),
192 6 canisomatfic(ndi,ndi,ndi,ndi),
195 DOUBLE PRECISION VORIF(3),VD(3),M0(3,3),MM(3,3),
196 1 vorif2(3),vd2(3),n0(3,3),nn(3,3)
200 DOUBLE PRECISION VSCPROPS(6)
203 DOUBLE PRECISION CJR(ndi,ndi,ndi,ndi)
205 DOUBLE PRECISION SIGMA(ndi,ndi),DDSIGDDE(ndi,ndi,ndi,ndi),
206 1 ddpkdde(ndi,ndi,ndi,ndi)
208 DOUBLE PRECISION STEST(ndi,ndi), CTEST(ndi,ndi,ndi,ndi)
267 CALL onem(unit2,unit4,unit4s,ndi)
288 IF ((time(1).EQ.zero).AND.(kstep.EQ.1))
THEN 298 CALL fslip(dfgrd1,distgr,det,ndi)
307 CALL fibdir(fibori,m0,mm,nelem,noel,ndi,vorif,vd,distgr,dfgrd1)
311 CALL pinvariants(cbar,cbari4,ndi,m0,lambda,barlambda,det)
314 CALL stretch(cbar,bbar,ubar,vbar,ndi)
318 CALL projeul(unit2,unit4s,proje,ndi)
320 CALL projlag(c,unit4,projl,ndi)
327 CALL vol(ssev,pv,ppv,kbulk,det)
328 CALL isomat(sseiso,diso,c10,c01,cbari1,cbari2)
329 CALL anisomat(sseaniso,daniso,diso,k1,k2,kdisp,cbari4,cbari1)
338 1 diso,unit2,unit4,det,ndi)
340 CALL csisomatfic(cisomatfic,cmisomatfic,distgr,det,ndi)
345 CALL push2(sanisomatfic,pkmatficaniso,distgr,det,ndi)
348 CALL push4(canisomatfic,cmanisomatfic,distgr,det,ndi)
353 sse=ssev+sseiso+sseaniso
355 pkfic=pkmatfic+pkmatficaniso
357 sfic=sisomatfic+sanisomatfic
359 cmfic=cmisomatfic+cmanisomatfic
361 cfic=cisomatfic+canisomatfic
369 CALL pk2vol(pkvol,pv,c,ndi)
371 CALL sigvol(svol,pv,unit2,ndi)
375 CALL pk2iso(pkiso,pkfic,projl,det,ndi)
377 CALL sigiso(siso,sfic,proje,ndi)
391 CALL metvol(cmvol,c,pv,ppv,det,ndi)
395 CALL metiso(cmiso,cmfic,projl,pkiso,pkfic,c,unit2,det,ndi)
399 ddpkdde= cmvol + cmiso
407 CALL setvol(cvol,pv,ppv,unit2,unit4s,ndi)
411 CALL setiso(ciso,cfic,proje,siso,sfic,unit2,ndi)
415 CALL setjr(cjr,sigma,unit2,ndi)
420 ddsigdde=cvol+ciso+cjr
426 CALL indexx(stress,ddsdde,sigma,ddsigdde,ntens,ndi)
442 SUBROUTINE projeul(A,AA,PE,NDI)
450 include
'PARAM_UMAT.INC' 454 DOUBLE PRECISION A(ndi,ndi),AA(ndi,ndi,ndi,ndi),
455 1 pe(ndi,ndi,ndi,ndi)
461 pe(i,j,k,l)=aa(i,j,k,l)-(one/three)*(a(i,j)*a(k,l))
469 SUBROUTINE sigvol(SVOL,PV,UNIT2,NDI)
472 include
'PARAM_UMAT.INC' 475 DOUBLE PRECISION UNIT2(ndi,ndi),SVOL(ndi,ndi)
480 svol(i1,j1)=pv*unit2(i1,j1)
486 SUBROUTINE isomat(SSEISO,DISO,C10,C01,CBARI1,CBARI2)
489 include
'PARAM_UMAT.INC' 491 DOUBLE PRECISION SSEISO,DISO(5)
492 DOUBLE PRECISION C10,C01,CBARI1,CBARI2
494 sseiso=c10*(cbari1-three)+c01*(cbari2-three)
512 include
'PARAM_UMAT.INC' 514 DOUBLE PRECISION STATEV(nsdv)
528 SUBROUTINE anisomat(SSEANISO,DANISO,DISO,K1,K2,KDISP,I4,I1)
531 include
'PARAM_UMAT.INC' 533 DOUBLE PRECISION SSEISO,DANISO(4),DISO(5)
534 DOUBLE PRECISION K1,K2,KDISP,I4,I1
535 DOUBLE PRECISION DUDI1,D2UD2I1,SSEANISO
536 DOUBLE PRECISION E1,EE2,EE3,DUDI4,D2UD2I4,D2DUDI1DI4,D2DUDI2DI4
541 e1=i4*(one-three*kdisp)+i1*kdisp-one
543 sseaniso=(k1/k2)*(dexp(k1*e1*e1)-one)
548 ee3=(one+two*k2*e1*e1)
550 dudi1=dudi1+k1*kdisp*e1*ee2
551 d2ud2i1=d2ud2i1+k1*kdisp*kdisp*ee3*ee2
553 dudi4=k1*(one-three*kdisp)*e1*ee2
555 d2ud2i4=k1*((one-three*kdisp)**two)*ee3*ee2
557 d2dudi1di4=k1*(one-three*kdisp)*kdisp*ee3*ee2
585 SUBROUTINE pk2vol(PKVOL,PV,C,NDI)
588 include
'PARAM_UMAT.INC' 591 DOUBLE PRECISION PKVOL(ndi,ndi),C(ndi,ndi),CINV(ndi,ndi)
598 pkvol(i1,j1)=pv*cinv(i1,j1)
604 SUBROUTINE pull4(MAT,SPATIAL,FINV,DET,NDI)
607 include
'PARAM_UMAT.INC' 609 INTEGER I1,J1,K1,L1,II1,JJ1,KK1,LL1,NDI
610 DOUBLE PRECISION MAT(ndi,ndi,ndi,ndi),FINV(ndi,ndi)
611 DOUBLE PRECISION SPATIAL(ndi,ndi,ndi,ndi)
612 DOUBLE PRECISION AUX,DET
624 + finv(i1,ii1)*finv(j1,jj1)*
625 + finv(k1,kk1)*finv(l1,ll1)*spatial(ii1,jj1,kk1,ll1)
638 SUBROUTINE setjr(CJR,SIGMA,UNIT2,NDI)
641 include
'PARAM_UMAT.INC' 643 INTEGER NDI,I1,J1,K1,L1
644 DOUBLE PRECISION UNIT2(ndi,ndi),
645 1 cjr(ndi,ndi,ndi,ndi),sigma(ndi,ndi)
652 1 (one/two)*(unit2(i1,k1)*sigma(j1,l1)
653 2 +sigma(i1,k1)*unit2(j1,l1)+unit2(i1,l1)*sigma(j1,k1)
654 3 +sigma(i1,l1)*unit2(j1,k1))
670 include
'PARAM_UMAT.INC' 672 INTEGER I1,J1,K1,L1,M1,N1,NDI
674 DOUBLE PRECISION LT(ndi,ndi,ndi,ndi),RT(ndi,ndi,ndi,ndi)
675 DOUBLE PRECISION S(ndi,ndi,ndi,ndi)
685 aux=aux+lt(i1,j1,m1,n1)*rt(m1,n1,k1,l1)
699 include
'PARAM_UMAT.INC' 704 INTEGER I1,POS,POS1,POS2,POS3
705 DOUBLE PRECISION STATEV(nsdv)
712 SUBROUTINE setvol(CVOL,PV,PPV,UNIT2,UNIT4S,NDI)
715 include
'PARAM_UMAT.INC' 717 INTEGER NDI,I1,J1,K1,L1
718 DOUBLE PRECISION UNIT2(ndi,ndi),UNIT4S(ndi,ndi,ndi,ndi),
719 1 cvol(ndi,ndi,ndi,ndi)
720 DOUBLE PRECISION PV,PPV
727 1 ppv*unit2(i1,j1)*unit2(k1,l1)
728 2 -two*pv*unit4s(i1,j1,k1,l1)
746 include
'PARAM_UMAT.INC' 749 DOUBLE PRECISION FIC(ndi,ndi),DISO(5),CBAR(ndi,ndi),UNIT2(ndi,ndi)
750 DOUBLE PRECISION DUDI1,DUDI2,CBARI1
751 DOUBLE PRECISION AUX1,AUX2
756 aux1=two*(dudi1+cbari1*dudi2)
761 fic(i1,j1)=aux1*unit2(i1,j1)+aux2*cbar(i1,j1)
767 SUBROUTINE uexternaldb(LOP,LRESTART,TIME,DTIME,KSTEP,KINC)
769 include
'ABA_PARAM.INC' 770 include
'PARAM_UMAT.INC' 779 CHARACTER(256) FILENAME
780 CHARACTER(256) JOBDIR
783 REAL*8 FIBORI(nelem,4)
786 IF(lop.EQ.0.OR.lop.EQ.4)
THEN 790 filename=jobdir(:lenjobdir)//
'/'//dir1
792 OPEN(15,file=filename)
794 READ(15,*) (fibori(i,j),j=1,4)
806 include
'PARAM_UMAT.INC' 809 DOUBLE PRECISION SFIC(ndi,ndi),F(ndi,ndi),
813 CALL push2(sfic,pkfic,f,det,ndi)
827 include
'PARAM_UMAT.INC' 830 DOUBLE PRECISION AFIC(ndi,ndi),DANISO(3),CBAR(3,3)
831 DOUBLE PRECISION DUDI4,DI4DC(3,3),INV4
832 DOUBLE PRECISION ST0(3,3)
841 afic=two*(dudi4*di4dc)
845 SUBROUTINE stretch(C,B,U,V,NDI)
848 include
'PARAM_UMAT.INC' 851 DOUBLE PRECISION C(ndi,ndi),B(ndi,ndi),U(ndi,ndi),V(ndi,ndi)
852 DOUBLE PRECISION EIGVAL(ndi),OMEGA(ndi),EIGVEC(ndi,ndi)
856 eigval(1) = dsqrt(omega(1))
857 eigval(2) = dsqrt(omega(2))
858 eigval(3) = dsqrt(omega(3))
864 u = matmul(matmul(eigvec,u),transpose(eigvec))
868 eigval(1) = dsqrt(omega(1))
869 eigval(2) = dsqrt(omega(2))
870 eigval(3) = dsqrt(omega(3))
877 v = matmul(matmul(eigvec,v),transpose(eigvec))
887 DOUBLE PRECISION A(ndi,ndi),A_INV(ndi,ndi),DET_A,DET_A_INV
889 det_a = a(1,1)*(a(2,2)*a(3,3) - a(3,2)*a(2,3)) -
890 + a(2,1)*(a(1,2)*a(3,3) - a(3,2)*a(1,3)) +
891 + a(3,1)*(a(1,2)*a(2,3) - a(2,2)*a(1,3))
893 IF (det_a .LE. 0.d0)
THEN 894 WRITE(*,*)
'WARNING: SUBROUTINE MATINV3D:' 895 WRITE(*,*)
'WARNING: DET OF MAT=',det_a
899 det_a_inv = 1.d0/det_a
901 a_inv(1,1) = det_a_inv*(a(2,2)*a(3,3)-a(3,2)*a(2,3))
902 a_inv(1,2) = det_a_inv*(a(3,2)*a(1,3)-a(1,2)*a(3,3))
903 a_inv(1,3) = det_a_inv*(a(1,2)*a(2,3)-a(2,2)*a(1,3))
904 a_inv(2,1) = det_a_inv*(a(3,1)*a(2,3)-a(2,1)*a(3,3))
905 a_inv(2,2) = det_a_inv*(a(1,1)*a(3,3)-a(3,1)*a(1,3))
906 a_inv(2,3) = det_a_inv*(a(2,1)*a(1,3)-a(1,1)*a(2,3))
907 a_inv(3,1) = det_a_inv*(a(2,1)*a(3,2)-a(3,1)*a(2,2))
908 a_inv(3,2) = det_a_inv*(a(3,1)*a(1,2)-a(1,1)*a(3,2))
909 a_inv(3,3) = det_a_inv*(a(1,1)*a(2,2)-a(2,1)*a(1,2))
927 DOUBLE PRECISION D(3),V(3,3),A(3,3),E(3,3)
931 CALL jacobi(e,3,np,d,v,nrot)
939 SUBROUTINE jacobi(A,N,NP,D,V,NROT)
955 include
'PARAM_UMAT.INC' 957 INTEGER IP,IQ,N,NMAX,NP,NROT,I,J
960 DOUBLE PRECISION A(np,np),D(np),V(np,np),B(nmax),Z(nmax),
961 + sm,tresh,g,t,h,theta,s,c,tau
994 sm = sm + dabs(a(ip,iq))
1002 IF (sm.EQ.0.d0)
RETURN 1009 tresh = 0.2d0*sm/n**2
1016 g = 100.d0*dabs(a(ip,iq))
1021 IF ((i.GT.4).AND.(dabs(d(ip))+g.EQ.dabs(d(ip)))
1022 + .AND.(dabs(d(iq))+g.EQ.dabs(d(iq))))
THEN 1024 ELSE IF (dabs(a(ip,iq)).GT.tresh)
THEN 1026 IF (dabs(h)+g.EQ.dabs(h))
THEN 1032 theta = 0.5d0*h/a(ip,iq)
1033 t =1.d0/(dabs(theta)+dsqrt(1.d0+theta**2.d0))
1034 IF (theta.LT.0.d0) t = -t
1036 c = 1.d0/dsqrt(1.d0 + t**2.d0)
1051 a(j,ip) = g - s*(h + g*tau)
1052 a(j,iq) = h + s*(g - h*tau)
1060 a(ip,j) = g - s*(h + g*tau)
1061 a(j,iq) = h + s*(g - h*tau)
1069 a(ip,j) = g - s*(h + g*tau)
1070 a(iq,j) = h + s*(g - h*tau)
1075 v(j,ip) = g - s*(h + g*tau)
1076 v(j,iq) = h + s*(g - h*tau)
1086 b(ip) = b(ip) + z(ip)
1096 WRITE (*,
'(/1X,A/)')
'50 ITERATIONS IN JACOBI SHOULD NEVER HAPPEN' 1102 SUBROUTINE eigsrt(D,V,N,NP)
1114 DOUBLE PRECISION D(np),V(np,np),P
1144 DOUBLE PRECISION A(ndi,ndi),B(ndi,ndi),C(ndi,ndi,ndi,ndi)
1150 c(i,j,k,l)=a(i,j)*b(k,l)
1167 include
'PARAM_UMAT.INC' 1169 INTEGER I1,J1,K1,L1,NDI
1171 DOUBLE PRECISION LT(ndi,ndi),RT(ndi,ndi,ndi,ndi)
1172 DOUBLE PRECISION S(ndi,ndi)
1173 DOUBLE PRECISION AUX
1180 aux=aux+lt(k1,l1)*rt(i1,j1,k1,l1)
1191 include
'PARAM_UMAT.INC' 1194 DOUBLE PRECISION A(ndi,ndi),AA(ndi,ndi)
1195 DOUBLE PRECISION INV1,INV1AA, INV2
1202 inv1aa=inv1aa+aa(i1,i1)
1204 inv2=(one/two)*(inv1*inv1-inv1aa)
1208 SUBROUTINE sigiso(SISO,SFIC,PE,NDI)
1211 include
'PARAM_UMAT.INC' 1214 DOUBLE PRECISION SISO(ndi,ndi),
1215 1 pe(ndi,ndi,ndi,ndi),sfic(ndi,ndi)
1221 SUBROUTINE vol(SSEV,PV,PPV,K,DET)
1224 include
'PARAM_UMAT.INC' 1226 DOUBLE PRECISION SSEV,PV,PPV
1227 DOUBLE PRECISION K,G,DET,AUX
1229 g=(one/four)*(det*det-one-two*log(det))
1233 pv=k*(one/two)*(det-one/det)
1234 aux=k*(one/two)*(one+one/(det*det))
1239 SUBROUTINE push4(SPATIAL,MAT,F,DET,NDI)
1248 include
'PARAM_UMAT.INC' 1250 INTEGER I1,J1,K1,L1,II1,JJ1,KK1,LL1,NDI
1252 DOUBLE PRECISION MAT(ndi,ndi,ndi,ndi),F(ndi,ndi)
1253 DOUBLE PRECISION SPATIAL(ndi,ndi,ndi,ndi)
1254 DOUBLE PRECISION AUX,DET
1265 aux=aux+(det**(-one))*
1266 + f(i1,ii1)*f(j1,jj1)*
1267 + f(k1,kk1)*f(l1,ll1)*mat(ii1,jj1,kk1,ll1)
1272 spatial(i1,j1,k1,l1)=aux
1279 END SUBROUTINE push4 1280 SUBROUTINE pk2iso(PKISO,PKFIC,PL,DET,NDI)
1283 include
'PARAM_UMAT.INC' 1286 DOUBLE PRECISION PKISO(ndi,ndi),
1287 1 pl(ndi,ndi,ndi,ndi),pkfic(ndi,ndi)
1288 DOUBLE PRECISION DET,SCALE2
1292 scale2=det**(-two/three)
1295 pkiso(i1,j1)=scale2*pkiso(i1,j1)
1301 SUBROUTINE onem(A,AA,AAS,NDI)
1309 include
'PARAM_UMAT.INC' 1313 DOUBLE PRECISION A(ndi,ndi),AA(ndi,ndi,ndi,ndi),
1314 1 aas(ndi,ndi,ndi,ndi)
1330 aa(i,j,k,l)=a(i,k)*a(j,l)
1331 aas(i,j,k,l)=(one/two)*(a(i,k)*a(j,l)+a(i,l)*a(j,k))
1339 SUBROUTINE metiso(CMISO,CMFIC,PL,PKISO,PKFIC,C,UNIT2,DET,NDI)
1342 include
'PARAM_UMAT.INC' 1344 INTEGER NDI,I1,J1,K1,L1
1345 DOUBLE PRECISION UNIT2(ndi,ndi),PL(ndi,ndi,ndi,ndi),
1346 1 cmiso(ndi,ndi,ndi,ndi),pkiso(ndi,ndi),
1347 2 cmfic(ndi,ndi,ndi,ndi),pkfic(ndi,ndi),
1348 3 cisoaux(ndi,ndi,ndi,ndi),
1349 4 cisoaux1(ndi,ndi,ndi,ndi),c(ndi,ndi),
1350 5 plt(ndi,ndi,ndi,ndi),cinv(ndi,ndi),
1351 6 pll(ndi,ndi,ndi,ndi)
1352 DOUBLE PRECISION TRFIC,XX,YY,ZZ,DET,AUX,AUX1
1364 plt(i1,j1,k1,l1)=pl(k1,l1,i1,j1)
1373 aux=det**(-two/three)
1376 trfic=trfic+aux*pkfic(i1,i1)*c(i1,i1)
1383 xx=aux1*cisoaux(i1,j1,k1,l1)
1384 pll(i1,j1,k1,l1)=(one/two)*(cinv(i1,k1)*cinv(j1,l1)+
1385 1 cinv(i1,l1)*cinv(j1,k1))-
1386 2 (one/three)*cinv(i1,j1)*cinv(k1,l1)
1387 yy=trfic*pll(i1,j1,k1,l1)
1388 zz=pkiso(i1,j1)*cinv(k1,l1)+cinv(i1,j1)*pkiso(k1,l1)
1390 cmiso(i1,j1,k1,l1)=xx+(two/three)*yy-(two/three)*zz
1398 SUBROUTINE setiso(CISO,CFIC,PE,SISO,SFIC,UNIT2,NDI)
1401 include
'PARAM_UMAT.INC' 1403 INTEGER NDI,I1,J1,K1,L1
1404 DOUBLE PRECISION UNIT2(ndi,ndi),PE(ndi,ndi,ndi,ndi),
1405 1 ciso(ndi,ndi,ndi,ndi),siso(ndi,ndi),
1406 2 cfic(ndi,ndi,ndi,ndi),sfic(ndi,ndi),
1407 3 cisoaux(ndi,ndi,ndi,ndi),
1408 4 cisoaux1(ndi,ndi,ndi,ndi)
1409 DOUBLE PRECISION TRFIC,XX,YY,ZZ
1419 trfic=trfic+sfic(i1,i1)
1426 xx=cisoaux(i1,j1,k1,l1)
1427 yy=trfic*pe(i1,j1,k1,l1)
1428 zz=siso(i1,j1)*unit2(k1,l1)+unit2(i1,j1)*siso(k1,l1)
1430 ciso(i1,j1,k1,l1)=xx+(two/three)*yy-(two/three)*zz
1438 SUBROUTINE push2(SIG,PK,F,DET,NDI)
1447 include
'PARAM_UMAT.INC' 1449 INTEGER I1,J1,II1,JJ1,NDI
1450 DOUBLE PRECISION PK(ndi,ndi),F(ndi,ndi)
1451 DOUBLE PRECISION SIG(ndi,ndi)
1452 DOUBLE PRECISION AUX,DET
1459 aux=aux+(det**(-one))*f(i1,ii1)*f(j1,jj1)*pk(ii1,jj1)
1467 END SUBROUTINE push2 1471 include
'PARAM_UMAT.INC' 1474 DOUBLE PRECISION F(ndi,ndi),C(ndi,ndi),B(ndi,ndi)
1476 c=matmul(transpose(f),f)
1478 b=matmul(f,transpose(f))
1481 SUBROUTINE fslip(F,FBAR,DET,NDI)
1484 include
'PARAM_UMAT.INC' 1487 DOUBLE PRECISION F(ndi,ndi),FBAR(ndi,ndi)
1488 DOUBLE PRECISION DET,SCALE1
1491 det = f(1,1) * f(2,2) * f(3,3)
1492 1 - f(1,2) * f(2,1) * f(3,3)
1494 IF (ndi .EQ. 3)
THEN 1495 det = det + f(1,2) * f(2,3) * f(3,1)
1496 1 + f(1,3) * f(3,2) * f(2,1)
1497 2 - f(1,3) * f(3,1) * f(2,2)
1498 3 - f(2,3) * f(3,2) * f(1,1)
1501 scale1=det**(-one /three)
1505 fbar(i1,j1)=scale1*f(i1,j1)
1510 END SUBROUTINE fslip 1515 include
'PARAM_UMAT.INC' 1518 DOUBLE PRECISION CMANISOMATFIC(ndi,ndi,ndi,ndi),UNIT2(ndi,ndi),
1519 1 m0(ndi,ndi),daniso(3),det
1520 DOUBLE PRECISION CINV4(ndi,ndi,ndi,ndi),CINV14(ndi,ndi,ndi,ndi)
1521 DOUBLE PRECISION D2UDI4,D2UDI1DI4
1522 DOUBLE PRECISION IMM(ndi,ndi,ndi,ndi),MMI(ndi,ndi,ndi,ndi),
1523 1 mm0(ndi,ndi,ndi,ndi)
1539 cinv4(i,j,k,l)=d2udi4*mm0(i,j,k,l)
1540 cinv14(i,j,k,l)=d2udi1di4*(imm(i,j,k,l)+mmi(i,j,k,l))
1541 cmanisomatfic(i,j,k,l)=four*(cinv4(i,j,k,l)+cinv14(i,j,k,l))
1549 SUBROUTINE sdvwrite(DET,LAMBDA,STATEV)
1552 include
'PARAM_UMAT.INC' 1554 DOUBLE PRECISION STATEV(nsdv),DET,LAMBDA
1566 include
'PARAM_UMAT.INC' 1569 DOUBLE PRECISION DFGRD(ndi,ndi)
1582 SUBROUTINE fibdir(FIB,ST0,ST,NE,NOEL,NDI,VORIF,VD,DISTGR,DFGRD1)
1585 include
'PARAM_UMAT.INC' 1587 INTEGER NDI, NE, NOEL,INOEL,I,J,I1,J1
1588 DOUBLE PRECISION SUM1, DFGRD1(3,3), DNORM
1589 DOUBLE PRECISION VORIF(3),ST(3,3),VD(3),ST0(3,3),DISTGR(3,3)
1590 DOUBLE PRECISION FIB(ne,4)
1596 IF(noel.EQ.int(fib(i,1)))
THEN 1602 dnorm=dsqrt(fib(inoel,2)*fib(inoel,2)+
1603 1 fib(inoel,3)*fib(inoel,3)+
1604 2 fib(inoel,4)*fib(inoel,4))
1611 vorif(i1)=fib(inoel,j1)/dnorm
1618 sum1=sum1+dfgrd1(i,j)*vorif(j)
1624 dnorm=dsqrt(vd(1)*vd(1)+
1634 st0(i,j)=vorif(i)*vorif(j)
1639 st=matmul(st0,transpose(distgr))
1640 st=matmul(distgr,st)
1645 SUBROUTINE indexx(STRESS,DDSDDE,SIG,TNG,NTENS,NDI)
1648 include
'PARAM_UMAT.INC' 1650 INTEGER II1(6),II2(6),NTENS,NDI,I1,J1
1651 DOUBLE PRECISION STRESS(ntens),DDSDDE(ntens,ntens)
1652 DOUBLE PRECISION SIG(ndi,ndi),TNG(ndi,ndi,ndi,ndi)
1653 DOUBLE PRECISION PP1,PP2
1671 stress(i1)=sig(ii1(i1),ii2(i1))
1674 pp1=tng(ii1(i1),ii2(i1),ii1(j1),ii2(j1))
1675 pp2=tng(ii1(i1),ii2(i1),ii2(j1),ii1(j1))
1676 ddsdde(i1,j1)=(one/two)*(pp1+pp2)
1686 include
'PARAM_UMAT.INC' 1689 DOUBLE PRECISION F(ndi,ndi),R(ndi,ndi),U(ndi,ndi),UINV(ndi,ndi)
1697 1 diso,unit2,unit4,det,ndi)
1700 include
'PARAM_UMAT.INC' 1702 INTEGER NDI,I1,J1,K1,L1
1703 DOUBLE PRECISION CMISOMATFIC(ndi,ndi,ndi,ndi),UNIT2(ndi,ndi),
1704 1 cbar(ndi,ndi),diso(5),
1705 2 unit4(ndi,ndi,ndi,ndi)
1706 DOUBLE PRECISION CBARI1,CBARI2
1707 DOUBLE PRECISION DUDI1,DUDI2,D2UD2I1,D2UD2I2,D2UDI1I2
1708 DOUBLE PRECISION AUX,AUX1,AUX2,AUX3,AUX4,DET
1709 DOUBLE PRECISION UIJ,UKL,CIJ,CKL
1717 aux1=four*(d2ud2i1+two*cbari1*d2udi1i2+
1718 1 dudi2+cbari1*cbari1*d2ud2i2)
1719 aux2=-four*(d2udi1i2+cbari1*d2ud2i2)
1732 1 aux2*(uij*ckl+cij*ukl)+aux3*cij*ckl+
1733 3 aux4*unit4(i1,j1,k1,l1)
1734 cmisomatfic(i1,j1,k1,l1)=aux
1742 SUBROUTINE projlag(C,AA,PL,NDI)
1752 include
'PARAM_UMAT.INC' 1756 DOUBLE PRECISION CINV(ndi,ndi),AA(ndi,ndi,ndi,ndi),
1757 1 pl(ndi,ndi,ndi,ndi),c(ndi,ndi)
1765 pl(i,j,k,l)=aa(i,j,k,l)-(one/three)*(cinv(i,j)*c(k,l))
1773 SUBROUTINE csisomatfic(CISOMATFIC,CMISOMATFIC,DISTGR,DET,NDI)
1776 include
'PARAM_UMAT.INC' 1779 DOUBLE PRECISION CMISOMATFIC(ndi,ndi),DISTGR(ndi,ndi),
1780 1 cisomatfic(ndi,ndi,ndi,ndi)
1781 DOUBLE PRECISION DET
1783 CALL push4(cisomatfic,cmisomatfic,distgr,det,ndi)
subroutine pull4(MAT, SPATIAL, FINV, DET, NDI)
subroutine uexternaldb(LOP, LRESTART, TIME, DTIME, KSTEP, KINC)
subroutine sdvread(STATEV)
subroutine anisomat(SSEANISO, DANISO, DISO, K1, K2, KDISP, I4, I1)
subroutine initialize(STATEV)
subroutine contraction44(S, LT, RT, NDI)
subroutine push2(SIG, PK, F, DET, NDI)
subroutine sdvwrite(DET, LAMBDA, STATEV)
subroutine setiso(CISO, CFIC, PE, SISO, SFIC, UNIT2, NDI)
subroutine cmatanisomatfic(CMANISOMATFIC, M0, DANISO, UNIT2, DET, NDI)
subroutine jacobi(A, N, NP, D, V, NROT)
subroutine stretch(C, B, U, V, NDI)
subroutine matinv3d(A, A_INV, NDI)
subroutine onem(A, AA, AAS, NDI)
subroutine fibdir(FIB, ST0, ST, NE, NOEL, NDI, VORIF, VD, DISTGR, DFGRD1)
subroutine push4(SPATIAL, MAT, F, DET, NDI)
subroutine metvol(CVOL, C, PV, PPV, DET, NDI)
subroutine umat(STRESS, STATEV, DDSDDE, SSE, SPD, SCD, RPL, DDSDDT, DRPLDE, DRPLDT, STRAN, DSTRAN, TIME, DTIME, TEMP, DTEMP, PREDEF, DPRED, CMNAME, NDI, NSHR, NTENS, NSTATEV, PROPS, NPROPS, COORDS, DROT, PNEWDT, CELENT, DFGRD0, DFGRD1, NOEL, NPT, LAYER, KSPT, KSTEP, KINC)
Record of revisions: | Date Programmer Description of change | ==== ========== =====================...
subroutine csisomatfic(CISOMATFIC, CMISOMATFIC, DISTGR, DET, NDI)
subroutine sigisomatfic(SFIC, PKFIC, F, DET, NDI)
subroutine invariants(A, INV1, INV2, NDI)
subroutine sigvol(SVOL, PV, UNIT2, NDI)
subroutine projeul(A, AA, PE, NDI)
subroutine getoutdir(OUTDIR, LENOUTDIR)
subroutine contraction42(S, LT, RT, NDI)
subroutine indexx(STRESS, DDSDDE, SIG, TNG, NTENS, NDI)
subroutine pk2iso(PKISO, PKFIC, PL, DET, NDI)
subroutine fslip(F, FBAR, DET, NDI)
subroutine setjr(CJR, SIGMA, UNIT2, NDI)
subroutine pull2(PK, SIG, FINV, DET, NDI)
subroutine pinvariants(A, INV4, NDI, ST, LAMBDA, BARLAMBDA, DET)
subroutine cmatisomatfic(CMISOMATFIC, CBAR, CBARI1, CBARI2, DISO, UNIT2, UNIT4, DET, NDI)
subroutine isomat(SSEISO, DISO, C10, C01, CBARI1, CBARI2)
subroutine spectral(A, D, V)
subroutine tensorprod2(A, B, C, NDI)
subroutine eigsrt(D, V, N, NP)
subroutine pk2anisomatfic(AFIC, DANISO, CBAR, INV4, ST0, NDI)
subroutine contraction24(S, LT, RT, NDI)
subroutine projlag(C, AA, PL, NDI)
subroutine rotation(F, R, U, NDI)
subroutine metiso(CMISO, CMFIC, PL, PKISO, PKFIC, C, UNIT2, DET, NDI)
subroutine resetdfgrd(DFGRD, NDI)
subroutine vol(SSEV, PV, PPV, K, DET)
subroutine pk2vol(PKVOL, PV, C, NDI)
subroutine pk2isomatfic(FIC, DISO, CBAR, CBARI1, UNIT2, NDI)
subroutine sigiso(SISO, SFIC, PE, NDI)
subroutine setvol(CVOL, PV, PPV, UNIT2, UNIT4S, NDI)