umat二次开发超弹性本构

合集下载

各向异性屈服准则的UMAT子程序二次开发研究

各向异性屈服准则的UMAT子程序二次开发研究

各向异性屈服准则的UMAT子程序二次开发研究乔顺成;吴建军;展学鹏【摘要】通过ABAQUS提供的UMAT子程序二次开发接口,结合完全隐式向后Euler图形返回算法,用Fortran语言编程,将Yld2004-18p各向异性屈服准则本构模型嵌入ABAQUS软件,并提出了一个通用的、柔性的本构模型二次开发结构模式.将Yld2004-18p屈服准则退化到Mises各向同性屈服准则,用于实例有限元分析,计算结果与ABAQUS自带的Mises屈服准则计算结果做比较,验证了二次开发过程的正确性,为后续嵌入更高级、更强健、更特殊的屈服准则提供研究思路和方法,使之用于精密塑性有限元分析.【期刊名称】《锻压装备与制造技术》【年(卷),期】2018(053)004【总页数】9页(P89-97)【关键词】UMAT子程序;各向异性;屈服准则;本构模型;二次开发【作者】乔顺成;吴建军;展学鹏【作者单位】中航工业西安飞机工业集团有限责任公司,陕西西安710072;西北工业大学机电学院,陕西西安710072;西北工业大学机电学院,陕西西安710072【正文语种】中文【中图分类】TP391.77ABAQUS以其强大的非线性迭代计算和前后处理功能而广泛应用于材料弹塑性有限元分析,它是现阶段在各个工程领域广泛使用的大型通用有限元软件之一。

ABAQUS[1]有大量的单元库和求解模型供用户使用,而且用户也能够通过这些模型求解绝大多数问题。

但是实际问题是相当复杂的,ABAQUS不可能直接处理所有可能的问题[2-4],所以,有必要给用户提供二次开发的接口来解决实际中出现的新问题。

在用户自定义材料(UMAT即 User-defined Material Mechanical Behavior)研究中,很多学者通过UMAT子程序二次开发,将新的本构模型用于实际问题的有限元分析。

例如:李平[5]等通过数值分析模拟了普通碳钢连续热轧的过程,将率相关的各向同性硬化热变形本构模型通过UMAT子程序用于有限元仿真,分析了轧制过程中的温度和应力、应变之间的耦合关系。

umat二次开发超弹性本构()

umat二次开发超弹性本构()

APPENDIXNeo-Hookean Hyperelatic Material User SubroutineThis program is based on the derivation of hyperelastic material constitutive model inSection 4.4. A stress and strain relationship was derived from the neo-Hookean hyperelastic material constitutive model that is normally represented as the strain energywith strain invariants.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 )Cinclude 'vaba_param.inc'Cdimension 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),9 fieldNew(nblock,nfieldv),1 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),2 enerInternNew(nblock), enerInelasNew(nblock)Ccharacter*80 cmnameCif (cmname(1:6) .eq. 'VUMAT0') thencall VUMAT0(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,117else if (cmname(1:6) .eq. 'VUMAT1') thencall VUMAT1(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,7 stressNew, stateNew, enerInternNew, enerInelasNew)end ifendCsubroutine vumat0 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -Cinclude 'vaba_param.inc'Cdimension coordMp(nblock,*), charLength(nblock), props(nprops),1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMises, maxShear,1 midStrain, maxPrincipalStrain118Cintv(1) = ndirintv(2) = nshrCif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusCif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in local axis)Cdet=stretchNew(k, 3)*1191 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two) scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1) stateNew(k,2) = stateOld(k,2) + strainInc(k,2) stateNew(k,3) = stateOld(k,3) + strainInc(k,3) stateNew(k,4) = stateOld(k,4) + strainInc(k,4) CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+ 1201 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C use 3/2 will get 2 (int) !CC write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4) CC Failure CriteriaCmidStrain = stateNew(k,1) + stateNew(k,2)maxShear = sqrt((stateNew(k,1) - midStrain)**2. +1 stateNew(k,4)**2.)if (midStrain .GE. 0.) thenmaxPrincipalStrain = midStrain + maxShearelsemaxPrincipalStrain = maxShear - midStrainend ifif (vonMises .GE. 10.8565e6) thenstateNew(k,5) = 0end ifend doend ifreturnendCsubroutine vumat1 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,121* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -* stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'dimension coordMp(nblock,*), charLength(nblock), props(nprops), 1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMisesCintv(1) = ndirintv(2) = nshrif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10122twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3) stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in local axis)Cdet=stretchNew(k, 3)*1 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two) scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)123EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1) stateNew(k,2) = stateOld(k,2) + strainInc(k,2) stateNew(k,3) = stateOld(k,3) + strainInc(k,3) stateNew(k,4) = stateOld(k,4) + strainInc(k,4)CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+1 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4)124 end do end if return end。

