Abaqus用户子程序USDFLD:让分析更灵活

hello,小伙伴们大家好。今天是2020-12-30,周三,天气凉爽。本来是准备昨晚发的,写了一半,想休息一下看看电影,一发不可收受,直接看到12点,裂开。托了一天。sorry。

*1 今日任务*

那我们就开始今天的教学吧,今天的任务是,实现弹性模量随着应变率变化。其实可以有两个办法,一种是借助于USDFLD。还有一种是用UMAT,因为如果只涉及到弹性的话,不会很复杂,也是可以作为例子讲的。今天就讲第一种办法,USDFLD。

可以看到今天其实是帮一位b站的元老级粉丝做的小例子,多元老呢,是我刚在b站写专栏的时候,就已经关注我了,也很支持我,然后我答应它的UMAT也没写,惭愧惭愧。

我一直都秉承着不会去帮大家做一些特别具体的例子,其实想着让你们跟我的教学自我成长,思维的自我发散,自己做去一些尝试。那样你们自己学的会更多,老是看教学,不练习是没用的。但是....

总有例外,一般符合下面两个条件的,我也会讲的。一来是,所提的需求,我迟早会讲的,但是还没有讲过。二来是,自己是真的想了很久,然后没有思路的。比如今天这的这个例子。老粉丝问了很久,时隔很多天,才给我第二次留言。说了很多话,从他的字里行间我是能感受到他是真的想了很久的。其实在他今天联系我之前我就已经写了一半了,就是昨天写的,然后看电影耽误了,我个人感觉这个例子挺好的,不是特别难,但是却很有代表性。适合练习子程序。

下面就开始今天的教学吧。

*2 子程序接口*

首先在帮助文档里,找到子程序的接口。

*3 形参意义分析*

每个子程序的这一步都至关重要,你只有彻底了解你的子程序,才能出神入化的运用。

这次的形参有挺多的,我只介绍两个最重要的。分别是FIELD以及STATEV,这两个其实也是待定义的变量。剩下的形参意义大家自己看帮助文档。

1 FIELD

这个东西,其实大家在前处理看到过。但是你们应该没用过。

大家在cae里定义材料属性的时候,很多属性都会有这个东西,叫做field variables,我也不晓得怎么翻译比较好,翻译成场变量感觉怪怪的。我就叫英文名,大家体会一下。

我没说错吧,你们应该经常会看到,但是你们可能很少会用到。这个功能是干什么的,我在举个例子,大家就会很清楚了。

这个与温度相关的选项,大家应该是比较常用的。那么这个filed variable与这个temp-dependent,在功能上是一模一样的。什么意思呢,一个是与温度相关,比如这里假如材料的弹性模量与温度相关。但是有些情况,往往不止与温度相关,比如我们今天要做的就是弹性模量与应变速率相关。但是cae又没有这个选项,所以他给你提供了一个特别牛逼的子程序,USDFLD。你的材料属性,可以与任何变量相关,这个变量被广义化成field variables。

如果你的材料模型与1个因素相关,在变量一栏就写1。如果与两个因素相关,就写2。以此类推,我应该解释清楚这个是什么东西了吧。

那么我们今天要做的是,弹性模量只与应变速率一个因素有关,所以这里的field variables填1就行了。

子程序里的FIELD变量是个数组变量,数组的元素个数,就是你在前处理定义的field variables个数。所以我们今天的例子里,FIELD数组里只有一个元素。这么做好之后,剩下的时间里,就是在子程序里判断FIELD的值是多少了。so,先别着急。我再介绍一个更为牛逼的形参。STATEV

2 STATEV

这个东西之强大,它的名字叫做状态变量。为了它,abaqus甚至单独出了一个子程序SDVINI来定义初始状态值。

他的功能是,在子程序内部,以及不同的子程序之间传递数据。这么干巴巴的讲,没什么意思。

我决定后面单独出一期讲这个状态变量。特别的灵活,好用而且重要。这个内容挺大的,今天应该讲不完。后面我肯定会讲到。特别的重要。

