Abaqus中材料参数不为常数的3种处理方法
2017-03-01 by:CAE仿真在线 来源:互联网
1、目地
在有限元计算中,可能会碰到材料参数(这里以线弹性材料弹性模量E为例)在模型中并不为常值的情况,例如,E与某一坐标相关。大家知道,abaqus材料中材料是在*section对截面属性定义的时候对单元组进行赋值的。并且GUI中也没有提供变参数的接口(这里顺路提一下,载荷是可以通过函数给出变载荷的,GUI中有接口)。这就需要我们采取一些特殊的措施。本教程给出3种行之有效的方法,它们分别是:(1)编辑inp文件,(2)使用Umat,(3)Python脚本
2、方法
方法 |
要求 |
难度 |
编辑inp |
会一门编程语言,能够完成对文本文件的读取和写入 |
4星 |
使用Umat |
会使用abaqus的Umat用户子程序,计算文件中不需要使用其它的用户子程序 |
3星(如果对abaqus用户子程序不熟悉,则为5星) |
Python脚本 |
会python基础,对python编写abaqus脚本了解 |
3星(如果对python脚本不熟悉,则为5星) |
同样是根据坐标确定材料参数,使用Umat时,可以直接通过abaqus用户子程序自带的子函数直接获得单元的节点坐标,进而通过坐标确定材料参数;而使用编辑inp的方法则需要首先通过编写程序对你已经生成的inp文件(包含节点、单元信息)进行读取,之后对每一个单元进行材料赋值,而python脚本可以直接通过命令来给每个单元赋材料。从这方面讲,对熟悉Umat和Python的用户而言,使用Umat或Python解决这个问题更为方便。上表中给出3两种方法的一些基本要求,编辑inp文件的方法要求更低,它通过直接编辑inp文件的方法来实现。而使用Umat和Python的方法要求更高,需要用户对子程序和Python有一定的了解,并且也需要会一门编程语言。
3、编辑inp方法的简单实施过程
以Fortran+VS为例,在编辑inp文件时,涉及到了单元节点信息的读取、计算单元(质心)坐标、计算弹性模量E、和输出这几个子程序。如图1所示,prereadnew为读取节点、单元信息子程序;processmat为通过单元坐标计算弹性模量子程序;writeabaqus为输出子程序。各个子程序的详细信息这里不再赘述,有兴趣或者有需求的同学可以关注文章最后的公众号或者和作者私下联系。
图1 项目及子程序
图2 inp文件读取子程序(部分代码)
图3 inp文件输出-材料部分(部分代码)
通过以上叙述不难发现,通过编辑inp文件可以较好的解决材料参数不为常数的情况。但是,这需要用户具有一定的编程基础,对abaqus的inp计算文件有一定的了解。同理,在其它软件进行有限元计算时,也可以通过编辑计算文件的方法来解决材料参数不为常值得情况。
4、Umat方法的简单实施过程
作为Abaqus提供的用户自定义子程序中的一种,Umat为用户自己定义一种新的材料提供了接口。UMAT子程序具有强大的功能,使用UMAT子程序:
(1)可以定义材料的本构关系,对ABAQUS 材料库进行扩充;
(2)几乎可以将任何本构关系运用到ABAQUS中的任何单元中;
但是,用户必须在UMAT中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量的变化率,而实际上,这也是Umat子程序最主要的任务。
承前所述,由于假定弹性模量与坐标相关,使用Umat子程序的首要任务就是找到弹性模量E和坐标之间的关系;之后,才是根据坐标得到弹性模量和泊松比之后对DDEDDS的编写。这里,依据Abaqus的帮助文档,给出了Umat子程序中一些变量的定义:
图4 Abaqus提供的Umat函数接口
图5 部分Umat变量定义
详细的参数介绍大家可以查看abaqus帮助。不难发现其中并不包含有单元或者节点的坐标信息,但是却包含有单元的单元编号信息(NOEL)。而通过单元编号又可以关联起来单元的坐标。
图6 线弹性材料的DDEDDS
图6中EMOD=PROPS(1)*A(NOEL)/0.125 就是根据单元NOEL的坐标确定其弹性模量的语句,不难看出这个弹性模量是INP文件中给定的值得A(NOEL)/0.125倍,其中A数组并不是自定义的数组,为单元的坐标值数组。
5、imp和Umat算例
对于如图8所示的4阶魔方结构,x轴左端面约束x方向自由度,x轴右端面加载位移。材料弹性模量由约束面到加载面分别为10、30、50、70GPa,而其对应的单元质心x轴坐标分别为0.125、0.375、0.625、0.875。图8中所示云图为单元应变E11。
图7(a) 计算文件-材料部分-inp编辑方法
图7(b) 计算文件-材料部分-Umat方法
图8 算例结果
6、Python脚本实现
Python大法在abaqus前后处理中具有举足轻重地位和天然的优势,通过python给单元赋材料属性非常简单,本例中,假设每个单元的弹性模量不一样,并且是一个函数,我们的思路就是遍历所有的单元,给每一个单元定义一种材料。具体实现如下:
1.模型
以简单的Cube模型为例,如图1,注意由于我们是遍历单元赋材料,Abaqus中模型必须在划分好网格后再进行赋材料属性。
图1 网格模型图
2. python脚本
下面的代码较为简单,注释也比较清楚,本例中的E的变化是贴主随意给的,实际中E可能是各种形式,具体案例具体分析。
3.结果
赋材料后,以材料区分来显示模型,可见每个单元的材料都不一样,在模型树菜单也可以看到,python脚本建立了125种材料(共125个单元)
图2 不同单元的材料
图3 计算结果
7、总结
我们介绍的三种方法都能很好的解决材料参数不为常数的问题,编辑inp和python对单元较少时运行效率较高,但是单元较多时,Umat用起来可能更方便,三种方法大家可以都尝试一下
最后伙伴们可以长按扫描下面二维码关注我的公众号‘CAE仿真实验室’哦,我们将定期给大家分享有限元仿真干货,谢谢~
相关标签搜索:Abaqus中材料参数不为常数的3种处理方法 abaqus分析培训 abaqus技术教程 abaqus岩土分析 钢筋混凝土仿真 abaqus分析理论 abaqus软件下载 abaqus umat用户子程序编程 Abaqus代做 Abaqus基础知识 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训