ABAQUS-二次开发资料-UMAT

ABAQUS-二次开发资料-UMAT

各个楼层及内容索引2-------------------------------------什么是UMAT3-------------------------------------UMAT功能简介4-------------------------------------UMAT开始的变量声明5-------------------------------------UMAT中各个变量的详细解释6-------------------------------------关于沙漏和横向剪切刚度7-------------------------------------UMAT流程和参数表格实例展示8-------------------------------------FORTRAN语言中的接口程序Interface9-------------------------------------关于UMAT是否可以用Fortran90编写的问题10-17--------------------------------Fortran77的一些有用的知识简介20-25\30-32-----------------------弹塑性力学相关知识简介34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载38-------------------------------------JOhn-cook模型本构简介图40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢迎大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带""部分,还望各位大师\同仁指教]1什么是UMAT1.1UMAT功能简介!!![-摘自庄茁老师的书UMAT子程序具有强大的功能,使用UMAT子程序:(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序功能。

ABAQUS材料用户子程序UMAT学习报告

ABAQUS材料用户子程序UMAT学习报告

具有友好的用户 界面和易用的操 作流程,方便用 户进行学习和使 用
UMAT子程序简介
UMAT子程序是 ABAQUS材料用户 自定义模块,允许 用户根据实际需求 编写材料本构模型。
UMAT子程序采用C 语言编写,用户需要 具备一定的编程基础。
UMAT子程序可以实 现多种材料本构模型 ,如弹性、塑性、蠕 变等。
UMAT子程序实现细节
编程语言和接口
A B A Q U S 材 料 用 户 子 程 序 U M AT 使 用Fortran语言编写
U M AT 子 程 序 中 可 以 定 义 材 料 属 性 、 本构关系等
添加标题
添加标题
添加标题
添加标题
U M AT 子 程 序 通 过 A B A Q U S 提 供 的 接口与主程序进行交互
不足:使用门槛较高,需要用户具备一定的编程基础
未来展望:期待更多的用户参与开发,不断完善子程序功能
总结:UMAT子程序为用户提供了强大的材料模型描述能力,但使用过程中需要注意其局 限性
在ABAQUS中的未来发展方向
开发更高效的材料模型 集成人工智能和机器学习技术 增强与CAD软件的集成 扩展对多物理场模拟的支持
适用于金属材料
适用于复合材料
适用于橡胶材料
适用于陶瓷材料
参数的合理选择
参数选择需符合实际物理模型 参数选择需考虑材料特性 参数选择需经过实验验证 参数选择需注意收敛性和稳定性
收敛性和稳定性问题
收 敛 性 : U M AT 子 程 序 在 迭 代 过 程 中应满足收敛条件,否则可能导致 计算失败或结果不准确。
边界条件和初始条件
边界条件:描述模型在边界上的行为,如位移、速度等 初始条件:描述模型在初始时刻的状态,如温度、压力等

形状记忆合金本构的VUMAT二次开发

形状记忆合金本构的VUMAT二次开发

a a b
(1-3a)
卸载时:
σ b E A ε-ε b Ε Α εd Ε A ε εd Ε ε Α
其中: εc b a d
c b d c d
止应变; d 为再次按奥氏体弹性模量
卸载的开始应变。
加载段分为两段:
段 d-o 段,则再加载的第一加 载段和第二加载段的分界点 将是原来的 a 点。 双旗型-SMA 超弹性本构模型 为压缩和拉伸的本构关系对称的 形式,如图 1-1 所示。

a
ΕΑ ΕΑ
PR OP S 物 理 性 系 系 1 2 3 4 5 6 7 8

-T


-T
a d
-T -T

-C


-C
a
-C
d
-C
A
ΕΑ
b

注:T -拉伸,C-压缩
c
d
A
a
SMA-VUMA T 子程序的主要编制思路, 如下:
εb
o εd
c
1) 以应变是否大于零,来区分拉伸和 压缩两种情况。 2) 以应变增量是否大于零,来区分加 载和卸载两种情况。 3) 以关键点的应力值作为加载段 \ 卸 载段的划分依据,对不同的加载段 \卸载段进行划分, 根据当前传递过 来的应力值,判断其所在的加载 \ 卸载段,定义新的应力值计算公 式。 最终编制成功的 SMA-VUMA T 子程序, 经过单个单元和构件的双重测试,测试情况 多样,全面,概况如下: 1) 单纯拉伸\压缩: 加载进入第一加载 段或第二加载段的各种加载再卸 载情况。 2) 单纯拉伸\压缩: 卸载进入第一加载 段、第二加载段或第三卸载段的各 种加载、卸载再加载的情况。 拉伸与压缩各种混合加载\ 卸载情

