matlab有限元分析与应用_专栏 | UEL用户子程序开发步骤—有限元理论基础及Abaqus内部实现方式研究系列20...

作者介绍

e29fa28ab38d262e01a91ef3301b4ffc.png

snowwave02

博士,高级工程师

snowwave02团队:设计仿真领域的软件开发团队,由软件、机械、物理等专业人员组成,10年以上CAD/CAE软件开发经验,精通Abaqus二次开发,承接过多个航天、航空、船舶、机械等行业大型设计仿真类项目,具有丰富的实战经验。 文末附作者团队《基础理论->Abaqus操作->matlab编程》免费视频教程,讲解线性的应变在商软或者自主软件中在单元中实现。 本文由作者原创发布于技术邻平台,转载需作者授权。

概述

本系列文章研究成熟的有限元理论基础及在商用有限元软件的实现方式。 有限元的理论发展了几十年已经相当成熟,商用有限元软件同样也是采用这些成熟的有限元理论,只是在实际应用过程中,商用CAE软件在传统的理论基础上会做相应的修正以解决工程中遇到的不同问题,且各家软件的修正方法都不一样,每个主流商用软件手册中都会注明各个单元的理论采用了哪种理论公式,但都只是提一下用什么方法修正,很多没有具体的实现公式。 商用软件对外就是一个黑盒子,除了开发人员,使用人员只能在黑盒子外猜测内部实现方式。 faf4838408be19ec1def062e4683bbb8.png 一方面我们查阅各个主流商用软件的理论手册并通过进行大量的资料查阅猜测内部修正方法,另一方面我们自己编程实现结构有限元求解器,通过自研求解器和商软的结果比较来验证我们的猜测,如同管中窥豹一般来研究的修正方法,从而猜测商用有限元软件的内部计算方法。 我们关注CAE中的结构有限元,所以主要选择了商用结构有限元软件中文档相对较完备的Abaqus来研究内部实现方式,同时对某些问题也会涉及其它的Nastran/Ansys等商软。为了理解方便有很多问题在数学上其实并不严谨,同时由于水平有限可能有许多的理论错误,欢迎交流讨论,也期待有更多的合作机会。 iSolver介绍视频 (复制链接至浏览器打开) http://www.jishulink.com/college/video/c12884

UEL用户子程序开发步骤

用户子程序主要是将用户特定的材料本构模型和单元算法等公式编写为计算机语言表示的公式,并实现和商软求解器之间的交互迭代。 常用的商业有限元软件都提供了用户自定义子程序的功能,且一般都是Fortran语言开发,Fortran是上世纪70年代的语言,相对现代化的流行语言编写,格式要求非常严格,编译调试都比较繁琐,使得开发效率低下,而且接口限制较多,除了商软提供的功能外用户基本没法改动,灵活性较差。由于用户子程序很多都涉及复杂的公式编写,用户除了需要扎实的理论基础外,还需要较强的能将公式表达为Fortran语言的编程能力,这对非计算机专业出身的人来说往往在浪费了很多额外精力,使得很多理论高手都对用户子程序望而却步,难以入门。 在实际工作中,很多工程师用Matlab来编写和推导公式,Matlab被认为是市面上最接近草稿纸上推导公式的一款软件了,而且有限元在数值层面上的计算其实就是矩阵运算,所以Matlab这种数据按矩阵来组织非常适合用来开发有限元相关的程序。而现在市面上还没有采用Matlab来开发商软子程序的案例。iSolver是市面上第一款基于Matlab来开发商软用户子程序的软件工具,支持用Matlab编写和调试用户子程序。iSolver子程序的接口完全按照Abaqus的标准实现,而Abaqus的子程序接口在近几年内已经基本不再变化了,同样的,虽然iSolver在不断发展,但iSolver子程序接口将维持不变,所有在iSolver上编写的算法子程序都只要维护自己的算法部分就行,而不是维护整个有限元求解的整个过程。 前面第八、九篇介绍了UMAT用户自定义材料的开发,这里将介绍UEL用户自定义单元的开发,本文首先简单的讨论了UEL的一般含义,并详细的介绍了基于Fortran和Matlab两种方式的UEL的开发步骤,对比发现开发步骤基本相同,同时采用Matlab更加高效和灵活。具体的开发过程可以参考下面我们的Step by Step的录像,包括了整个的有限元基础理论和我们对Abaqus中的单元理解(复制至浏览器打开): https://www.jishulink.com/college/video/c14948 深入浅出有限元:基础理论->Abaqus操作->matlab编程

