找回密码
 注册
Simdroid-非首页
查看: 1012|回复: 17

[二次开发] abaqus vumat 金属塑性断裂代码

[复制链接]
发表于 2019-3-23 00:11:43 | 显示全部楼层 |阅读模式 来自 巴西
论文里面看到的代码,想要在abaqus中实现,调试运行了很久,始终没有应力返回,请大神看看是否代码本身有问题啊?整个模型只有kinetic 能量有变化,其他能量都是零。
(后处理中显示selected primary variable is not available...)

  1. SUBROUTINE VUMAT(nblock,ndir,nshr,nstatev,nfieldv,
  2.      1 nprops,lanneal,
  3.      2 stepTime,totalTime,dt,cmname,coordMp,charLength,
  4.      3 props,density,strainInc,relSpinInc,
  5.      4 tempOld,stretchOld,defgradOld,fieldOld,
  6.      5 stressOld,stateOld,enerInternOld,enerInelasOld,
  7.      6 tempNew,stretchNew,defgradNew,fieldNew,
  8.      7 stressNew,stateNew,enerInternNew,enerInelasNew)
  9. C
  10.        INCLUDE 'VABA_PARAM.INC'
  11. C      VARIABLE DEFINITION
  12. C      --------------------------------------------------------------------
  13.        dimension props(nprops), density(nblock),
  14.      1 coordMp(*),
  15.      2 charLength(*), strainInc(nblock,ndir+nshr),
  16.      3 relSpinInc(*), tempOld(*),
  17.      4 stretchOld(*), defgradOld(nblock,ndir+2*nshr),
  18.      5 fieldOld(*), stressOld(nblock,ndir+nshr),
  19.      6 stateOld(nblock,nstatev), enerInternOld(nblock),
  20.      7 enerInelasOld(nblock), tempNew(*),
  21.      8 stretchNew(nblock,ndir+2*nshr),
  22.      9 defgradNew(nblock,ndir+2*nshr),
  23.      9 fieldNew(*),
  24.      9 stressNew(nblock,ndir+nshr),
  25.      9 stateNew(nblock,nstatev),
  26.      9 enerInternNew(nblock), enerInelasNew(nblock)
  27.          
  28.        CHARACTER*80 CMNAME

  29.           
  30.        Double Precision nue, E, Cxy, Cnn, Css, sig1,sig2,sig3,
  31.      1 sig4,sig5,sig6,f, dfs1, dfs2, dfs3, dfs4,misesqr,
  32.      2 dfs5,dfs6,FF,GG,HH,NN,ep1,ep2,ep3,gamp1,gamp2,gamp3,
  33.      3 gampt1,gampt2,gampt3,ept1,ept2,ept3,e0,
  34.      4 dflam,lam,eqmises,dD,ds1lam,ds2lam,ds3lam,ds4lam,
  35.      5 peeq, peeqt, dpeeq, ds5lam,ds6lam,temp4,mexp,
  36.      6 s1, s, st, H1, table(2,25),A,N,Fra,onethird,
  37.      7 DamageC,xflag,ef,xi,thetab,ThirdI,temp1,temp2,temp3,
  38.      8 C1,C2,C3,f1,f2,f3,smean,eta,thetap
  39.          
  40.          integer km,i
  41. C
  42. C      material parameters
  43. C--------------------------------------------------------------------
  44. C      Piecewise input of hardening curve [ table(2,*) for plastic strain points,table(1,*) for corresponding yielding stresses]
  45.         table(2,1)=0
  46.         table(2,2)=0.010
  47.         table(2,3)=0.015
  48.         table(2,4)=0.012
  49.         table(2,5)=0.023
  50.         table(2,6)=0.029
  51.         table(2,7)=0.034
  52.         table(2,8)=0.038
  53.         table(2,9)=0.043
  54.         table(2,10)=0.048
  55.         table(2,11)=0.053
  56.         table(2,12)=0.058
  57.         table(2,13)=0.063
  58.         table(2,14)=0.068
  59.         table(2,15)=0.0728
  60.         table(2,16)=0.078
  61.         table(2,17)=0.083
  62.         table(2,18)=0.089
  63.         table(2,19)=0.095
  64.         table(2,20)=0.10
  65.         table(2,21)=0.11
  66.         table(2,22)=0.112456
  67.         table(2,23)=0.118
  68.         table(2,24)=0.3
  69.         table(2,25)=0.6
  70. C
  71.         table(1,1)=537.33
  72.         table(1,2)=552.42
  73.         table(1,3)=565.015
  74.         table(1,4)=580.95
  75.         table(1,5)=593.97
  76.         table(1,6)=603.93
  77.         table(1,7)=613.67
  78.         table(1,8)=620.78
  79.         table(1,9)=626.39
  80.         table(1,10)=637.22
  81.         table(1,11)=644.566
  82.         table(1,12)=647.818
  83.         table(1,13)=658.494
  84.         table(1,14)=664.096
  85.         table(1,15)=665.88
  86.         table(1,17)=672.064
  87.         table(1,19)=682.71
  88.         table(1,20)=682.22
  89.         table(1,21)=690.669
  90.         table(1,22)=694.155
  91.         table(1,23)=694.347
  92.         table(1,24)=750.279
  93.         table(1,25)=803.213
  94. C
  95. C elasticity
  96.         E = props(1)
  97.         nue = props(2)
  98. C plasticity
  99.         A = props(3)
  100.         eO = props(4)
  101.         N = props(5)
  102. C MMC fracture
  103.         C1 = props(6)
  104.         C2 = props(7)
  105.         C3 = props(8)
  106. C post failure
  107.         xflag = props(9)
  108.         mexp= props(10)
  109. C plastic anisotropy
  110.         FF = props(11)
  111.         GG = props(12)
  112.         HH = props(13)
  113.         NN = props(14)
  114.         LL = props(15)
  115.         MM = props(16)

  116. C  3D C matrix
  117.         Cxy=E*nue/((1-2*nue)*(1+nue))
  118.         Cnn=E*(1-nue)/((1-2*nue)*(1+nue))
  119.         Css=E/(2*(1+nue))

  120. C Fracture definition
  121.         if ( xflag .eq. 1.) then
  122.             DamageC = 1.001
  123.         else if (xflag .gt. 1.) then
  124.             DamageC = xflag
  125.         else
  126.             DamageC = 2.
  127.         end if
  128. C
  129. C BEGIN(integration point specific)
  130.       do 1000 km = 1,nblock
  131. C
  132. C  initialize state variables
  133.       if(totalTime .le. 0.) then
  134.          do j=4,10
  135.              stateOld(km,j)=0.
  136.          end do
  137.            stateOld(km,11)=table(1,1)
  138.            stateOld(km,3)=1.
  139.            stateOld(km,1)=0.
  140.            stateOld(km,2)=0.
  141.            stateOld(km,12)=0.
  142.            stateOld(km,13)=0.
  143.            stateOld(km,14)=0.
  144.        end if
  145.       if(stateold(km,3).eq. 0.) then
  146.         statenew(km,3)=0
  147.         statenew(km,2)=0
  148.         statenew(km,4) =0
  149.         statenew (km, 12) =0
  150.         statenew (km, 13) =0
  151.         statenew (km, 14) =0
  152.                
  153.         goto 1000
  154.        end if
  155.        peeq  = stateOld(km,1)
  156.        epl   = stateOld(km,5)
  157.        ep2   = stateOld(km,6)
  158.        ep3   = stateOld(km,7)
  159.        gamp1 = stateOld(km,8)
  160.        gamp2 = stateOld(km,9)
  161.        gamp3 = stateOld(km,10)
  162.        s     = stateOld(km,11)
  163. C
  164. C--------------------------------------------------------------------
  165. C calculate trial stress state
  166.        sigl=stressOld(km,1) + Cnn*strainInc(km,1)
  167.      1      + Cxy*(strainInc(km,2) + strainInc(km,3))
  168.        sig2=stressOld(km,2) + Cnn*strainInc(km,2)
  169.      1      + Cxy*(strainInc(km,1) + strainInc(km,3))
  170.        sig3=stressOld(km,3) + Cnn*strainInc(km,3)
  171.      1      + Cxy*(strainInc(km,1)+ strainInc(km,2))
  172.        sig4=stressOld(km,4) + Css*2*strainInc(km,4)
  173.        sig5=stressOld(km,5) + Css*2*strainInc(km,5)
  174.        sig6=stressOld(km,6) + Css*2*strainInc(km,6)
  175. C
  176.         f=sqrt(FF*(sig2-sig3)**2 + GG*(sig3-sig1)**2
  177.      1    + HH*(sig1-sig2)**2 + 2*NN*sig4**2 +3*sig5**2
  178.      2    + 3*sig6**2) - s
  179.        
  180.         if (f.lt.1.e-2)  then
  181. C elastic step
  182.               ept1 = ep1
  183.               ept2 = ep2
  184.               ept3 = ep3
  185.               gampt1 = gamp1
  186.               gampt2 = gamp2
  187.               gampt3 = gamp3
  188.               st = s
  189.               peeqt = peeq
  190.               dpeeq = 0.
  191.         else
  192. C    plastic step
  193. C   ----------------------------------------------------------------------
  194. C    begin return mapping
  195. C   initialize iteration variables
  196.         lam =0.
  197.         dfs1 =0.
  198.         dfs2 =0.
  199.         dfs3 =0.
  200.         dfs4 =0.
  201.         dfs5 =0.
  202.         dfs6 =0.
  203. C
  204.         do i=1,100
  205. C calculate plastic strains using associated flow rule and plastic
  206. C multiplier 'lam'
  207.         ept1 = ep1 + lam*dfs1
  208.         ept2 = ep2 + lam*dfs2
  209.         ept3 = ep3 + lam*dfs3
  210.                 gampt1 = gamp1 + lam*dfs4
  211.                 gampt2 = gamp2 + lam*dfs5
  212.                 gampt3 = gamp3 + lam*dfs6
  213. C calculate stresses
  214.         sig1=stressOld(km,1) + Cnn*(strainInc(km,1) - lam*dfs1)
  215.      1       + Cxy*(strainInc(km,2)-lam*dfs2+ strainInc(km,3)-lam*dfs3)
  216.         sig2=stressOld(km,2) + Cnn*(strainInc(km,2)-lam*dfs2)
  217.      1       + Cxy*(strainInc(km,1)-lam*dfs1+strainInc(km,3) -lam*dfs3)
  218.         sig3=stressOld(km,3) + Cnn*(strainInc(km,3)-lam*dfs3)
  219.      1       + Cxy*(strainInc(km,1)-lam*dfs1+strainInc(km,2) -lam*dfs2)
  220.         sig4=stressOld(km,4) + Css*(2*strainInc(km,4)-lam*dfs4)
  221.         sig5=stressOld(km,5) + Css*(2*strainInc(km,5)-lam*dfs5)
  222.         sig6=stressOld(km,6) + Css*(2*strainInc(km,6)-lam*dfs6)
  223. C hardening modulus
  224.         dpeeq = lam
  225.                      peeqt = peeq + dpeeq
  226.         call UHARD(peeqt, table, 25, s1, H1)
  227.              if((stateOld(km,2).gt.1.).and.(xflag .gt. 1.)) then
  228.              st=s1*((DamageC-stateOld(km,2))/(DamageC-1.))**mexp

  229. C             Hl=Hl*((DamageC-stateOld(km,2))/(DamageC-1.))**0.5
  230. C                 -s1*0.5*((DamageC-stateOld(km,2))/(DamageC-1.))**(-0.5)
  231. C                 /(ef*(DamageC-1.))
  232.              else
  233.         st=s1
  234.         end if
  235. C       evaluate yield condition
  236.         f=sqrt(FF*(sig2-sig3)**2 + GG*(sig3-sig1)**2
  237.      1     + HH*(sig1-sig2)**2 + 2*NN*sig4**2
  238.      1     + 3*sig5**2+3*sig6**2) - st

  239.         if (abs(f).lt.1.e-2) goto 12
  240. C       calculate partial derivatives of f : dfs1=df/dsigl, dfs2=df/dsig2...
  241.                   dfs1 = (-GG*(sig3-sig1)+HH*(sig1-sig2))/(f+st)
  242.                   dfs2 = (FF*(sig2-sig3)-HH*(sig1-sig2))/(f+st)
  243.                   dfs3 = (-FF*(sig2-sig3)+GG*(sig3-sig1))/(f+st)
  244.                   dfs4 = 2*NN*sig4/(f+st)
  245.                   dfs5 = 3*sig5/(f+st)
  246.                   dfs6 = 3*sig6/(f+st)

  247. C calculate partial derivatives of s : ds1lam=ds1/dlam, ds2lam=ds2/dlam.

  248.                   ds1lam=-Cnn*dfs1-Cxy*(dfs2+dfs3)
  249.                   ds2lam=-Cnn*dfs2-Cxy*(dfs1+dfs3)
  250.                   ds3lam=-Cnn*dfs3-Cxy*(dfs1+dfs2)
  251.                   ds4lam=-Css*dfs4
  252.                   ds5lam=-Css*dfs5
  253.                   ds6lam=-Css*dfs6
  254. C calculate dflam = df/dlam=df/ds * ds/dlam
  255.                   dflam = - (H1) + (dfs1*ds1lam+dfs2*ds2lam+
  256.      1      dfs3*ds3lam+dfs4*ds4lam +dfs5*ds5lam+dfs6*ds6lam)
  257. C calculate updated plastic multiplier
  258.                   lam = lam -f/dflam
  259. C end return mapping
  260. C----------------------------------------------------------------------
  261.               end do
  262. 12   continue
  263.           end if
  264. C--------------------------------------------------------------------
  265. C UPDATE
  266. C--------------------------------------------------------------------
  267. C   stresses
  268.       stressNew(km,1) = sig1
  269.       stressNew(km,2) = sig2
  270.       stressNew(km,3) = sig3
  271.       stressNew(km,4) = sig4
  272.       stressNew(km,5) = sig5
  273.       stressNew(km,6) = sig6
  274. C   other state variables
  275.       stateNew(km,1) = peeqt
  276.       stateNew(km,5) = ept1
  277.       stateNew(km,6) = ept2
  278.       stateNew(km,7) = ept3
  279.       stateNew(km,8) = gampt1
  280.       stateNew(km,9) = gampt2
  281.       stateNew(km,10)= gampt3
  282.       stateNew(km,11)= st
  283. C--------------------------------------------------------------------
  284. C    UPDATE for fracture criteria
  285. C--------------------------------------------------------------------
  286.       misesqr=0.5*(sig2-sig3)**2 + 0.5*(sig3-sig1)**2
  287.      1 + 0.5*(sig1-sig2)**2 + 3*sig4**2
  288.      2 +3*sig5**2+3*sig6**2
  289.       if(misesqr.le.0.) then
  290.           eqmises=0.001
  291.       else
  292.           eqmises=sqrt(misesqr)
  293.       end if
  294.       smean=(sig1+sig2+sig3)/3
  295.       temp1=(sig1-smean)*((sig2-smean)*(sig3-smean)-sig5**2)
  296.       temp2=sig4*(sig4*(sig3-smean)-sig5*sig6)
  297.       temp3=sig6*(sig4*sig5-sig6*(sig2-smean))
  298.       temp4=(27./2.)*(temp1-temp2+temp3)
  299.       if(temp4.lt.0) then
  300.           ThirdI=-(-temp4)**(1.0/3.0)
  301.       else
  302.           ThirdI=(temp4)**(1.0/3.0)
  303.       end if
  304.       if(eqmises.eq.0.) then
  305.           eta=1./3.
  306.           xi=0
  307.       else
  308.           eta=smean/eqmises
  309.           xi=(ThirdI/eqmises)**3.
  310.       end if
  311.       if(xi.lt.(-1))then
  312.           xi=-1
  313.       else if(xi.gt.1.)then
  314.           xi=1
  315.       end if
  316.       thetab=1-2*acos(xi)/3.1415927
  317.       stateNew(km,12)=smean
  318.       stateNew(km,13)=eqmises
  319.       stateNew(km,14)=eta
  320.       stateNew(km,15)=thetab
  321.       stateNew(km,16)=xi
  322. C--------------------------------------------------------------------
  323. C--Apply Fracture Criteria
  324. C--------------------------------------------------------------------
  325.       if((xflag .ge. 1.).and.(peeqt.gt.0.)) then
  326.           if ((stateOld (km,2) .lt. DamageC).and.
  327.      1 (stateOld(km,3).eq.1.)) then
  328. C Mohr-Coulomb fracture criteria
  329.           f1 = cos(thetab*3.1415927/6)
  330.           f2 = sin(thetab*3.1415927/6)
  331.           f3 = C3+(sqrt(3.)/(2.-sqrt(3.)))*(1-C3)*(1./f1-1.)
  332.           ef =((A/C2)*f3*(f1*sqrt((1+C1**2)/3.)
  333.      1 +C1*(eta+f2/3.))) **(-1./N)

  334. C Cut-off value of stress triaxiality
  335.           if (eta .lt. -1) ef=10000.0
  336. C Fracture locus term
  337.           Fra = 1./ef
  338.           dD = Fra * dpeeq        
  339.           stateNew(km,2)= stateOld(km,2) + dD
  340.           stateNew(km,4)= ef
  341.       end if
  342. C ---------------------------------------------
  343. C Check element deletion and delete damaged element
  344.       if ((stateNew(km,2) .ge. DamageC) .and.
  345.      1 (stateOld(km,3) .eq. 1.)) then
  346.       stateNew(km,3) = 0.
  347.       stressNew(km,1)= 0.
  348.       stressNew(km,2)= 0.
  349.       stressNew(km,3)= 0.
  350.       stressNew(km,4)= 0.
  351.       stressNew(km,5)= 0.
  352.       stressNew(km,6)= 0.
  353.       end if
  354. C end of fracture coding
  355.        end if
  356. C--------------------------------------------------------------------
  357. C USER SUBROUTINE CODE ENDS HERE
  358. C--------------------------------------------------------------------
  359. 1000  continue
  360.       RETURN
  361.       END
  362. C ----------------------------------------------------------------------
  363.             subroutine UHARD(eqplasr, table, nvalue, syieldw, hardw)
  364.        include 'vaba_param.inc'
  365. C
  366. C variable definition
  367.       dimension table(2,nvalue)
  368.       Double Precision eqplas0, eqplas1, syield0, syield1, eqplasr,
  369.      1 syieldw,hardw,table
  370. C
  371. C eqplasr ............. equivalent plastic strain (read only)
  372. C table ............... array of stress-strain pairs (read only)
  373. C nvalue .............. number of stress-strain pairs (read only)
  374. C syieldw ............. von Mises yield stress (write only)
  375. C hardw ............... slope of yield surface at eqplas (write only)
  376. C
  377. C table(1,1), table(2,1), table(1,2), table(2,2)
  378. C stress_1, eps_1, stress_2, eps_2C
  379.       do k1=1, nvalue-1
  380.          eqplas1 = table(2,k1+1)
  381.       if(eqplasr.lt.eqplas1) then
  382.           eqplas0 = table(2,k1)
  383.           syield0 = table(1,k1)
  384.           syield1 = table(1,k1+1)
  385.           hardw = (syield1 - syield0) / (eqplas1 - eqplas0)
  386.           syieldw = syield0 + hardw * (eqplasr - eqplas0)
  387.           goto 11
  388.       end if
  389.       end do
  390.       hardw = 0.d0
  391.       syieldw = table(1,nvalue)
  392. 11    continue
  393.       return
  394.       end
