首页/文章/ 详情

huang隐式程序修改为显式及计算案例

1年前浏览725

黄永刚原始晶体塑性具有良好的收敛性,以及高效的计算效率,在一般变形下无需修改,即可直接使用。然而一些特殊的工况,如切削,轧制,冲压等隐式存在收敛性问题。因此通常使用显示程序进行计算。但从头完成显式晶体塑性构造对于一般学者显然难度过高,一个简单的想法就是直接将现成的黄永刚隐式程序改成显式。abaqus里这是可以实现的。其基本的步骤是:

1,加入vumat接口程序(见附录abaqus官网有)

2,对nblock进行循环,计算应力和状态变量

3,更新应力与状态变量,重复计算直到增量结束。

值得注意的是,umat与vumat程序里面剪应力分量定义顺序与应力不同

umat:12,13,23(工程剪应变)

vumat:12,23,13(2*工程剪应变)

同时采用该方法计算时计算效率显著高于完全显式,并允许较大的时间增量。为评估模型计算效率,采用1000个晶粒80000个单元的二维模型进行20%的压缩模拟。耗时3小时,计算结果与隐式结果类似。模型结果如下:


图片

附录

      subroutine vumat(
C Read only (unmodifiable)variables -
     1  nblock, ndir, nshr, nstatev, nfieldv, nprops, jInfoArray,
     2  stepTime, totalTime, dtArray, 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 )
C
      include 'vaba_param.inc'
      parameter (i_info_AnnealFlag = 1, 
     *     i_info_Intpt    = 2, ! Integration station number
     *     i_info_layer  = 3, ! Layer number
     *     i_info_kspt   = 4, ! Section point number in current layer
     *     i_info_effModDefn = 5, ! =1 if Bulk/ShearMod need to be defined
     *     i_info_ElemNumStartLoc   = 6) ! Start loc of user element number
C
      dimension props(nprops), density(nblock), coordMp(nblock,*),
     1  charLength(nblock), dtArray(2*(nblock)+1), 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), jInfoArray(*)
C
      character*80 cmname
C
      pointer (ptrjElemNum, jElemNum)
      dimension jElemNum(nblock)
C
      lAnneal = jInfoArray(i_info_AnnealFlag) 
      iLayer = jInfoArray(i_info_layer)
      kspt   = jInfoArray(i_info_kspt)
      intPt  = jInfoArray(i_info_Intpt)
      iUpdateEffMod = jInfoArray(i_info_effModDefn)
      iElemNumStartLoc = jInfoArray(i_info_ElemNumStartLoc)
      ptrjElemNum = loc(jInfoArray(iElemNumStartLoc))

      do 100 km = 1,nblock
        
  100 continue

      return
材料Abaqus
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-25
最近编辑:1年前
此生君子意逍遥
博士 签名征集中
获赞 48粉丝 62文章 83课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