*4 建立模型*

调试子程序,模型越简单越好,大家要记住。想调试umat那种,一般都用一个单元。

今天就建立一个拉伸的模型,只用坯料。

1 几何模型

模型用对称模型,算的快。高度30mm,半径10mm。

2 材料模型

材料给个密度和弹性模量。密度是2.7e-9 t/mm3。弹性模量与应变速率相关,所以要先在前处理定义好。比如,我写成下面这种,我随便写的。

本来我式想对比比较明显,给的数据差别大,但是后面分析的时候,不收敛,所以给的数据也不能过余离谱。如下就是比较合适的:

最后还需要选上user Defined Field,让子程序起作用。以及状态变量Depvar,数量给个1。今天我们不用它,下次我会单独讲这个。

到这里,还不够,还需要再加一句才能是USDFLD起作用。编辑关键字的step前面加一句:

到此为止,才算激活USDFLD,是不是有点麻烦。

3 分析步

Implicit,动力学隐式分析步。因为要比较不同变形速率下的,去验证子程序的效果。所以做了3个不同时间的对比,0.1s、1s、10s。

4 载荷

为了简单,就不用模具了,直接在料上加边界条件就行了。下端全约束,左端对称。上端面拉伸10mm。

*5 写子程序*

模型建好之后,就是写子程序了。这个子程序也好写,只需要把FIELD的值给成当前积分点的应变速率就行了。

但是,不知道大家有没有发现,你的形参里并没有材料积分点的相关数据。那我们怎么知道这个应变速率到底是多少呢。

你能想到的问题,abaqus已经帮你解决了。

开始介绍的时候,如果你仔细看,会有这么一句话。你想获得材料积分点的数据,必须要用通用子程序GETVRM。所以我们还有学一个GETVRM,这个怎么用呢,当然继续往下找:

找到通用子程序的位置,大家仔细看看有个印象。这里面有两个重要变量的我都圈起来了。一个是“VRA",指的是输出的变量,通俗点说,你想提取什么数据。第二个是ARRAY,相当于是返回值,储存你需要的数据。我应该说清楚了吧。

因为是应变速率相关,所以找到应变速率的输出变量。“ER”。

后面的就简单了。写在子程序里的,其实就两句话,一句调用,一句赋值。是不是很简单。

下面就测试一下子程序:

*6 测试与调试子程序*

新建job,然后提交即可。大家自己写的时候,遇到子程序出错是很正常的,没有人写程序能一次性成功的,沉下心来找找错。我自己写的时候,给大家看的都是我做好的。看起来好像很容易,其实,也是我一个人慢慢琢磨了许久,才会写出来的。所以,都是不容易的,写程序切记心浮气躁。

提交了3个job。这3个job的区别是时间上的差别,对应了3种应变速率。

结果如下:

大家可以看到,上图,从左到右分别对应了0.1s、1s、10s的结果,即3种不同应变速率下的结果。可以看出,他们的应力场分布是类似的,但是值是不同的。最高值分别为3e3、2.8e3、2.3e3。这就证明了,应变速率快的,弹性模量大,与前处理我们设定的趋势是相同的。表明我们的子程序是没问题的。

我只写了两个简单的话,就能做到这样。大家可以想象一下,这个子程序的自由度有多高???

这个图,是3应变速率的场量,是利用状态变量SDV输出成场量展示出来的。我今天没讲这个,所以大家在做的时候,是没有的,我后面会单独讲。

但是如果你真想输出这个,是不用这么麻烦的,场变量管理器就有。那么SDV的意义何在,思考一下。

那么我们今天的教学就到此结束了。我讲的例子很简单,大家根据这个例子可以拓展成各种各样的复杂模型。所谓万变不离其宗,我就是用简单的例子,讲明白这个宗是什么,具体怎么变,需要看各位自己了。

谢谢我的粉丝提供一个好的素材。也希望我的答案你能满意。我们下期见,88

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空