复制代码
发表于 2019-5-1 09:41:21 | 显示全部楼层 来自 湖南娄底
给你一个赞,very good
回复 不支持

使用道具 举报

发表于 2020-3-24 12:52:37 | 显示全部楼层 来自 山东济南
你好楼主,你这个程序可以计算材料得疲劳吗,咱可以交流一下
回复 不支持

使用道具 举报

发表于 2020-7-4 16:25:14 | 显示全部楼层 来自 中国
求论文链接
回复 不支持

使用道具 举报

发表于 2020-10-20 18:20:40 | 显示全部楼层 来自 北京海淀
楼主,你好,能给论文连接吗
回复 不支持

使用道具 举报

发表于 2020-12-7 21:07:55 | 显示全部楼层 来自 黑龙江
小白问一句,楼主调试出来了吗,问一下编好了Vumat子程序之后,不需要给参数赋值吗
回复 不支持

使用道具 举报

发表于 2020-12-10 22:30:33 | 显示全部楼层 来自 陕西西安
求论文链接
回复 不支持

使用道具 举报

发表于 2021-3-24 10:13:37 | 显示全部楼层 来自 北美地区
求论文链接
回复 不支持

使用道具 举报

发表于 2021-4-2 20:27:00 | 显示全部楼层 来自 山东济南
求论文连接
回复 不支持

使用道具 举报

发表于 2023-4-26 16:38:29 | 显示全部楼层 来自 北京
来学习一下
回复 不支持

使用道具 举报

发表于 2023-5-17 11:40:47 | 显示全部楼层 来自 LAN
哇,第一次见这么好的人,也不要仿真币
回复 不支持

使用道具 举报

发表于 2023-7-27 09:48:32 | 显示全部楼层 来自 江苏南京
求论文链接
回复 不支持

使用道具 举报

发表于 2023-7-27 11:12:51 | 显示全部楼层 来自 江苏南京
这些代码都是咋哪找的啊
回复 不支持

使用道具 举报

发表于 2024-3-22 21:17:26 | 显示全部楼层 来自 四川成都
求论文名称
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 04:32 , Processed in 0.042199 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表