f006c7ecec29da58f7ac4b857056b766.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png 1.1 UEL的关键输入输出参数 UEL网上资料很多,大家可以很容易查看,但大部分资料都只是简单提供UEL算例,这里我们列出了UEL接口的关键输入输出参数,如下表所示:

3c4598d0e59a69c43bc0897276fbfc68.png

b04e08b190ac23404ff1177fb24caf5b.png d4b4f36f3b8bed4f8c2e909ed0a8d06b.png 1.2 基于Fortran的Abaqus的UEL的开发步骤

1.2.1 在inp文件中定义UEL

Abaqus中只能通过修改手动inp文件完成用户UEL的定义,通常包含以下关键字及相应属性,如图所示:

e72210ab7d6f92482c91f38cffbc9a2b.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png
*User element关键字,用于定义单元基本信息,包括以下属性: nodes为单元节点数; type为单元类型,U表示为用户自定义单元,1001表示单元类型编号,一般从1000开始; properties为浮点数属性个数,一般用于输入单元对应的section数据和材料数据; coordinates为坐标维数; variables为状态量个数,一般求解计算过程中需要在迭代步之间传递的变量; 第二行开始定义节点激活的自由度; *Uel property关键字,与*User element关键字中的properties对应,第二行开始定义具体的数据。

1.2.2 编写

使用任意编辑器编写.for文件,推荐使用Visual Studio Code,微软开源的轻量化代码编辑器,配置灵活高效:

cf35d5469f3ac48994ea3542efdff422.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png

1.2.3 编译(可选)

Abaqus没有自带Fortran编译器,所以用户需要自己去安装Fortran编译器和Visual Studio Build Tools,并配置相应环境。具体配置过程与UMAT一致,可以查看我们关于环境配置的视频(复制至浏览器打开): https://www.jishulink.com/college/video/c13034?chapter=1 在环境配置完成之后,打开命令提示框,输入命令Abaqus make Library=XXX.for,即开始编译,编译过程中的警告和错误都会打印在命令提示框内。

1.2.4 运行

运行有两种方法,第一种就是在命令提示框中输入Abaqus job=XXX user=XXX.for,如下图所示。

1c3333775edbd28077e77f9a15722aef.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png

第二种就是在Abaqus中创建基于inp文件的任务,然后选择对应的用户子程序for文件,在任务管理器中提交运行,如图所示。

75230a282afd789ddf73856d14986d06.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png 至此,基于Fortran的UEL开发流程已经完成,但结果的正确性还需要更加细致的验证,为更方便的查找问题,建议先采用单个单元调试UEL,在确保单个单元正确后再将UEL用于实际问题。

1.2.5 调试(可选)

如果想要知道代码的运行结果是否和预期的一致,一种笨办法是用print打印到log文件中,高效的方法是采用断点调试的方法进行运行中的调试。

baa3a85e86489743fb8a142a78f96ded.png

Abaqus支持命令行调试,不过命令行反复运行也比较繁琐,用户也可选择用一键调试Abaqus的用户子程序的DUS插件工具。DUS(Debug User Subroutine)是集成在ABAQUS/CAE中的一个插件,能够一键启动用户配置的用户子程序开发平台(如Visual Studio 2008等),并进入对用户定义子程序的单步调试模式。

9f8d0eaef466ba89d4a39d65d6927dd7.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png 有兴趣的可到下面网页下载使用。 Abaqus用户子程序调试插件(复制至浏览器打开): https://www.jishulink.com/content/post/424513

1.3 基于Matlab的iSolver的UEL开发步骤

基于Matlab的Abaqus的UEL具体开发步骤和Abaqus类似,只不过某些步骤需要用到自研有限元求解器开发平台iSolver。

1.3.1 在inp文件中定义UEL

与Abaqus相应的操作一致,如图所示:

e72210ab7d6f92482c91f38cffbc9a2b.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png

1.3.2 编写

在Matlab中创建并编写U1001.m的文件,放入Abaqus工作目录下。该文件只包括一个U1001函数,接口和Abaqus的接口参数完全一致,功能也是计算应力应变关系和当前应力状态等,相对Fortran,利用Matlab可以更容易的编写计算公式,同时可以利用Matlab在矩阵计算中各种强大功能和算法库。因为Abaqus的UEL接口和计算功能各个版本相对固定,这个matlab的UEL接口参数也相对固定,不会因为iSolver的版本不同而重新修改接口。

f8e197915f293f20031107047f99b416.png

1.3.3 编译(无)

由于matlab是脚本语言,不需要编译。

1.3.4 调试(可选)

