把子程序贴出来吧,急待高手提点意见,是不是因为我用的是应力判据啊,我看有用应变判据的,我主要是模仿论文里面的,人家用的是应力的,。。而且我用单个单元测试了,可以发生折减的,具体的测试,我晚籼时候发过来,
subroutine vumat( c Read only - 1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal, 2 stepTime, totalTime, dt, cmname, coordMp, charLength, 3 props, density, strainInc, relSpinInc, 4 tempOld, stretchOld, defgradOld, fieldOld, 5 stressOld, stateOld, enerInternOld, enerInelasOld, 6 tempNew, stretchNew, defgradNew, fieldNew, c Write only - 7 stressNew, stateNew, enerInternNew, enerInelasNew ) c include 'vaba_param.inc' c c 3D Orthotropic Elasticity with Hashin 3d Failure criterion c c The state variables are stored as: c state(*,1) = material point status c state(*,2:7) = damping stresses c c User defined material properties are stored as c * First line: c props(1) --> Young's modulus in 1-direction, E1 c props(2) --> Young's modulus in 2-direction, E2 c props(3) --> Young's modulus in 3-direction, E3 c props(4) --> Poisson's ratio, nu12 c props(5) --> Poisson's ratio, nu13 c props(6) --> Poisson's ratio, nu23 c props(7) --> Shear modulus, G12 c props(8) --> Shear modulus, G13 c c * Second line: c props(9) --> Shear modulus, G23 c props(10) --> beta damping parameter c props(11) --> "not used" c props(12) --> "not used" c props(13) --> "not used" c props(14) --> "not used" c props(15) --> "not used" c props(16) --> "not used" c c * Third line: c props(17) --> Ultimate tens stress in 1-direction, sigu1t c props(18) --> Ultimate comp stress in 1-direction, sigu1c c props(19) --> Ultimate tens stress in 2-direction, sigu2t c props(20) --> Ultimate comp stress in 2-direction, sigu2c c props(21) --> Ultimate tens stress in 2-direction, sigu3t c props(22) --> Ultimate comp stress in 2-direction, sigu3c c props(23) --> "not used" c props(24) --> "not used" c c * Fourth line: c props(25) --> Ultimate shear stress, sigu12 c props(26) --> Ultimate shear stress, sigu13 c props(27) --> Ultimate shear stress, sigu23 c props(28) --> "not used" c props(29) --> "not used" c props(30) --> "not used" c props(31) --> "not used" c props(32) --> "not used" c dimension props(nprops), density(nblock), 1 coordMp(nblock,*), 2 charLength(*), strainInc(nblock,ndir+nshr), 3 relSpinInc(nblock,nshr), tempOld(nblock), 4 stretchOld(nblock,ndir+nshr), defgradOld(nblock,ndir+nshr+nshr), 5 fieldOld(nblock,nfieldv), stressOld(nblock,ndir+nshr), 6 stateOld(nblock,nstatev), enerInternOld(nblock), 7 enerInelasOld(nblock), tempNew(*), 8 stretchNew(nblock,ndir+nshr), defgradNew(nblock,ndir+nshr+nshr), 9 fieldNew(nblock,nfieldv), stressNew(nblock,ndir+nshr), 1 stateNew(nblock,nstatev), 2 enerInternNew(nblock), enerInelasNew(nblock) * character*80 cmname * parameter( zero = 0.d0, one = 1.d0, two = 2.d0, half = 0.5d0 ) real * dft,dfc,dmt,dmc,ds,gg * parameter( * i_svd_DmgFiberT = 1, * i_svd_DmgFiberC = 2, * i_svd_DmgMatrixT = 3, * i_svd_DmgMatrixC = 4, * i_svd_DmgDels = 5, * i_svd_Strain = 6, c * i_svd_StrainXx = 6, c * i_svd_StrainYy = 7, c * i_svd_StrainZz = 8, c * i_svd_StrainXy = 9, c * i_svd_StrainYz = 10, c * i_svd_StrainZx = 11, * n_svd_required = 11 ) * * Structure of property array parameter ( * i_pro_E1 = 1, * i_pro_E2 = 2, * i_pro_E3 = 3, * i_pro_nu12 = 4, * i_pro_nu13 = 5, * i_pro_nu23 = 6, * i_pro_G12 = 7, * i_pro_G13 = 8, * i_pro_G23 = 9, * * * i_pro_sigu1t = 17, * i_pro_sigu1c = 18, * i_pro_sigu2t = 19, * i_pro_sigu2c = 20, * i_pro_sigu3t = 21, * i_pro_sigu3c = 22, * i_pro_sigu12 = 25, * i_pro_sigu13 = 26, * i_pro_sigu23 = 27 ) * Read material properties * E1 = props(i_pro_E1) E2 = props(i_pro_E2) E3 = props(i_pro_E3) xnu12 = props(i_pro_nu12) xnu13 = props(i_pro_nu13) xnu23 = props(i_pro_nu23) G12 = props(i_pro_G12) G13 = props(i_pro_G13) G23 = props(i_pro_G23) * xnu21 = xnu12 * E2 / E1 xnu31 = xnu13 * E3 / E1 xnu32 = xnu23 * E3 / E2 * * * f1t = props(i_pro_sigu1t) f1c = props(i_pro_sigu1c) f2t = props(i_pro_sigu2t) f2c = props(i_pro_sigu2c) f3t = props(i_pro_sigu3t) f3c = props(i_pro_sigu3c) f12 = props(i_pro_sigu12) f13 = props(i_pro_sigu13) f23 = props(i_pro_sigu23) C write(*,*)'goog',f1t,f1c,f2t,f2c,f3t,f3c,f12, C * f23,E1,E2,E3,xnu12,xnu13,xnu23,G12,G23,G13 C-------------------------------------------------------------------- do 100 k=1,nblock stateNew(k,6)=stateOld(k,6)+strainInc(k,1) stateNew(k,7)=stateOld(k,7)+strainInc(k,2) stateNew(k,8)=stateOld(k,8)+strainInc(k,3) stateNew(k,9)=stateOld(k,9)+strainInc(k,4) stateNew(k,10)=stateOld(k,10)+strainInc(k,5) stateNew(k,11)=stateOld(k,11)+strainInc(k,6) C write(*,*)'strainfirst',stateNew C------------------------------------------------- stateNew(k,1)=stateOld(k,1) 纤维拉伸 stateNew(k,2)=stateOld(k,2)纤维压缩 stateNew(k,3)=stateOld(k,3)基体拉伸 stateNew(k,4)=stateOld(k,4)基体压缩 stateNew(k,5)=stateOld(k,5)基线剪切 C------------------------------------------------ dft=zero dfc=zero dmt=zero dmc=zero ds=zero C--------------------------------------------------- if (stateNew(k,1) .EQ. one) then E1=E1*0.07 E2=E2*0.07 G12=G12*0.07 G13=G13*0.07 end if if (stateNew(k,2) .EQ. one) then E1=E1*0.14 E2=E2*0.14 G12=G12*0.14 G13=G13*0.14 end if if (stateNew(k,3) .EQ. one) then E2=E2*0.2 G12=G12*0.2 G23=G23*0.2 end if if (stateNew(k,4) .EQ. one) then E2=E2*0.4 G12=G12*0.4 G23=G23*0.4 end if if (stateNew(k,5) .EQ. one) then G12=G12*zero G13=G13*zero end if C write(*,*)'goog',f1t,f1c,f2t,f2c,f3t,f3c,f12, C * f23,E1,E2,E3,xnu12,xnu13,xnu23,G12,G23,G13 * Compute terms of stiffness matrix gg = one / ( one - xnu12*xnu21 - xnu23*xnu32 - xnu31*xnu13 * - two*xnu21*xnu32*xnu13 ) C11 = E1 * ( one - xnu23*xnu32 ) * gg C22 = E2 * ( one - xnu13*xnu31 ) * gg C33 = E3 * ( one - xnu12*xnu21 ) * gg C12 = E2 * ( xnu12 + xnu32*xnu13 ) * gg C13 = E3 * ( xnu13 + xnu12*xnu23 ) * gg C23 = E3 * ( xnu23 + xnu21*xnu31 ) * gg C write(*,*)'gg',gg,C11,C22,C33,C12,C13,C23 C--------------------------------------------------------------------- stressNew(k,1)=C11*stateNew(k,6)+C12*stateNew(k,7) * +C13*stateNew(k,8) stressNew(k,2)=C12*stateNew(k,6)+C22*stateNew(k,7) * +C23*stateNew(k,8) stressNew(k,3)=C13*stateNew(k,6)+C23*stateNew(k,7) * +C33*stateNew(k,8) stressNew(k,4)=G12*two*stateNew(k,9) stressNew(k,5)=G23*two*stateNew(k,10) stressNew(k,6)=G13*two*stateNew(k,11) C write(*,*)'stress',stressNew C--------------------------------------------------------------------- if ((stateNew(k,1) .LT. one) .or. (stateNew(k,2) .LT. one)) then if (stressNew(k,1) .GE. zero) then dft=(stressNew(k,1)/f1t)**two else dfc=(stressNew(k,1)/f1c)**two end if end if if ((stateNew(k,3) .LT. one) .or. (stateNew(k,4) .LT. one)) then if (stressNew(k,2) .GE. zero) then dmt=(stressNew(k,2)/f2t)**two+(stressNew(k,4)/f12)**two * +(stressNew(k,5)/f23)**two else dmc=(stressNew(k,2)/(two*f12))**two * +(stressNew(k,2)/f2c)*((f2c/(two*f12))**2-one) * +(stressNew(k,4)/f12)**two+(stressNew(k,5)/f23)**two end if end if if ((stateNew(k,5) .LT. one)) then if (stressNew(k,1) .GE. zero) then ds=(stressNew(k,4)/f12)**two+(stressNew(k,6)/f13)**two else ds=(stressNew(k,1)/f1c)**two * +(stressNew(k,4)/f12)**two+(stressNew(k,6)/f13)**two end if end if C write(*,*)'df',dft,dfc,dmt,dmc,ds C------------------------------------------------------------------ if (dft .GE. one) then stateNew(k,1)= one end if if (dfc .GE. one) then stateNew(k,2)= one end if if (dmt .GE. one) then stateNew(k,3)= one end if if (dmc .GE. one) then stateNew(k,4)= one end if if (ds .GE. one) then stateNew(k,5)= one end if C write(*,*)'statenew',statenew 100 continue return end
|