UMAT以及depvar整理

UMAT以及depvar整理

UMAT以及depvar整理UMAT以及depvar整理by warmwormdk最近一直在论坛查资料,对自己感兴趣的一些问题专门进行了整理,希望对大家有所帮助,也希望能获得小小的奖励啊,哈哈1UMAT的状态变量问题Q:用DEPVAR定义的状态变量个数假设为10个。

是不是说一个积分点的状态变量是10个,单元的积分点是4的话,那么单元的状态变量就是40个。

也就是自己要存储单元变量的话,就得按40个状态变量来。

是不是呢?A:有人说跟我说,DEPVAR定义的状态变量个数指每个积分点的状态变量个数。

abaqus 会自动为每个单元的每个积分点开辟这样大小的状态变量数组,abaqus调用umat时能够自动根据单元好和积分点向umat提供状态变量,在此基础上umat修改状态变量。

2umat里的STATEV变量怎么输出到odb文件中Q:比如我想知道statev(10)的odb文件,怎么输出?又怎么打开.statev(10)是我自己定义的damage变量,请各位赐教A在element关键词中添加SDV,就像下面这样。

*Element Output,directions=YESALPHA,LE,PE,PEEQ,PEMAG,PS,S,STH,SE,SF,VE,VEEQ,VS,SDV3Q statev(?)请问这个状态变量()内的数字代表什么含义?对应的变量是不是固定的?各自对应着哪些变量?A:括号中的数代表这个变量矩阵的维数,这个值等于depvar的值。

4umat中DEPVAR有几种定义方式?Q;UMAT中状态变量的定义方式,一般有两种形式,一是在inp文件中采用*initial conditions定义,二是特殊情况下可以采用SDVINI来定义;目前的疑问是,是否还有其他定义状态变量的方式?请专家针对上传的附件给于指点多谢!附件中的例子来自ABAQUS HELP中的例子!请问例子中INP文件中是如何定义状态变量的THANKS A:初值可以采用SDVINI来定义程序运行中用以下代码更新DO310K1=1,NTENSSTATEV(K1)=EELAS(K1)STATEV(K1+NTENS)=EPLAS(K1)310CONTINUESTATEV(1+2*NTENS)=EQPLASCRETURNEND5umat子程序定义问题?Q:在umat中定义的参数在材料中需不需再定义了?比如我umat 中已经给了密度了。

