首页/文章/ 详情

最简单的UEL方式?Abaqus的单元刚度矩阵的输入与输出

4月前浏览1326
在大型商业有限元软件Abaqus中,用户单元子程序UEL是一个重要的功能,其提供了对Abaqus的有限元内核最底层核心单元技术的二次开发。
一般情况下,进行UEL开发的技术要求是比较高的。只有深入了解了所要开发的单元的有限元本质,才能正确地开发UEL。就连Abaqus的帮助文档对于UEL的开发都进行了提示(UEL主要面向高级用户):
Warning:  This feature is intended for advanced users only. Its use in all but the simplest test examples will require considerable coding by the user/developer. “User-defined elements,” Section 32.15.1 of the Abaqus Analysis User's Guide, should be read before proceeding.
常规的UEL开发主要有两步,提供单元的刚度矩阵,提供单元的右端单元内力;尽管仅仅只有两步,但实现起来往往不可谓简单。
那么本文,主要提供一种简单,直接,迅速,有效的方式进行UEL开发,即直接输入单元刚度矩阵而不需要编写UEL对应的Fortran子程序。
这种方法只能用于线性计算,但是很明显是方便的。我们可以用熟悉的matlab/python等编程语言生成我们需要的刚度矩阵,然后直接输入到Abaqus里,Abaqus就会采用我们输入的刚度矩阵进行计算。另一方面,假设我们需要的刚度矩阵是从其他软件里导出来,采用这种方式也能快速将这个刚度矩阵用于Abaqus中的单元,而不需要完全猜测其他软件的单元采用的具体算法再去编写复杂的UEL.
在使用直接输入刚度矩阵的方法之前,我们顺便还介绍下Abaqus的刚度矩阵的输出,这在自己编写有限元程序和Abaqus进行精度对标时十分有用。

(一)单元刚度矩阵的输出方法

在Abaqus中,我们是可以把单元刚度矩阵输出的,具体方式是通过在inp文件中添加对应的关键字。
以以下的平面单元CPS4计算模型为例:
 
 
在提交计算生成inp之后,用文本编辑器打开inp文件,在倒数第二行添加输出单元刚度矩阵的语句:
*ELEMENT MATRIX Output,FILE NAME=CPS4,ELSET=Set-fix,Output FILE=USER DEFINED,STIFFNESS=YES

 
 
这里,File Name是要输出的文件名,ELSET是要输出的单元对应的单元集 合名称,Output FILE=USER DEFINED表明我们按照自己定义的文件名进行输出,stiffness=YES表明我们需要输出单元刚度矩阵。
修改inp后,注意要用command命令行的方式提交
 
 
计算完成后,在工作目录下会有个CPS4.mtx的文件,这个文件就是我们输出的单元刚度矩阵保存的文件,我们可以打开查看输出的单元刚度矩阵的具体数据。
 
 
 
 
注意这里由于单元刚度矩阵是对称矩阵,输出的是单元刚度矩阵的下三角部分,每行最多4个数据。

(二)单元刚度矩阵的输入方法

上面已经完成了单元刚度矩阵输出的方法,下面介绍输入单元刚度矩阵的方法。我们这里采用直接将上面的输出的单元刚度矩阵数据输入给abaqus。将原来的inp复 制,并修改内容大致如下:




























*Node      1,           0.,           0.      2,           1.,           0.      3,           0.,           2.      4,           1.,           2.*USER Element,LINEAR,NODES=4,TYPE=U11,2***MATRIX,TYPE=STIFFNESS15934065934.066    ,  3571428571.4286    ,  8791208791.2088     -14010989010.989    ,  274725274.72527    ,  15934065934.066     -274725274.72527    , -3296703296.7033    , -3571428571.4286    ,  8791208791.2088     -7967032967.0329    , -3571428571.4286    ,  6043956043.9560    ,  274725274.72527      15934065934.066    , -3571428571.4286    , -4395604395.6044    , -274725274.72527    , -1098901098.9011      3571428571.4286    ,  8791208791.2088      6043956043.9560    , -274725274.72527    , -7967032967.0329    ,  3571428571.4286     -14010989010.989    ,  274725274.72527    ,  15934065934.066      274725274.72527    , -1098901098.9011    ,  3571428571.4286    , -4395604395.6044     -274725274.72527    , -3296703296.7033    , -3571428571.4286    ,  8791208791.2088 *Element, type=U111243*Nset, nset=Set-all, generate 1,  4,  1*Elset, elset=Set-all 1,*UEL PROPERTY,ELSET=Set-all
主要需要修改的内容在上面已经标红,具体来说,就是定义一个TYPE=U1USER Element,赋值给其矩阵,再修改*Element让其使用定义的这个U1单元,最后还需要定义一下*UEL PROPERTY,ELSET=Set-all。至于其他的与材料相关的关键字如*Solid Section,*Material等都可以去掉。
修改后的inp全部内容如下:






























































































