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

[子程序] 同时调用两个VUMAT子程序

[复制链接]
发表于 2011-12-31 08:25:09 | 显示全部楼层 |阅读模式 来自 天津
给位大侠们,帮帮忙 有两个vumat子程序要同时调用,我就放一个for文件里了 加了语句IF (CMNAME(1:4) .EQ. 'MAT1') THEN
   CALL VUMAT_MAT1(argument_list)
ELSE IF(CMNAME(1:4) .EQ. 'MAT2') THEN
   CALL VUMAT_MAT2(argument_list)
END IF
这条语句是在for文件的哪个位置加,那个argument_list写什么?还有就是vumat借口咋弄,最好哪位大侠能给个例子,不胜感激!
发表于 2014-6-8 15:16:10 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
踏浪狂生 发表于 2014-6-7 16:38
版主您好,请教您下。
按照三楼这种格式书写,第一个子程序"vumat_MAT1"中的语句:DO i=1,nblock
和第二 ...

DO I=1,NBLOCK

END DO
这里的变量i不是代表积分点,而是vumat中为提高计算效率采用的批量计算。  

Abaqus主程序在每个材料的积分点都会调用vumat,这时该积分点前一个增量步结束时应力,应变还有其他状态变量信息是被abaqus主程序管理的, 在调用vumat时,这些变量传递给子程序vumat。 所以用户不用关心单元编号的问题。
回复 1 不支持 0

使用道具 举报

发表于 2012-2-28 14:10:36 | 显示全部楼层 来自 澳大利亚
您好,我最近也在弄这个啊,如果成功的话能不能也指点一下啊,谢谢
回复 不支持

使用道具 举报

发表于 2014-6-6 17:31:19 | 显示全部楼层 来自 陕西西安
同样是这个问题,有人能给解答一下么?
C
C User subroutine VUMAT
      subroutine vumat (
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 )
C
      include 'vaba_param.inc'
C
      character*80 cmname
      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)
C
      if (cmname(1:4) .eq. 'MAT1') then
         call VUMAT_MAT1 (
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,
*     stressNew, stateNew, enerInternNew, enerInelasNew )
         else if (cmname(1:4) .eq. 'MAT2') then
               call VUMAT_MAT2 (
*     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,
*     stressNew, stateNew, enerInternNew, enerInelasNew )
          end if

            return
            end

      subroutine VUMAT_MAT1 (
*     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,
*     stressNew, stateNew, enerInternNew, enerInelasNew )
C
C
      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)
C   
      character*80 cmname
      dimension distgr(nblock,ndir+2*nshr),bbar(nblock,ndir+nshr*2)
C
C ˇ帻赵
C

subroutine VUMAT_MAT2 (
*     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,
*     stressNew, stateNew, enerInternNew, enerInelasNew )
C
C
      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)
C   
      character*80 cmname
      dimension distgr(nblock,ndir+2*nshr),bbar(nblock,ndir+nshr*2)
C
C ˇ帻赵
C

上面是从http://forum.simwe.com/forum.php ... 2716&highlight=两%2Bvumat
拷过来的代码,这样的顺序对么?
我按照这个顺序调,总是出现网格扭矩过大的错误,已确定不是任何一个vumat材料设置的问题,也不是接触设置的问题
回复 不支持

使用道具 举报

发表于 2014-6-7 15:31:28 | 显示全部楼层 来自 陕西西安
通过材料的名称判断调用哪个本构模型。 在VUMAT子程序接口中,abaqus主程序会将材料名字传递给cmname。
回复 不支持

使用道具 举报

发表于 2014-6-7 16:38:46 | 显示全部楼层 来自 陕西西安
shawn2008 发表于 2014-6-7 15:31
通过材料的名称判断调用哪个本构模型。 在VUMAT子程序接口中,abaqus主程序会将材料名字传递给cmname。  ...

版主您好,请教您下。
按照三楼这种格式书写,第一个子程序"vumat_MAT1"中的语句:DO i=1,nblock
和第二个子程序"vumat_MAT2"中的语句:DO i=1,nblock
不冲突么?
我觉得虽然不同的单元通过材料来区分,但是单元的编号是唯一的呀。
难道不同的子程序对各自的材料单元重新编号么?
回复 不支持

使用道具 举报

发表于 2014-6-7 16:50:01 | 显示全部楼层 来自 陕西西安
还有哦,强化子程序 subroutine ahard(...)要针对不同的子程序分别写么?还是只写一个,由不同的子程序各自调用即可?
回复 不支持

使用道具 举报

发表于 2014-6-9 16:16:41 | 显示全部楼层 来自 陕西西安

谢谢版主的热情回复!
回复 不支持

使用道具 举报

发表于 2018-1-16 14:26:46 | 显示全部楼层 来自 天津
踏浪狂生 发表于 2014-6-6 17:31
同样是这个问题,有人能给解答一下么?
C
C User subroutine VUMAT

你这个问题解决了吗?该怎么调用两个子程序啊,我子程序单个都能用,放一起就报错了,真无语。。。
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 17:00 , Processed in 0.031642 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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