by  warmwormdk
最近一直在论坛查资料,对自己感兴趣的一些问题专门进行了整理,希望对大家有所帮助,也希望能获得小小的奖励啊,哈哈
1  UMAT的状态变量问题
Q:用DEPVAR定义的状态变量个数假设为10个。是不是说一个积分点的状态变量是10个,单元的积分点是4的话,那么单元的状态变量就是40个。也就是自己要存储单元变量的话,就得按40个状态变量来。是不是呢?
A:有人说跟我说,DEPVAR定义的状态变量个数指每个积分点的状态变量个数。abaqus会自动为每个单元的每个积分点开辟这样大小的状态变量数组,abaqus调用umat时能够自动根据单元好和积分点向umat提供状态变量,在此基础上umat修改状态变量。
2  umat里的STATEV变量怎么输出到odb文件中
Q:比如我想知道statev(10)的odb文件,怎么输出?又怎么打开.
statev(10)是我自己定义的damage变量,
请各位赐教
A 在element关键词中添加SDV,就像下面这样。
*Element Output, directions=YES
ALPHA, LE, PE, PEEQ, PEMAG, PS, S, STH,SE, SF, VE, VEEQ, VS, SDV
3
Q  statev(?)请问这个状态变量()内的数字代表什么含义?对应的变量是不是固定的?各自对应着哪些变量?
A:括号中的数代表这个变量矩阵的维数,这个值等于depvar的值。
4 umat中DEPVAR有几种定义方式?
Q;UMAT中状态变量的定义方式,一般有两种形式,一是在inp文件中采用*initial conditions定义,二是特殊情况下可以采用SDVINI来定义; 目前的疑问是,是否还有其他定义状态变量的方式? 请专家针对上传的附件给于指点 多谢! 附件中的例子来自ABAQUS HELP中的例子!  请问例子中INP文件中是如何定义状态变量的 THANKS
A:
初值可以采用SDVINI来定义
程序运行中用以下代码更新
DO 310 K1=1,NTENS
STATEV(K1)=EELAS(K1)
STATEV(K1+NTENS)=EPLAS(K1)
310  CONTINUE
STATEV(1+2*NTENS)=EQPLAS
C
RETURN
END
5  umat子程序定义问题?
Q:  在umat中定义的参数在材料中需不需再定义了?比如我umat中已经给了密度了。在材料中还要再定义一下密度吗?值是一样的。
还有就是材料中Depvar这个是什么参数啊?求教!
a:  如果你已经在umat中定义了具体的密度值比如 density=7800;那应该不会再需要在input文件中定义density的值了,但是一般不会这么做,density的值在input文件中定义更方便。Depvar是你在umat中用到了多少结果相关的状态变量,比如如果在umat中用到了5个,就定义
×Depvar
5, 
{这一行是写在input文件中的
A:  density在哪个地方定义并不重要, 重要的是你在什么地方要用到, 如果你在UMAT中定义了, 但是你想加重力荷载怎么办呢, 所以要看需要定义
depvar是让ABAQUS主程序知道要分配多少内存给每个积分点来存储
状态变量, 以实现增量步之间的数据传递, 比如自编的弹塑性模型中的塑性应变, 必须从一个增量步传到下一个, 以实现累加.
6  怪异的ABAQUS错误
Q:  做UMAT的时候,总是在第一个单元所有积分点调用完UMAT后,ABAUQS显示RUNNING,但实际上没有运行,查看Log文件,显示下面的错误:
ABAQUS Error: The executable C:\ABAQUS\6.5-1\,
aborted with system error "拒绝访问。error code 5)
为什么log文件显示错误,而Job Moniter却没有提示?
另外我在UMAT中加入了一句输出,我可以发现总是第一个单元可以成功调用UMAT,此后就出问题了??
希望高手能解决,若需要的话,我可以上传UMAT和INPUT文件
A:
f当时我以为是硬件或者软件本身的毛病。
我从装过系统,abaqus,fortran。visual studio。结果是一样的。
最后我开始在子程序本身寻问题。我发现我在用umat中如果使用mewton迭代进行一个数值的求解,当循环次数设置过高的话就会出现这一问题(我当时让他循环1000次)。但是如果循环次数较小又满足不了要求。所以面对这一问题时就只好牺牲精度,换取计算继续下去。
当然最好的方法就是在两者之间选择平衡了。
其实您还可以在进行umat计算时,用debug检查一下每个变量的输出,或者使用write(*,*)命令在for文件中,来监控整个程序。
A:
问题已解决,主要是INP文件的问题。。。。。!!!所以inp文件也会引起error code 5
我这里主要是由于depvar的值设置的有些问题。。。。。
A:
那是有可能的,因为所有在umat中出现的问题,本身的原因就是inp文件,变量数组设置的不够也可能是原因,这个我也遇到过,其实之所以error code 5出错,就是inp文件中材料参数设置的不合理造成的。
A:
肯定是UMAT中发生了一些比如说divide by zero的illegal operation. 这种情况是code abort.
A:
error code 5一般不是内部的bug  主要是参数设置的不合理或子程序的问题
A:
做了很长时间后我发现, 无论是多么奇怪的错误, 99.999%是自已在什么地方没有做对,而不是硬件软件的问题
A:
有时候是两个物体的网格划分的比例相差很大造成的!
Q:
最近在用umat编写abaqus的材料模型,其中碰到一些问题,总是无法通过编译,自己总结了一下,特向高手们请教……
1、应变梯度dfgrd在变量声明中以及存在,那么在编程中是否可以用应变梯度dfgrd以及dfgrd0和dfgrd1来代替strain来进行本构模型的表示?具体用法是什么?
2、ddsdde也就是雅克比矩阵可以用梯度增量来代替应变增量dstran吗?
3、状态变量statev个数有没有限制?其作用是不是对当前计算步的结果进行保存,以便下一个计算步使用?那
么其他变量如stress以及strain和它的区别是什么?
4、fortran中的计算有什么限制,例如式子的长度,变量的个数什么的?
A:在此过程中本人积累了一点经验,仅供大家参考。
1 首先要明确已知的量:stress,strain以及可以据此求得的volumetric strain。在 编写umat的时候,stress,strain 就直接可以当成当前步的应力和应变。这一点非常重要。个人觉得。
2 搞清楚你的算法,也就是应力更新算法。如果算法有问题,就算程序能运行也是错的。
3 需要用本构方程进行应力和状态变量的更新。通常的算法都是采用两步:弹性预测和塑性修正。弹性预测的部分很容易就可以写出,塑性修正是相对较难得。设及到时间积分时,建议采用向后的欧拉积分,可以保证稳定。
4 最初调试采用一个单元。
5 调试过程中,可以增加write语句帮助检查错误。write(6,*) 表示将输出信息保存到dat文件。
1 在调用UMAT之前,ABAQUS传递给UMAT本次增量开始时的应力sigma(0),总应变E,应变增
量delta(E)。
状态变量保存:弹性应变,塑性应变,等效塑性应变。
2,然后在UMAT中利用上述的ABAQUS传递的量和状态变量得到DDSDDE矩阵,然后返回给
ABAQUS,ABAQUS根据delta(sigma)=ddsdde*delta(E),并且得到本次增量结束时的应力
sigma(1)=sigma(0)+delta(sigma)=sigma(0)+ddsdde*delta(E)
3 然后更新本次增量结束时的状态变量:弹性应变,塑性应变,等效塑性应变以供下次调
用UMAT
A:1和2:  楼主要理解UMAT的真正作用, 每一步ABAQUS主程序会传一些可用信息比如dstrain, 用于UMAT计算, 至于这些信息编程的人怎么用, 主程序是不管的, 主程序只要你给他结果, 两个最重要的是应力增量和DDSDDE矩阵, 当然如果你要用到statev也要告诉主程序有这个结果你也要, 所以你就是想用1,2,3来作为应变计算应力也是你自已的本构的事, 所以这两个问题楼主应该问你自已.
3. 有没有限制不知道, 但要用到多少个你要在INP文件里面设置的, 估计楼主用到的数量绝对达不到上限
4. fortran的计算有它自已的语法和格式, 其中的限制什么的太多不能详诉, 变量的个数是没有限制的.
A: 大变形问题,在UMAT中可以使用DFGRD,从而导出速度梯度L 等等参与材料本构的计算.
等物理量可以参与ddsdde更新,但是计算时还是 dstress=ddsdde*dstrain这个dstrain是abaqus主程序根据收敛性自定义的,用户不能改变.同时,经过以前我计算验证,调用F计算应变,与主程序计算的应变,是相等的
以上是我结合自己UMAT对F的使用一点看法,欢迎指正
A:实际上dfgrd是用于层合板的,而对于超弹性材料主要是使用dfgrd0和dfgrd1,而这两个光看名字就可以猜到一个是增
量前,一个是增量后,而且后者只有在出现几何非线性时才有意义,但是这只是定性的解释,可以在document里面到。
有没有一个更为详细的解释呢?让我们可以放心大胆的使用这个东东
而且我没有到过用dfgrd的增量作为ddsdde的自变量的umat,不知道能不能用
8  请教,umat中如何使用缩减积分单元(已解决,与大家分享)
Q:  查了一些资料,说要定义×HOURGLASS STIFFNESS: ~- ^, Z+ t- w$ p/ J9 `4 h& v8 a
帮助里面看了,还是不明白。*HOURGLASS STIFFNESS 来定义 nondefault hourglass stiffness 时,下面的参数怎么取呢,帮助里面说不输入或者输入0,会采用默认的值,但是我试了发现不行啊,还是出错
出错信息如下:
***ERROR: ABAQUS CALCULATES ZERO HOURGLASS STIFFNESS FOR ELEMENT 1. USE     
*HOURGLASS STIFFNESS OR CHANGE ELEMENT TYPE.    不知道怎么修改,请各位大佬赐教啊。
不知道有没有在umat中用过减缩积分单元,能否共享一下材料定义这部分是怎么做的,谢谢!
A:
不管有没有人回,我还是把自己的试验结果写出来,和大家一起讨论下。
我试了用*SECTION CONTROL,NAME=***,HOURGLASS=ENHANCED结果还是出现错误:
***ERROR: ABAQUS CALCULATES ZERO HOURGLASS STIFFNESS FOR ELEMENT 1. USE  *HOURGLASS STIFFNESS OR CHANGE ELEMENT TYPE.
_说明,在UMAT中,不能像不采用子程序那样来控制沙漏问题, 个人认为,可能还是帮助里面说的那样,必须用*HOURGLASS STIFFNESS 来控制
我用了
*HOURGLASS STIFFNESS
exited
10,0,0
计算没有出错,可以完成。但是10,0,0这数据是我瞎写的,没有什么根据,所以也不知道结果会相差多大。
A:
在abaqus计算时由于有些量是需要利用弹性模量E和泊松比v计算得到的,但在使用umat时,abaqus不知道输入的E和v,因此这些量需要手工定义。
HOURGLASS就属于这样的情况,需要你手工输入。
A:
谢谢您对于我的信任,
我在umat程序中选用过一介减缩积分单元
其实HOURGLASS现象本身与是否使用umat并没有关系,之所以我选用一介减缩积分单元的原因在于利用二介单元的时候计算塑性和损伤都不容易收敛,结果退而求其次选用一介减缩积分单元,他的HOURGLASS一般解决方案是在element type下选择enhance,然后二阶精度也选上,这样的效果回好一些,如果HOURGLASS控制选择default的话,就会出现上面您所提到的错误了
A:
问题基本解决了,与大家分享一下!
方法1.如果用×hourglass stiffness 肯定是可以的,可以参考帮助里面的例子,例子中就是这么用的,第一个参数取得是1.0(为什么取这个值,我还没有搞懂。现在也没有时间去考虑这个去了,以后有时间再去琢磨琢磨,当然如果有大侠愿意指导一下,小弟感激不尽);
法2.根据敦诚大侠的指导,既然在cae中用HOURGLASS=ENHANCED 可以行,在inp中肯定也行。
把帮助部分又仔细看了几遍,发现我的问题出在了NAME的值,刚开始就没有搞透,随便给了个值,后来才发现这个名称要在×solid 中定义了才行,改动如下;
*SOLID SECTION,ELSET=ALLE,MATERIAL=ROCK,CONTROLS=C1
*SECTION CONTROLS,NAME=C1,HOURGLASS=ENHANCED
这样就可以了。
9  请求敦诚的帮助!有关UMAT的几点疑问?
Q:
*material后面加4
*user material ,constant=m
*depvar
n
m和n分别表示材料常数的个数,与自定义变量个数。
(1)constant是指材料为常数,因为我要考虑混凝土徐变,需要修改UMAT,如弹性模量随时间变化,
E=PROPS(1),E=F(T),F(T)是与时间相关的函数。但constant表示材料为常数,这定义是否有效,弹模是否能够在计算过程中随时间变化。*user material ,constant=m  v下面的m个数据是否可以看做初始值?
(2)depvar所对应的状态变量不是很明白,是不是指应力应变数组的数目?还是我认为帮助文件中所指的状态变量,是需求的量,如三维问题的位移,n就是3呢?
a:个人认为,即使是率依赖,或者是时间相关问题也有材料常数的啊,
材料常数不仅决定了材料的雅可比矩阵,也可以决定材料屈服后的力学行为(这个可以通过各项同性mises屈服的子程序就知道了),我做损伤的时候弹模也是衰减的,但是是与时间无关的。与时间有关的我没有做过。提不了什么建设性意见,但是你是否可以通过建立弹模与温度场的联系来使得弹模与温度有关。而后在幅值中建立一条温度与时间对应的关系曲线,而将温度场以场变量的形式外加到计算中呢?
10执行材料子程序出错,不知为什么?
刚学习umat,用一个简单例子试了一下& z) h" S& E7 N3 m
执行用户子程序时,4 }/ m% l# A4 f- l
abaqus job=p user=elastic.for interactive
但是出现
link : fatal error "cannot open input file "oldnames.lib""
jabaqus error :problem during linking -abaqus sdandard user subroutines
abaqus analysis exited with errors
不知是什么地方错了,我在inp文件中/ @  b) J1 @) C. V3 D8 ^4 e/ ?
** MATERIALS
**
*Material, name=Steel
*user marerial,costants=2
210000., 0.3
不知什么地方出现问题了,是不是还需要在.for文件中指明inp文件,如何写呢?执行时出现的错误是什么原因呢?
A:
在FOR文件中无需指明INP文件,光看你列出的INP命令流是没有问题的。其实读入子程序不需要在DOS状态下输入命令,我个人感觉比较繁琐!你直接在JOB模块中的Edit Job——>General中选择你的FOR文件,就可以运行了,这样做的好处就是能够监视你的模型运算过程。如果以这种方式有错的话,可能有以下原因:
(1)你的FOR