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

[子程序] 再论使用UMAT模拟材料的失效

[复制链接]
发表于 2011-12-16 14:20:15 | 显示全部楼层 |阅读模式 来自 美国
本帖最后由 magicalarm 于 2011-12-16 15:45 编辑

材料失效的模拟,想必是多少版友日以夜继煎熬想搞定的一个ABAQUS应用。

可是这里面困难重重,特别是想用UMAT来实现的话。我记得敦诚大侠在多篇帖子中都提到,不要轻易碰UMAT。

但我已走上了这条不归路。还得硬着头皮继续走下去。

现在与大家讨论的是用UMAT来模拟材料失效的两个关键问题。

1. 当材料的损伤变量达到1时,是否有必要对材料的属性进行修改?比如说降低材料的弹性模量等?
    我原本一直以为这应该是必要的操作。但近日和中东的两位学者讨论后,发现他们的说法是无需对失效单元的材料属性进行任何的操作,他们已经这样做5年了,并发表了大量的paper。


2. 如果需要对失效单元的材料属性进行操作的话,具体如何实现呢?

yyffpp曾经在 http://forum.simwe.com/thread-839275-3-1.html  58楼 说过:
“在standard里,第一:如果只想实现判据断裂而不引入损伤,即材料的弹性模量不折减,只想判读什么时候断裂发生,可以用子程序usdfld实现,在子程序里定义自己的判据,当达到判据后,令场变量field为1.同时,在cae操作时候令弹性模量与场变量field相关(field为零时,弹性模量原值,field为1时,弹性模量设一个不为零的极小值),这个在帮助文档里有。要克服的问题就是收敛问题,可在step模块的''general solution control'里稍微放宽下精度。模型最好用位移加载而不是力加载,否则更难收敛。1 \8 |# V8 W/ {# }
如果想引入经典的连续损伤力学理论,令弹性模量、弹塑性计算随着损伤增量的增加而变换,用UMAT实现,当损伤变量达到临界值时,可令弹塑性矩阵乘一个极小值以模拟失效。8 k% `! Y( I% |- E
在explicit里,用vumat,楼上已经介绍。
本人刚刚完成的博士论文初稿(尚未送审),使用过上述的所有方法,均可以实现材料的失效。”

现在的问题是“可令弹塑性矩阵乘一个极小值以模拟失效”该如何实现。我现在编的umat程序当1-2个单元损伤达到临界值时,程序就因为收敛问题停止了。这个问题已经困扰我好久了,渴望能得到yyffpp或其他高手或版主的指点。


拜谢!

点评

你可以邀请一些人来回答你这个问题的,现在有了邀请功能了  发表于 2011-12-16 14:36

评分

1

查看全部评分

发表于 2011-12-16 16:14:07 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
本帖最后由 xycf_a 于 2011-12-16 16:15 编辑

其实这个我觉得不收敛主要是你的刚度矩阵变成负的了,导致了不收敛。
你前面使用USDFLD做计算的话应该单元中的应力应变曲线中不会出现下降段的吧,现在你想在UMAT使得弹塑性矩阵减小,那么你的应力应变曲线应该是会出现下降段,收敛性确实不好。可以参考敦版主说的用VUMAT来进行计算。
不过某个单元损伤过大的话一样会导致单元严重扭曲。。。不能够进行下去,其实进行下去结果也明显不太对。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-12-16 19:18:13 | 显示全部楼层 来自 天津
先说说第一种方法,这种方法实现容易,但是我个人觉得,最不符合实际的条件,虽然裂纹扩展的情况,能得到,但是其他的应力以及其他变化,并不准确。由于没有降低弹性模量应力的最大位置并不会随着裂纹尖端的位置发生变化而变化。所以无法真正的实现所谓的裂纹扩展。
第二种方法,应该是可行的。通过降低弹性模量到一个比较小的值。这个比较小可能就由个人决定,可能程序 不同降低的程度也各不相同。
个人觉得不收敛,大多是某些应力变化过大,或者某些其他的值,变化过大,导致。查看一下,msg文件,看看具体的原因是什么。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-17 10:44:17 | 显示全部楼层 来自 美国
本帖最后由 magicalarm 于 2011-12-17 11:09 编辑
xycf_a 发表于 2011-12-16 16:14
其实这个我觉得不收敛主要是你的刚度矩阵变成负的了,导致了不收敛。
你前面使用USDFLD做计算的话应该单元 ...


谢谢xycf_a斑竹,请问如何检验刚度矩阵是否变成负的了呢?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-17 11:06:14 | 显示全部楼层 来自 美国
本帖最后由 magicalarm 于 2011-12-17 11:56 编辑
zltju 发表于 2011-12-16 19:18
先说说第一种方法,这种方法实现容易,但是我个人觉得,最不符合实际的条件,虽然裂纹扩展的情况,能得到, ...


谢谢zl。
你说的“降低弹性模量到一个比较小的值”是不是和yyffpp提到的“令弹塑性矩阵乘一个极小值以模拟失效”是同一种方法吗?


关于不收敛的问题,你说的很对,大多数是由于某些值如应力变化或步长变化扩大造成的。这些都比较好调整。

但我现在的不收敛问题是算了许多步以后,出现error code 144.
除数为0和负数开方必定会产生144的错误。这都可归纳为数值错误。
但有没有可能是其他原因造成的呢?



损伤云图


error code 144



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-12-17 16:18:02 | 显示全部楼层 来自 上海
请问下,umat中ddsdde矩阵影响着计算的收敛性和收敛速度。
那么
要如何更新ddsdde矩阵还是在inp文件中通过关键字对求解器的参数进行修改来达到收敛?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-17 23:00:12 | 显示全部楼层 来自 美国
didi000 发表于 2011-12-17 16:18
请问下,umat中ddsdde矩阵影响着计算的收敛性和收敛速度。
那么
要如何更新ddsdde矩阵还是在inp文件中通过 ...

ddsdde矩阵是自己在umat中定义的。
回复 不支持

使用道具 举报

发表于 2011-12-19 19:29:10 | 显示全部楼层 来自 江苏南京
你查看下真实米塞斯或者别的什么理论的应力和应变的关系,看是否出现水平段或者下降段就知道这个单元刚度是否为负的了。
关于收敛的问题你都是怎么解决的,损伤稍微大一些就会出现不收敛的现象你怎么搞的一般。
回复 不支持

使用道具 举报

发表于 2011-12-19 19:42:41 | 显示全部楼层 来自 江苏南京
didi000 发表于 2011-12-17 16:18
请问下,umat中ddsdde矩阵影响着计算的收敛性和收敛速度。
那么
要如何更新ddsdde矩阵还是在inp文件中通过 ...

更新DDSDDE需要一些推导,你直接查看UMAT和DDSDDE的帖子,有介绍如何推导的。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-21 15:22:33 | 显示全部楼层 来自 美国
本帖最后由 magicalarm 于 2011-12-21 15:51 编辑
xycf_a 发表于 2011-12-19 19:29
你查看下真实米塞斯或者别的什么理论的应力和应变的关系,看是否出现水平段或者下降段就知道这个单元刚度是 ...


原来如此啊,应力应变曲线出现水平段或下降段就说明单元刚度为负的了

BTW, 请问斑竹,你在1楼提到的“弹塑性矩阵”具体指的是哪个矩阵呢?

损伤稍微大一些就会出现不收敛的现象,正是我现在所碰到的。我也还没有完全解决这个问题。
一个老师告诉我最简单的方法就是将临界损伤值设低一些,但我觉得这个根本算不上方法。

降低弹模我有试过,但效果也不好。

我搜索了论坛好久,都没有找到很好的方法。斑竹有什么见解吗?

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-12-22 12:59:50 | 显示全部楼层 来自 江苏南京
一直没解决啊。据敦斑竹介绍用显式算法
降低临界的损伤值确实是一个方法,其实个别单元损伤值一大就算不了了,第二个把DDSDDE好好推导下,看能不能提高点收敛性。
我现在改用显式算法勉强能算,但是还是有其他问题。我菜鸟一个,摸索中。一起进步吧。

点评

你们两个惺惺相惜呀,呵呵  发表于 2011-12-22 14:14

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-12-22 19:35:43 | 显示全部楼层 来自 湖北武汉
我现在在搞摩尔库伦的理想弹塑性,对于塑性阶段水平线我总是搞不出来,要是是向上出现强化性质的,要么是向下出现软化,不知道大侠有何提示,有需要,我可以给出程序让大侠帮忙
回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-23 06:12:24 | 显示全部楼层 来自 美国
本帖最后由 magicalarm 于 2011-12-23 06:13 编辑
xycf_a 发表于 2011-12-22 12:59
一直没解决啊。据敦斑竹介绍用显式算法
降低临界的损伤值确实是一个方法,其实个别单元损伤值一大就算不了 ...


谢谢xycf_a斑竹,我才是真正的菜鸟啊。
请问改用显式算法是指将static改成visco吗?

另外, 请问斑竹,你在1楼提到的“弹塑性矩阵”具体指的是哪个矩阵呢?

恕我愚钝,请斑竹详解。

回复 不支持

使用道具 举报

发表于 2011-12-23 09:53:02 | 显示全部楼层 来自 美国
本帖最后由 YidaZhang 于 2011-12-23 09:53 编辑
magicalarm 发表于 2011-12-23 06:12
谢谢xycf_a斑竹,我才是真正的菜鸟啊。
请问改用显式算法是指将static改成visco吗?

弹塑性矩阵就是表征材料在塑性阶段的应力应变的tangent modulus,可做如下类比

   弹性阶段: 应力增量=弹性矩阵×总应变增量

   塑性阶段: 应力增量=弹性矩阵×弹性应变增量=弹性矩阵×(总应变增量-塑性应变增量)      对塑性应变使用流动法则
                               =弹性矩阵×(总应变增量- lambda×df/dstress)
                               =[弹性矩阵×(1-lambda×df/dstress/总应变增量)]×总应变增量
                               =弹塑性矩阵×总应变增量

隐式算法指求解本构方程时使用牛顿迭代 x=x-df/dx ,这样收敛后得到的解误差可知,精度最高。

显示算法的的本质是直接假设材料在这个子步的变化是线性的,应力增量=弹塑性矩阵×总应变增量,但是对于表现出很强非线性的方程来说显示算法误差不能估计,结果可信度不如隐式。

Sloan 1987年有一篇文章介绍带误差控制的显示substepping算法,据说精度可与隐式媲美。不知道是否能用于计算visco或者damage模型

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-24 00:19:18 | 显示全部楼层 来自 美国
YidaZhang 发表于 2011-12-23 09:53
弹塑性矩阵就是表征材料在塑性阶段的应力应变的tangent modulus,可做如下类比

   弹性阶段: 应力增量= ...

谢谢YidaZhang的详细解答,你就是之前的joyone吧。

我有三个疑问请教:

1.请问弹性矩阵和弹塑性矩阵在umat中是用哪个变量表示的呢?如果我需要将它进行修改的话。

2.弹性矩阵和弹塑性矩阵与DDSDDE之间是什么关系?

3.在Abaqus中若要采用隐式算法的话,是不是就是在step中选择visco?


若能再次得到你的帮助,吾将感激不尽!
回复 不支持

使用道具 举报

发表于 2011-12-24 01:38:20 | 显示全部楼层 来自 美国
magicalarm 发表于 2011-12-24 00:19
谢谢YidaZhang的详细解答,你就是之前的joyone吧。

我有三个疑问请教:

恩恩~joyone是朋友的号~

DDSDDE其实只是abaqus要求你给他的夹克比矩阵,abaqus对自定义的UMAT只有两个要求:给我更新应力和给我一个夹克比矩阵让我预测下一步的DSTRAN。另外针对模型的不同,用户还要自己更新statv,(如hardening parameter)。至于你用什么办法达到这个目的它是不管的,你完全可以天马行空的发挥。

因此我在我的UMAT中就一直没用DDSDDE,弹性阶段我自己定义了个矩阵A让它当弹性矩阵,塑性阶段我让B来当弹塑性矩阵,算完以后一切都更新完了,我另外加一段单独计算给ABAQUS用的DDSDDE。

因此,弹性矩阵和弹塑性矩阵与DDSDDE没啥关系,它就是夹克比矩阵。但是有些同学探讨DDSDDE是不是就是弹塑性矩阵,这就是理论范畴的话题了。

UMAT中更新应力的算法涉及到一个应力关于应变的积分,你可自由选择隐式或显式算法,跟你在abaqus中的操作没有关系。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-12-24 06:21:42 | 显示全部楼层 来自 美国
YidaZhang 发表于 2011-12-24 01:38
恩恩~joyone是朋友的号~

DDSDDE其实只是abaqus要求你给他的夹克比矩阵,abaqus对自定义的UMAT只有两个 ...

谢谢,我现在的理解是弹性矩阵和弹塑性矩阵就是用来计算应力增量的,对吧?

但有句话还是有些不明白。

你提到:
“因此我在我的UMAT中就一直没用DDSDDE。。。”
回复 不支持

使用道具 举报

发表于 2011-12-24 06:31:19 | 显示全部楼层 来自 美国
magicalarm 发表于 2011-12-24 06:21
谢谢,我现在的理解是弹性矩阵和弹塑性矩阵就是用来计算应力增量的,对吧?

但有句话还是有些不明白。

对。恩,我在计算增量的过程没有用DDSDDE矩阵,DDSDDE不是弹塑性矩阵,是jacobian矩阵,是一个abaqus要求你给他的一个东西。你的主要困惑在哪里?

我看过之前的一些例子,弹性阶段计算的时候把DDSDDE来存储弹性矩阵,塑性阶段也用它来存储塑性矩阵,最后把它改成夹克比矩阵交给abaqus,这样也没有问题,无非是个名称上的东西,我可以让A来存储弹性矩阵,B来存储塑性矩阵。最最关键的一点是最后交给abaqus的时候DDSDDE要存的是夹克比矩阵。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-12-24 13:43:32 | 显示全部楼层 来自 辽宁大连
方便说下你的损伤因子是怎么处理的么,可以给我发私信,不收敛的问题确实不好解决
回复 不支持

使用道具 举报

发表于 2011-12-24 13:45:31 | 显示全部楼层 来自 辽宁大连
仔细看了一下,可以试试半隐式求解
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 05:14 , Processed in 0.075221 second(s), 21 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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