找回密码
 注册
Simdroid-非首页
楼主: haoyi891030

[子程序] UMAT程序编写过程中的一点疑惑

[复制链接]
 楼主| 发表于 2013-6-5 16:55:46 | 显示全部楼层 来自 天津
nanjizhinan 发表于 2013-6-5 15:02
场函数子程序是不是有节点为位移 是否可以在umat中调用场函数子程序

先谢过了,我看看这个子程序,最近也是各种找,想着快点做出来~
回复

使用道具 举报

发表于 2013-6-5 17:20:08 | 显示全部楼层 来自 德国
Simdroid开发平台
首先你要弄清楚Umat是在材料积分点上实现的,Umat的每个输入变量只对一个积分点有效,
因此单从Umat子程序本身的输入变量里,你是没有办法计算出变形梯度的,因为你要得到应变梯度,必须知道附近单元的应变,因此你每调用一次Umat,就要存储这个单元积分点的应变做为全局变量,这可以通过在Fortran本身实现,在每个增量步里,单元都调用好Umat之后,所有的应变就都存在了全局变量里面了,然后在下一个增量步,重新更新所存储的这些全局变量,这样你就可以在Umat里面使用所有单元的这些变量了,而不是只能使用你所运算的单元提供的变量。
最后,我不太喜欢这些梯度相关的本构,因为违反了连续介质力学的基本假设,虽然在微小尺度下连续介质力学本来就是不对的,但是这样得到的模型过于复杂,而且对于解决问题并没有太多好处。
回复

使用道具 举报

 楼主| 发表于 2013-6-5 22:27:41 | 显示全部楼层 来自 天津
billowriver 发表于 2013-6-5 17:20
首先你要弄清楚Umat是在材料积分点上实现的,Umat的每个输入变量只对一个积分点有效,
因此单从Umat子程序 ...

对的,但是研究尺寸效应的话,必须得考虑应变梯度的影响,以前做UEL应变梯度可以根据节点坐标形函数直接插值。今天也是看到以前的一些帖子说UMAT里面可以通过一些程序得到节点的信息,我现在也在找。你说得这个方法我觉得前一个增量步的应变知道后,在下一个增量步还是这个积分点要算其应变梯度的话还是必须通过节点来插值,虽然所有单元的应变是知道了,但必须知道对应节点的应变,不知道节点信息的话,通过单元的应变怎么平均到节点上呢?
回复

使用道具 举报

发表于 2013-6-6 10:34:13 | 显示全部楼层 来自 德国
haoyi891030 发表于 2013-6-5 22:27
对的,但是研究尺寸效应的话,必须得考虑应变梯度的影响,以前做UEL应变梯度可以根据节点坐标形函数直接 ...

Umat里面输入输出的变量都是存储在单元积分点上的,不是节点,不同单元的积分点个数不同,当然为了方便最好用一个积分点的单元,至于应变梯度,你把积分点想象成节点就可以求了,本构里面只能使用上一增量步应变梯度,增量步取小一点就行了,就是所谓的显式的方法。
回复

使用道具 举报

 楼主| 发表于 2013-6-6 13:32:17 | 显示全部楼层 来自 天津
billowriver 发表于 2013-6-6 10:34
Umat里面输入输出的变量都是存储在单元积分点上的,不是节点,不同单元的积分点个数不同,当然为了方便最 ...

多谢,但是还是这个问题,应变梯度就像应变一样,是等于应变梯度矩阵乘以节点位移,应变梯度矩阵与形函数对整体坐标的导数以及节点坐标有关系,当然单元定了之后形函数是定的,但是想要算出应变梯度就需要节点位移与节点坐标了,当前积分点坐标倒是知道,因此就是迫切想知道可以通过别的方法能否的值相应节点位移与坐标,我想单单靠UMAT的话,应该比较难,你说的将积分点当成节点是什么意思,有点不太懂。
回复

使用道具 举报