umat二次开发超弹性本构

umat二次开发超弹性本构

APPENDIXNeo-Hookean Hyperelatic Material User SubroutineThis program is based on the derivation of hyperelastic material constitutive model in Section 4.4. A stress and strain relationship was derived from the neo-Hookean hyperelastic material constitutive model that is normally represented as the strain energy with strain invariants.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 )Cinclude 'vaba_param.inc'Cdimension 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),9 fieldNew(nblock,nfieldv),1 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),2 enerInternNew(nblock), enerInelasNew(nblock)Ccharacter*80 cmnameCif (cmname(1:6) .eq. 'VUMAT0') thencall VUMAT0(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,7 stressNew, stateNew, enerInternNew, enerInelasNew)117else if (cmname(1:6) .eq. 'VUMAT1') thencall VUMAT1(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,7 stressNew, stateNew, enerInternNew, enerInelasNew)end ifendCsubroutine vumat0 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -* stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'Cdimension coordMp(nblock,*), charLength(nblock), props(nprops),1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMises, maxShear,1 midStrain, maxPrincipalStrain118Cintv(1) = ndirintv(2) = nshrCif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusCif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in local axis)Cdet=stretchNew(k, 3)*1191 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two) scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1)stateNew(k,2) = stateOld(k,2) + strainInc(k,2)stateNew(k,3) = stateOld(k,3) + strainInc(k,3)stateNew(k,4) = stateOld(k,4) + strainInc(k,4)CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+1201 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C use 3/2 will get 2 (int) !CC write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4) CC Failure CriteriaCmidStrain = stateNew(k,1) + stateNew(k,2)maxShear = sqrt((stateNew(k,1) - midStrain)**2. +1 stateNew(k,4)**2.)if (midStrain .GE. 0.) thenmaxPrincipalStrain = midStrain + maxShearelsemaxPrincipalStrain = maxShear - midStrainend ifif (vonMises .GE. 10.8565e6) thenstateNew(k,5) = 0end ifend doend ifreturnendCsubroutine vumat1 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,121* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -* stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'dimension coordMp(nblock,*), charLength(nblock), props(nprops),1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMisesCintv(1) = ndirintv(2) = nshrCif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10122twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusCif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in localaxis)Cdet=stretchNew(k, 3)*1 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two)scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)123EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1)stateNew(k,2) = stateOld(k,2) + strainInc(k,2)stateNew(k,3) = stateOld(k,3) + strainInc(k,3)stateNew(k,4) = stateOld(k,4) + strainInc(k,4)CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+1 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4) 124end doend ifreturnend。

ABAQUS-二次开发资料-UMAT

ABAQUS-二次开发资料-UMAT