*Heading** Job name: CPS4-Matrix-UEL Model name: CPS4-Matrix-UEL** Generated by: Abaqus/CAE 2024*Preprint, echo=NO, model=NO, history=NO, contact=NO**** PARTS***Part, name=Part-1*Node      1,           0.,           0.      2,           1.,           0.      3,           0.,           2.      4,           1.,           2.*USER Element,LINEAR,NODES=4,TYPE=U11,2***MATRIX,TYPE=STIFFNESS15934065934.066    ,  3571428571.4286    ,  8791208791.2088     -14010989010.989    ,  274725274.72527    ,  15934065934.066     -274725274.72527    , -3296703296.7033    , -3571428571.4286    ,  8791208791.2088     -7967032967.0329    , -3571428571.4286    ,  6043956043.9560    ,  274725274.72527      15934065934.066    , -3571428571.4286    , -4395604395.6044    , -274725274.72527    , -1098901098.9011      3571428571.4286    ,  8791208791.2088      6043956043.9560    , -274725274.72527    , -7967032967.0329    ,  3571428571.4286     -14010989010.989    ,  274725274.72527    ,  15934065934.066      274725274.72527    , -1098901098.9011    ,  3571428571.4286    , -4395604395.6044     -274725274.72527    , -3296703296.7033    , -3571428571.4286    ,  8791208791.2088 *Element, type=U111243*Nset, nset=Set-all, generate 1,  4,  1*Elset, elset=Set-all 1,*UEL PROPERTY,ELSET=Set-all** Section: Section-1**Solid Section, elset=Set-all, material=Material-1**0.1,*End Part**  **** ASSEMBLY***Assembly, name=Assembly**  *Instance, name=Part-1-1, part=Part-1*End Instance**  *Nset, nset=Set-F, instance=Part-1-1 34*Nset, nset=Set-fix, instance=Part-1-1 12*Elset, elset=Set-fix, instance=Part-1-1 1,*End Assembly** ** MATERIALS** ***Material, name=Material-1**Elastic **2e+110.3** ----------------------------------------------------------------** ** STEP: Step-1** *Step, name=Step-1, nlgeom=NO*Static1., 1., 1e-051.** ** BOUNDARY CONDITIONS** ** Name: BC-1 Type: Symmetry/Antisymmetry/Encastre*BoundarySet-fix, PINNED** ** LOADS** ** Name: Load-1   Type: Concentrated force*CloadSet-F11000.** ** OUTPUT REQUESTS** *Restart, write, frequency=0** ** FIELD OUTPUT: F-Output-1** *Output, field, variable=PRESELECT** ** HISTORY OUTPUT: H-Output-1** *Output, history, variable=PRESELECT*End Step
之后再次用命令行提交。输入刚度矩阵的计算结果和原模型的计算结果对比如下:
 
 
二者计算结果完全一致,当然由于UEL单元的原因,后处理中无法显示出来,因此我们看不到UEL对应的单元和其他节点。有一种方式是在UEL单元的位置重叠一个刚度很小的单元,从而让其云图显示较为直观,这里我们不再进行该操作。另外,Abaqus明确说明,这种方式定义的单元只能用于线性计算。
上述内容中我们介绍了Abaqus中单元刚度矩阵的输出和线性计算时单元刚度矩阵的输入的方法,很显然,对于自编程序和Abaqus进行对标或者二次开发一个简单的弹性单元时,采用上述方法是十分简单有效的。
以上即是本文的全部内容,感谢阅读!!!
【全文完】


来源:有限元术
ACTAbaqus二次开发其他软件MATLABADS材料单元技术
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-04-08
最近编辑:4月前
寒江雪_123
硕士 | cae工程师 签名征集中
获赞 54粉丝 120文章 92课程 9
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