发表于 2013-6-6 15:23:18 | 显示全部楼层 来自 德国
haoyi891030 发表于 2013-6-6 13:32
多谢,但是还是这个问题,应变梯度就像应变一样,是等于应变梯度矩阵乘以节点位移,应变梯度矩阵与形函数 ...

当然,如果是你自己编写的有限元程序,你说的都可以实现,但是在ABAQUS中,你能调用的东西很有限,Umat子程序本身也不是为梯度效应的本构设计出来的,它默认你的本构都是在连续介质力学的范围内。但是现在你想加入梯度效应,只能做一些妥协。应变梯度,是应变在各个方向上对坐标的偏导数,直接用中心差分就可以了,说的更明白一点就是塑性应变之差除以坐标之差。
回复

使用道具 举报

 楼主| 发表于 2013-6-6 16:08:59 | 显示全部楼层 来自 天津
billowriver 发表于 2013-6-6 15:23
当然,如果是你自己编写的有限元程序,你说的都可以实现,但是在ABAQUS中,你能调用的东西很有限,Umat子 ...

积分点的塑性应变增量时可以通过等效塑性应变增量求出来的,你的意思是直接塑性应变增量除以积分点坐标差就可以吗?
回复

使用道具 举报

发表于 2013-6-6 22:54:17 | 显示全部楼层 来自 北京科技大学
winnerqin 发表于 2013-6-2 20:11
这些东西一般文章里面不详细讲,因为涉及到别人不愿公开的技术问题。
这个肯定能解决,楼主自己要多下功 ...

你好,牛人,能问你个问题么,谢谢了

vumat程序中,用的模型是hill各向异性屈服准则,或者barlat各向异性屈服准则,用的ductile各向异性损伤理论。

                                       在材料user material中输入了材料的property值,其中应力应变曲线 是100摄氏度的曲线,提交后的得到的是材料在100摄氏度下的变形云图,      

    现在要求,做三条曲线,分别是100摄氏度,200摄氏度,300摄氏度下的值,怎么在vumat中编写一个程序,要求根据工件的温度变化,自行选择目前温度下的拟合的应力应变曲线。

                                       如果不用vumat,abaqus在属性里面 可以定义 三个温度下的应力与塑性应变n组,然后abaqus会自动拟合,选择所需要的,但是使用vumat则需要自己编程来实现此问题。
回复

使用道具 举报

发表于 2013-6-7 09:19:27 | 显示全部楼层 来自 德国
haoyi891030 发表于 2013-6-6 16:08
积分点的塑性应变增量时可以通过等效塑性应变增量求出来的,你的意思是直接塑性应变增量除以积分点坐标差 ...

按照你的公式,应该是先求应变梯度增量,那么就是在每个时间步里求塑性应变增量之差除以坐标差,然后加上之前的总的应变梯度。而且由于你的公式是分量形式的,所以你要对每个塑性应变分量求梯度。
回复

使用道具 举报

发表于 2013-6-7 09:23:25 | 显示全部楼层 来自 德国
zpjabcd 发表于 2013-6-6 22:54
你好,牛人,能问你个问题么,谢谢了

vumat程序中,用的模型是hill各向异性屈服准则,或者barlat各向异 ...

这个你要自己做差值啊,比如实际工作是150度,那么你要先计算100度和200度下的值,然后差值求150度下的值。
回复

使用道具 举报

 楼主| 发表于 2013-6-7 09:28:05 | 显示全部楼层 来自 天津
本帖最后由 haoyi891030 于 2013-6-17 19:36 编辑
billowriver 发表于 2013-6-7 09:19
按照你的公式,应该是先求应变梯度增量,那么就是在每个时间步里求塑性应变增量之差除以坐标差,然后加上 ...

这几天按照这个思路把程序编完了,计算的时候发现,还是不收敛,让应变梯度等于0那么就和蓝牙版主的经典弹塑性的UMAT计算结果一样了,感觉是应变梯度那还是存在问题,能帮我看看程序吗?
这是蓝牙版主的程序并附上INP文件:

