huang隱式程序修改為顯式及計算案例

黃永剛原始晶體塑性具有良好的收斂性,以及高效的計算效率,在一般變形下無需修改,即可直接使用。然而一些特殊的工況,如切削,軋制,沖壓等隱式存在收斂性問題。因此通常使用顯示程序進行計算。但從頭完成顯式晶體塑性構造對于一般學者顯然難度過高,一個簡單的想法就是直接將現成的黃永剛隱式程序改成顯式。abaqus里這是可以實現的。其基本的步驟是:

1,加入vumat接口程序(見附錄abaqus官網有)

2,對nblock進行循環,計算應力和狀態變量

3,更新應力與狀態變量,重復計算直到增量結束。

值得注意的是,umat與vumat程序里面剪應力分量定義順序與應力不同

umat:12,13,23(工程剪應變)

vumat:12,23,13(2*工程剪應變)

同時采用該方法計算時計算效率顯著高于完全顯式,并允許較大的時間增量。為評估模型計算效率,采用1000個晶粒80000個單元的二維模型進行20%的壓縮模擬。耗時3小時,計算結果與隱式結果類似。模型結果如下:

huang隱式程序修改為顯式及計算案例的圖1

附錄

      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
user coding
100 continue

return

end

2,

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5
2
13