各个楼层与容索引2-------------------------------------什么是UMAT3-------------------------------------UMAT功能简介4-------------------------------------UMAT开场的变量声明5-------------------------------------UMAT中各个变量的详细解释6-------------------------------------关于沙漏和横向剪切刚度7-------------------------------------UMAT流程和参数表格实例展示8-------------------------------------FORTRAN语言中的接口程序Interface9-------------------------------------关于UMAT是否可以用Fortran90编写的问题10-17--------------------------------Fortran77的一些有用的知识简介20-25\30-32-----------------------弹塑性力学相关知识简介34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载38-------------------------------------JOhn-cook模型本构简介图40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢送大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带"?"局部,还望各位大师\指教]1 什么是UMAT???1.1 UMAT功能简介!!![-摘自庄茁教师的书UMAT子程序具有强大的功能,使用UMAT子程序:(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进展计算,扩大程序功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

APPENDIXNeo-Hookean Hyperelatic Material User SubroutineThis program is based on the derivation of hyperelastic material constitutive model in Section 4.4. A stress and strain relationship was derived from the neo-Hookean hyperelastic material constitutive model that is normally represented as the strain energy with strain invariants.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 )Cinclude 'vaba_param.inc'Cdimension 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),9 fieldNew(nblock,nfieldv),1 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),2 enerInternNew(nblock), enerInelasNew(nblock)Ccharacter*80 cmnameCif (cmname(1:6) .eq. 'VUMAT0') thencall VUMAT0(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,7 stressNew, stateNew, enerInternNew, enerInelasNew)117else if (cmname(1:6) .eq. 'VUMAT1') thencall VUMAT1(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,7 stressNew, stateNew, enerInternNew, enerInelasNew)end ifendCsubroutine vumat0 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -* stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'Cdimension coordMp(nblock,*), charLength(nblock), props(nprops),1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMises, maxShear,1 midStrain, maxPrincipalStrain118Cintv(1) = ndirintv(2) = nshrCif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusCif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in local axis)Cdet=stretchNew(k, 3)*1191 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two) scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1)stateNew(k,2) = stateOld(k,2) + strainInc(k,2)stateNew(k,3) = stateOld(k,3) + strainInc(k,3)stateNew(k,4) = stateOld(k,4) + strainInc(k,4)CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+1201 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C use 3/2 will get 2 (int) !CC write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4) CC Failure CriteriaCmidStrain = stateNew(k,1) + stateNew(k,2)maxShear = sqrt((stateNew(k,1) - midStrain)**2. +1 stateNew(k,4)**2.)if (midStrain .GE. 0.) thenmaxPrincipalStrain = midStrain + maxShearelsemaxPrincipalStrain = maxShear - midStrainend ifif (vonMises .GE. 10.8565e6) thenstateNew(k,5) = 0end ifend doend ifreturnendCsubroutine vumat1 (C Read only -* nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,* stepTime, totalTime, dt, cmname, coordMp, charLength,* props, density, strainInc, relSpinInc,* tempOld, stretchOld, defgradOld, fieldOld,121* stressOld, stateOld, enerInternOld, enerInelasOld,* tempNew, stretchNew, defgradNew, fieldNew,C Write only -* stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'dimension coordMp(nblock,*), charLength(nblock), props(nprops),1 density(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),9 defgradNew(nblock,ndir+nshr+nshr),1 fieldNew(nblock,nfieldv),2 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev),3 enerInternNew(nblock), enerInelasNew(nblock)Cdimension devia(nblock,ndir+nshr),1 BBar(nblock,4), stretchNewBar(nblock,4), intv(2)Ccharacter*80 cmnameparameter (zero = 0.D00, one = 1.D00, two = 2.D00, three = 3.D00, * four = 4.D00, half = 0.5D0)real C10,D1,ak,twomu,amu,alamda,hydro,vonMisesCintv(1) = ndirintv(2) = nshrCif (ndir .ne. 3 .or. nshr .ne. 1) thencall xplb_abqerr(1,'Subroutine VUMAT is implemented '//* 'only for plane strain and axisymmetric cases '//* '(ndir=3 and nshr=1)',0,zero,' ')call xplb_abqerr(-2,'Subroutine VUMAT has been called '//* 'with ndir=%I and nshr=%I',intv,zero,' ')call xplb_exitend ifCC10 = props(1)D1 = props(2)C C10=1.11619E6 D1=4.48E-8Cak=two/D1amu=two*C10122twomu=four*C10alamda=(three*ak-twomu)/threeCC if stepTime equals zero, assume pure elastic material and use initial elastic modulusCif(stepTime .EQ. zero) thendo k=1,nblocktrace1 = strainInc(k,1) + strainInc(k,2) + strainInc(k,3)stressNew(k,1) = stressOld(k,1)* + twomu * strainInc(k,1) + alamda * trace1stressNew(k,2) = stressOld(k,2)* + twomu * strainInc(k,2) + alamda * trace1stressNew(k,3) = stressOld(k,3)* + twomu * strainInc(k,3) + alamda * trace1stressNew(k,4) = stressOld(k,4)* + twomu * strainInc(k,4)C write(6,*) totalTime,k,defgradNew(k, 1),stretchNew(k,1),C 1 stressNew(k,2),stressNew(k,3),stressNew(k,4)end doelsedo k=1,nblockCC JACOBIAN OF STRETCH TENSOR (U is symmetric and in localaxis)Cdet=stretchNew(k, 3)*1 (stretchNew(k, 1)*stretchNew(k, 2)-stretchNew(k, 4)**two)scale=det**(-ONE/THREE)stretchNewBar(k, 1)=stretchNew(k, 1)*scalestretchNewBar(k, 2)=stretchNew(k, 2)*scalestretchNewBar(k, 3)=stretchNew(k, 3)*scalestretchNewBar(k, 4)=stretchNew(k, 4)*scaleCC CALCULATE LEFT CAUCHY-GREEN TENSOR (B is symmetric)CBBar(k,1)=stretchNewBar(k, 1)**two+stretchNewBar(k, 4)**two BBar(k,2)=stretchNewBar(k, 2)**two+stretchNewBar(k, 4)**two BBar(k,3)=stretchNewBar(k, 3)**twoBBar(k,4)=stretchNewBar(k, 1)*stretchNewBar(k, 4) +1 stretchNewBar(k, 2)*stretchNewBar(k, 4)CC CALCULATE STRESS tensorCTRBBar=BBar(k,1)+BBar(k,2)+BBar(k,3)123EG=two*C10/detPR=two/D1*(det-one)stressNew(k,1)=EG*(BBar(k,1)-TRBBar/Three) + PR stressNew(k,2)=EG*(BBar(k,2)-TRBBar/Three) + PR stressNew(k,3)=EG*(BBar(k,3)-TRBBar/Three) + PR stressNew(k,4)=EG* BBar(k,4)CC Update the specific internal energyCstressPower = half * (1 ( stressOld(k,1)+stressNew(k,1) ) * strainInc(k,1) +2 ( stressOld(k,2)+stressNew(k,2) ) * strainInc(k,2) +3 ( stressOld(k,3)+stressNew(k,3) ) * strainInc(k,3) ) +4 ( stressOld(k,4)+stressNew(k,4) ) * strainInc(k,4) enerInternNew(k) = enerInternOld(k)1 + stressPower / density(k)CC Strains under corotational coordinatesCstateNew(k,1) = stateOld(k,1) + strainInc(k,1)stateNew(k,2) = stateOld(k,2) + strainInc(k,2)stateNew(k,3) = stateOld(k,3) + strainInc(k,3)stateNew(k,4) = stateOld(k,4) + strainInc(k,4)CC Calculate vonMisesChydro = (stressNew(k,1)+stressNew(k,2)+1 stressNew(k,3))/3.do k1=1,ndirdevia(k,k1) = stressNew(k,k1) - hydroend dodo k1=ndir+1,ndir+nshrdevia(k,k1) = stressNew(k,k1)end dovonMises = 0.do k1=1,ndirvonMises = vonMises + devia(k,k1)**2end dodo k1=ndir+1,ndir+nshrvonMises = vonMises + 2*devia(k,k1)**2end dovonMises = sqrt(3./2*vonMises)C write(6,*) totalTime,defgradNew(k, 4),stretchNew(k,4)C 1 ,defgradNew(k,3),defgradNew(k,4),defgradNew(k,5)C ,det,TRBBarC 1 ,stressNew(k,1),stressNew(k,2),stressNew(k,3),stressNew(k,4) 124end doend ifreturnend。

相关文档
最新文档