- 积分
- 0
- 注册时间
- 2009-10-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2009-11-9 21:39:14
|
显示全部楼层
来自 陕西西安
谢谢Shawn2008大侠啦!我再改一下试试。不过我不太明白的是在ABAQUS的自带例子中,Isotropic Kinematic Hardening,用于plane strain中,也没有定义transverse shear stiffness,但是却能用在我的模型计算中,这是为什么呢?下面就是我的程序,好多天还是没有调好,还请大侠一针见血,指点迷津呀......
subroutine vumat(
C Read only (unmodifiable)variables -
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 (modifiable) variables -
7 stressNew,stateNew,enerInternNew,enerInelasNew)
include 'vaba_param.inc'
C
dimension props(nprops), density(nblock), coordMp(nblock,*),
1 charLength(nblock), strainInc(nblock,ndir+nshr),
2 relSpinInc(nblock,nshr), tempOld(nblock),
3 stretchOld(nblock,ndir+nshr),
4 defgradOld(nblock,ndir+nshr+nshr),
5 fieldOld(nblock,nfieldv), stressOld(nblock,ndir+nshr),
6 stateOld(nblock,nstatev), enerInternOld(nblock),
7 enerInelasOld(nblock), tempNew(nblock),
8 stretchNew(nblock,ndir+nshr),
8 defgradNew(nblock,ndir+nshr+nshr),fieldNew(nblock,nfieldv),
9 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),
1 enerInternNew(nblock), enerInelasNew(nblock)
C
character*80 cmname
C
parameter(zero=0.,one=1.,two=2.,three=3.,EI=70.,A=15.,ES=55.,
1 third=one/three,half=.5,twoThirds=two/three,
2 threeHalfs=1.5)
C
xnu=props(1)
hn =props(2)
hk =props(3)
e =props(4)
C
if(stateold(i,1).le.0.006)then
e=EI-A*stateold(i,1)/0.006
HLMT=e*xnu/(one+xnu)/(one-two*xnu)
HMU=e/two/(one+xnu)
thremu=three*HMU
stt=sqrt(threeHalfs)
stt1=sqrt(twoThirds)
stwo=sqrt(two)
else if(stateold(i,1).gt.0.006)then
e=ES
HLMT=e*xnu/(one+xnu)/(one-two*xnu)
HMU=e/two/(one+xnu)
thremu=three*HMU
stt=sqrt(threeHalfs)
stt1=sqrt(twoThirds)
stwo=sqrt(two)
endif
C
do 100 i = 1,nblock
C compute the tiji strain
dstrain=strainInc(i,1)+strainInc(i,2)+strainInc(i,3)
C compute the trial stress
Tstress1=stressOld(i,1)+HLMT*dstrain+two*HMU*strainInc(i,1)
Tstress2=stressOld(i,2)+HLMT*dstrain+two*HMU*strainInc(i,2)
Tstress3=stressOld(i,3)+HLMT*dstrain+two*HMU*strainInc(i,3)
Tstress4=stressOld(i,4)+two*HMU*strainInc(i,4)
C compute the hydraumatic stress
Hstress=third*(Tstress1+Tstress2+Tstress3)
C compute the bias stress
PTstress1=Tstress1-Hstress
PTstress2=Tstress2-Hstress
PTstress3=Tstress3-Hstress
PTstress4=Tstress4
C computer the longth of the bias stress
EPTstress=sqrt(PTstress1**2+PTstress2**2+PTstress3**2+
1 two*PTstress4**2)
C computer the equal stress
EQstress=stt*EPTstress
C computer the sequent yeild stress
HY=hk*stateold(i,1)**hn
C computer the square longth of the sequent yeild stress
HKF=HY**2
C Check for yield by determining the factor for plasticity,
C zero for elastic, one for yield
facyld = zero
if( EQstress**2-HKF.ge.zero ) facyld = one
C
C Add a protective addition factor to prevent a divide by zero
C when dsmag is zero. If dsmag is zero, we will not have exceeded
C the yield stress and facyld will be zero.
EPTstress=EPTstress+(facyld-zero)
C computer the hard
H=hn*hk*stateold(i,1)**(hn-1)
C computer the unit normal direction of the yeild surface
Q1=PTstress1/EPTstress
Q2=PTstress2/EPTstress
Q3=PTstress3/EPTstress
Q4=stwo*PTstress4/EPTstress
C compute the dagama
term=one/(two*HMU*(one+H/thremu))
dagama=facyld*term*(EPTstress-stt1*HY)
C update the stress
stressNew(i,1)=Tstress1-two*HMU*dagama*Q1
stressNew(i,2)=Tstress2-two*HMU*dagama*Q2
stressNew(i,3)=Tstress3-two*HMU*dagama*Q3
stressNew(i,4)=Tstress4-two*HMU*dagama*Q4
C update the state
stateNew(i,1)=stateold(i,1)+stt1*dagama
c==============================================
C Update the specific internal energy -
stressPower=half*(
1 (stressOld(i,1)+stressNew(i,1))*strainInc(i,1)
1 +(stressOld(i,2)+stressNew(i,2))*strainInc(i,2)
1 +(stressOld(i,3)+stressNew(i,3))*strainInc(i,3)
1 +two*(stressOld(i,4)+stressNew(i,4))*strainInc(i,4))
C
enerInternNew(i)=enerInternOld(i)
1 +stressPower/density(i)
C
C Update the dissipated inelastic specific energy -
smean=third*(stressNew(i,1)+stressNew(i,2)
1 +stressNew(i,3))
equivStress=sqrt(threeHalfs*
1 ((stressNew(i,1)-smean)**2
1 +(stressNew(i,2)-smean)**2
1 +(stressNew(i,3)-smean)**2
1 +two*stressNew(i,4)**2))
C computer the operator
deqps=stt1*dagama
plasticWorkInc=equivStress*deqps
enerInelasNew(i)=enerInelasOld(i)
1 +plasticWorkInc/density(i)
C
100 continue
return
end |
|