然后是我的程序,也附上响应的INP
应变梯度具体插值如该文件:
两个模型一样,就是我的程序计算不收敛




本帖子中包含更多资源

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

×
回复

使用道具 举报

发表于 2013-6-7 11:22:33 | 显示全部楼层 来自 北京科技大学
billowriver 发表于 2013-6-7 09:23
这个你要自己做差值啊,比如实际工作是150度,那么你要先计算100度和200度下的值,然后差值求150度下的值 ...

谢谢了,今天有点思路了
回复

使用道具 举报

 楼主| 发表于 2013-6-19 10:05:22 | 显示全部楼层 来自 天津
nanjizhinan 发表于 2013-6-3 10:22
非线性方程首先在节点上进行各种迭代,迭代求出节点位移增量,转换成积分点应变增量,这时候进入你的umat, ...

这两天又想了想,这个UMAT就是通过传入的积分点的应变,应用定义的本构求出相应的积分点的应力,是不?
回复

使用道具 举报

 楼主| 发表于 2013-6-19 15:56:07 | 显示全部楼层 来自 天津
本帖最后由 haoyi891030 于 2013-6-25 14:38 编辑
winnerqin 发表于 2013-6-4 10:50
我传的文章,它是用UHARD和URDFIL配合实现,不是UMAT,我想UMAT也可以配合URDFIL来实现对节点信息的提取~
...

最近一段时间也学习了,这个子程序,老师们也提了一些方法,尝试了两种不同的方法,都行不通。我看过该子程序响应的一些例子,但是想要在结果文件里面读出节点信息,必须得知道节点号。ABAQUS计算的一些结果信息是可以读出来的么?如果我知道了单元号,那么相应的节点坐标以及节点位移是可以查找出来的?

最近一段时间,又看了一下该程序,发现应该是可以在UMAT里面套用,现在先做了一个例子,来输出指定单元节点,以及指定节点位移坐标,但是无论输出哪个单元,最终的节点号都是0,感觉这块还是存在点问题。你有没有用过改程序,请教一下!
回复

使用道具 举报

发表于 2013-6-20 10:46:54 | 显示全部楼层 来自 黑龙江哈尔滨
haoyi891030 发表于 2013-6-19 10:05
这两天又想了想,这个UMAT就是通过传入的积分点的应变,应用定义的本构求出相应的积分点的应力,是不?
...

必须是啊,本构不可能算在结点上啊
回复

使用道具 举报

 楼主| 发表于 2013-6-20 11:13:09 | 显示全部楼层 来自 天津
nanjizhinan 发表于 2013-6-20 10:46
必须是啊,本构不可能算在结点上啊

这样的话,还是需要节点的一些信心,来求应变梯度,正在寻找方法
回复

使用道具 举报

发表于 2013-6-24 16:35:01 | 显示全部楼层 来自 黑龙江哈尔滨
haoyi891030 发表于 2013-6-20 11:13
这样的话,还是需要节点的一些信心,来求应变梯度,正在寻找方法

理论上,一个的单元的哪个地方的应变都可以求出,只要知道结点的位移。看看你用的相应的单元的B矩阵,通过给出的积分点上的应变反算出结点的位移,这样可以吗?
回复

使用道具 举报

 楼主| 发表于 2013-6-25 08:50:07 | 显示全部楼层 来自 天津
nanjizhinan 发表于 2013-6-24 16:35
理论上,一个的单元的哪个地方的应变都可以求出,只要知道结点的位移。看看你用的相应的单元的B矩阵,通 ...

这个感觉有点难,当前积分点的应变等于响应的B矩阵*节点位移,但是B矩阵式与形函数有关系的,这就又涉及到节点信息了。我现在是通过URDFIL来寻找响应节点与位移这一步已经成功了,还差一点点,就是想寻求指定单元的节点号的时候总出问题,出不来结果。
回复

使用道具 举报

发表于 2021-7-18 15:21:08 | 显示全部楼层 来自 北京
好深奥。。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 23:49 , Processed in 0.055995 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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