在Abaqus菜单栏的Plug-ins里选择iSolver插件的菜单。

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png

b72af93e092385a3ec6b1dfde2ceca42.png

点击iSolver->Engine,按照下图所示,在功能项Use Solver中选择iSolver,在Source Type里面选择Matlab,勾选Debug。点击Submit进行调试运行。

79675f306b647bf6961af4cfe95408e2.png

程序会自动打开matlab并加载U1001.m文件,手动打上断点

8482b996b70f3faa033457f65af2221b.png

点击在Debug菜单下的Run U1001运行。 程序将在断点处停止,且将鼠标移动到需要调试查看的参数上,能够查看到对应的值。

53bbb2b3174d846010d6ed79a6b6b4da.png

d4b4f36f3b8bed4f8c2e909ed0a8d06b.png 按F10可以进行单步调试。

1.3.5 运行

在上述步骤的基础上去掉勾选Debug选项,点击Submit运行计算,此时将采用iSolver求解器联合U1001.m进行求解分析,运行完毕点击Result在Abaqus中查看结果。

1.4 算例

具体的壳理论和在iSolver中实现的UEL算例可以参考下面的视频(复制至浏览器打开): https://www.jishulink.com/college/video/c14948 深入浅出有限元:基础理论->Abaqus操作->matlab编程

f006c7ecec29da58f7ac4b857056b766.png

总结

本文首先简单的讨论了UEL的一般含义,并详细的介绍了基于Fortran和Matlab两种方式的UEL的开发步骤,对比发现开发步骤基本相同,但Matlab更加高效和灵活。同时,由于iSolver基本单元类型和Abaqus算法完全一致,可以发现同一个算例验证两者分析结果完全一致,从而证明基于Matlab的UEL的流程和结果的正确性。 UEL的开发一方面要有扎实的公式推导能力,另一方面需要基础的编程能力和开发工具应用水平,后者不是重点,但往往浪费了大家很多的精力,善用工具方能提高效率,基于Fortran和Matlab两种方式的UEL的开发步骤和开发工具如下表:

c10485ac469d47f0c2fb0fdfbffdfc40.png

如果有任何其它疑问或者项目合作意向,也欢迎在技术邻私信我们。 参考下面的视频:

优质免费课程

《深入浅出有限元:基础理论->Abaqus操作->matlab编程

fa164799c80ac394ee06f79a481c017b.png

(一)课程简介 深入浅出有限元课程采用:   1.PPT基础理论讲解   2.Abaqus软件操作演示   3.matlab编程演示和学员本机练习 三者结合的方式将复杂繁琐的结构有限元通过简单直观的方式帮助大家入门,同时深入到编程层面了解理论和商业软件的内部实现原理。 (二)适合人群 可能对下面四类人员有用:   1.对有限元理论不甚了解,看书觉得公式太复杂难以理解的初学者。   2.不仅仅满足于操作商用CAE软件,还希望了解有限元软件内部实现方式的探索者。   3.追求实现自主CAE软件,但从头开发又无从下手的国内自主工业软件的开拓者。   4.在实际工程中想要实现自定义单元、材料等的CAE领域应用工程师。 (三)工具下载 视频中需用到自主的有限元求解器开发平台iSolver,下载(复制至浏览器打开): http://www.jishulink.com/content/post/337351 (四)主要内容 第一部分:01.总体介绍   1.课程目标和介绍   2.静力和模态分析浅谈   3.有限元近似和增量迭代法流程   4.两行代码实现最简单壳单元 第二部分:02.S4R拉伸算例:   1.虚功原理、一般单元刚度矩阵推导、壳单元分类、等参空间   2.壳单元薄膜刚度算法步骤   3.matlab编程Step By Step演示   4.原理剖析 第三部分:03.软件介绍   1.商用结构有限元软件Abaqus介绍   2.自主有限元开发平台iSolver介绍 第四部分:04.S4面内弯曲算例 第五部分:05.S4的模态分析算例 第六部分:06.提高与练习 水平有限,如果在观看的过程中对你有所帮助,我们将非常欣慰。 同时,欢迎留言交流讨论,多多批评指正,也期待有更多的合作机会,可以在技术邻私信我们团队。 《系列免费课程》

b7e7d7bb96118bb331a0fe7d7566eb83.png

-END-

 往期热文推荐 

中国企业仿真缺什么?

划分网格前,先简化模型

推荐几本力学和有限元的书

19种查找国内外文献的途径,实用!

这样做动力学分析,存在巨大隐患

c0a57cf47e5ee38a7090c686d50206d2.gif 点击阅读原文,免费观看优质免费课!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值