首页/文章/ 详情

定义你自己想要的材料本构-Abaqus子程序之UMAT详解复合材料篇

1年前浏览2815

学习UMAT很久了,这是一个用于Abaqus/Standard模块的自定义材料本构的子程序,理论上无论何种形式的材料本构都可以在其中被定义,几乎可以用于任何力学分析过程,并被赋予在任何单元。

所以好了,有些材料本构比如复合材料渐进损伤模拟中,在模型里想对实体单元使用HASHIN准则、Linde准则、Tsai-Wu准则等等其他任意的复合材料损伤准则及相应的损伤演化,但在Abaqus自带的材料库中没有这些而我们又想通过Abaqus来进行模拟,这时候UMAT的作用就显现出来了,我们可以自己动手编写子程序实现没有的本构。

编写UMAT子程序难度较大的地方有两个方面:理论基础和程序编写。理论即是有限元计算的流程以及材料本构的理论;程序编写方面,Abaqus子程序使用的是Fortran语言,所以首先要对该语言有个了解,仅仅对编写子程序而言学会其基本语法即可,不需花大工夫学成一个Fortran程序设计高手。因此,Fortran语言不作介绍,下面讲讲理论方面。

一 有限元计算流程

下图详细展示了有限元计算的流程以及UMAT在整个计算过程作用的部位。

可以看出,UMAT作用为计算材料本构的刚度,作用时间段为每个分析步中的增量步起始到增量步结束。知道了这些,后面对UMAT程序里的各个变量及计算方法的含义就会有深刻理解。

二 UMAT代码解释

UMAT子程序与Abaqus主程序之间有数据的交互靠的是一些全局变量,如在增量步开始时主程序要将应力、应变等一些变量传入到子程序中,然后子程序开始运行,结束时把应力、应变、状态更新到主程序中,这样在下次继续调用子程序时这些变量能以全局变量的形式传入进来进行计算,所以一定要严格按照格式进行书写UMAT程序。

UMAT通用格式如下:

这段代码是每个UMAT程序共有的形式,用户不可删减,在其后面才可继续添加我们自己的代码。由上面的代码可以看出,每次调用UMAT程序需要很多参数,这些参数便是一个全局变量,由Abaqus主程序传入,子程序结束时一些变量需要更新进入主程序进行其他计算。

在UMAT中能获得的变量有:

-Stress,Strain,SDVs at the start of the increment

-Strain increment, rotation increment, and deformation gradient at the start and end of the increment

-Total and incremental values of time, temperature, and user-defined field variables

-Material constants, material point position, and a characteristic element length

-Element, integration point, and composite layer number (for shells and layered solids

-Current step and increment numbers

必须被定义的有:

-Stress, SDVs, and material Jacobian

可以被定义的有:

-Strain energy, plastic dissipation, and “creep” dissipation

-Suggested new (reduced) time increment

下面对UMAT中一些常见的变量进行解释:

DDSDDE(NTENS,NTENS)

        这是一个NTENS维的矩阵,叫雅可比矩阵,,即应力增量对应变增量的微分。DDSDDE(I,J)表示第J个应变分量的改变对第I个应力分量的改变的影响。通常这是一个对称矩阵。

STRESS(NTENS)

        应力张量矩阵,对应NDI个直接应力分量和NSHR个剪切分量。在增量步开始时由Abaqus主程序传入,增量步结束时由UMAT子程序进行更新,UMAT中的应力张量为柯西(真实)应力。

STATEV(NSTATEV)

        用于存储状态变量的矩阵,其维数等于关键字*DEPVAR定义的数值,由用户自己定义。状态变量是全局变量,是用户自己定义的变量,比如在复合材料损伤模拟中损伤变量即为状态变量。

PROPS(NPROPS)

        材料常数矩阵,等于关键字*USER MATERIAL中定义的数据列。

SSE,SPD,SCD

        每一个增量步的弹性应变能,塑性耗散和蠕变耗散,对计算结果没有影响仅仅作为能量输出。

KSTEP,KINC

        传到用户子程序当前的 STEP 和 INCREMENT 值

NOEL,NPT 

        积分点所在单元的编号和积分点的编号

PNEWDT

        可用来控制时间步的变化。如果设置为小于 1 的数,则程序放弃当前计算,并用新的时间增量 DTIME X PNEWDT作为新的时间增量计算;这对时间相关的材料如聚合物等有用;如果设为大余 1 的数,则下一个增量步加大 DTIM

E 为 DTIMExPNEWDT。可以更新。

STARIN(NTENS)

        UMAT中剪切应变分量为工程剪切应变而不是剪切应变张量。

使用UMAT时需要注意单元的沙漏控制刚度和横向剪切刚度。通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。这些刚度基于材料初始剪切模量的值,通常在材料定义中通过*ELASTIC定义。但在使用UMAT时,Abaqus对程序输入文件进行预处理时得不到剪切模量的数值。所以用户必须使用*HOURGLASS STIFFNESS来定义具有沙漏模式的单元沙漏控制刚度,使用*TRANSVERSE SHEAR STIFFNESS来定义板。壳、梁单元的横向剪切刚度。

三 编程

以一个简单的实现*ELASTIC功能的程序来初步了解一下UMAT的编写。

四  复合材料渐进损伤UMAT实现方法

复合材料渐进损伤的意思为当材料应力大于其极限强度值时,其刚度不会突变为0,而是有一个渐变的过程,如折减为原来的一半。这个法则作用于整个复合材料模型就形成了宏观的渐进损伤过程,这时候的载荷-位移曲线会有个极限值,然后进行衰减。

Abaqus自带一个HASHIN损伤准则,但这个准则只能用于2D模型或3D模型的壳单元,对于3向应力状态的实体单元只能自己编写子程序。下面重点介绍子程序的写法。

首先要了解程序设计的流程:

由此我们可以清楚的了解编写流程。


程序实例:


UMAT的学习总的来说是比较有难度的,需要把理论与编程都有了较好的掌握才可进行,但一旦掌握便有了一个利器,还是挺有意思的。后面有时间对金属本构模型UMAT做些介绍。

来源:SimSpace
Abaqus复合材料通用UM理论材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-09-06
最近编辑:1年前
小汪老师
签名征集中
获赞 15粉丝 36文章 19课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