有限元理论基础及Abaqus内部实现方式研究系列8:UMAT用户子程序开发步骤(原创)

(原创,转载请注明出处)

==概述==

在CAE领域,从学校、实验室的自研算法到实现真正的商业化软件是一条无比漫长的道路。我们不研究有限元的新方法、新理论,只是研究商用有限元软件的实现方式。有限元的理论发展了几十年已经相当成熟,商用有限元软件同样也是采用这些成熟的有限元理论,只是在实际应用过程中,商用软件在这些传统的理论基础上会做相应的修正以解决工程中遇到的不同问题,且各家软件的修正方法都不一样,每个主流商用软件手册中都会注明各个单元的理论采用了哪种理论公式,但都只是提一下用什么方法修正,很多没有具体的实现公式。

有限元理论基础及Abaqus内部实现方式研究系列8:UMAT用户子程序开发步骤(原创)的图1

一方面我们查阅Abaqus软件手册得到修正方法的说明,另一方面我们自己编程实现简单的结构有限元求解器,通过自研求解器和Abaqus的结果比较结合理论手册如同管中窥豹一般来研究Abaqus的修正方法,从而猜测商用有限元软件的内部计算方法。在研究的同时,准备将自己的研究成果记录下来写成一个系列文章,希望对那些不仅仅满足使用软件,而想了解软件内部实现方法和想要突破商软接口限制的朋友有些帮助。由于水平有限,里面可能有许多错误,欢迎交流讨论。

==第八篇:UMAT用户子程序开发步骤==

用户子程序主要是将用户特定的材料本构模型和单元算法等公式编写为计算机语言表示的公式,并实现和商软求解器之间的交互迭代,UMAT用户自定义材料是其中比较重要的一类子程序。常用的商业有限元软件都提供了用户自定义子程序的功能,且一般都是Fortran语言开发,Fortran是上世纪70年代的语言,相对现代化的流行语言编写,格式要求非常严格,编译调试都比较繁琐,使得开发效率低下,而且接口限制较多,除了商软提供的功能外用户基本没法改动,灵活性较差。由于用户子程序很多都涉及复杂的公式编写,用户除了需要扎实的理论基础外,还需要较强的能将公式表达为Fortran语言的编程能力,这对非计算机专业出身的人来说往往在浪费了很多额外精力,使得很多理论高手都对用户子程序望而却步,难以入门。

Abaqus的UMAT设置.png

商软的用户子程序的内部都是采用dll动态链接库的形式实现的,商软只是规定好接口并设置触发寻找动态链接库的机制,譬如当发现关键词*User Material,主程序就调用指定dll中UMAT这个函数,至于这个dll是用什么语言编译过来的,主程序不会管,只要这个函数包括相同的变量名就行,主程序就会将数据传递到这些变量中,同时从规定的变量名中读取子程序的运行结果,整体流程和一般的混编语言开发类似。

Fortran的UMAT.png

如果了解了商软的用户子程序的实现原理后,完全可以用Matlab来代替Fortran开发子程序。在实际工作中,很多工程师用Matlab来编写和推导公式,Matlab被认为是市面上最接近草稿纸上推导公式的一款软件了,而且有限元在数值层面上的计算其实就是矩阵运算,所以Matlab这种数据按矩阵来组织非常适合用来开发有限元相关的程序。而现在市面上还没有采用Matlab来开发商软子程序的案例并不是dll混编语言的实现方式有多难,而是需要一种基于Matlab的调试方式,在Matlab中要重复商软的有限元流程,并实现和商软的双向接口。iSolver是市面上第一款基于Matlab来开发商软用户子程序的软件工具,支持用Matlab编写和调试用户子程序,并实现和Abaqus求解器的迭代调用。

Matlab的UMAT.png

本文首先简单的讨论了UMAT的一般含义,并详细的介绍了基于Fortran和Matlab两种方式的UMAT的开发步骤,对比发现开发步骤基本相同,同时采用Matlab更加高效和灵活。最后采用同一个算例验证两者分析结果完全一致,从而证明基于Matlab的UMAT的流程和结果的正确性。

基于Matlab的Abaqus的UMAT的开发.png

==演示视频==

https://www.jishulink.com/college/video/c12884

章节5:基于Matlab开发Abaqus的UMAT用户子程序,视频演示了基于Matlab的UMAT的开发步骤,并和Abaqus自带材料对比证明结果的正确性。

==总结==

基于Fortran和Matlab两种方式的UMAT的开发步骤和开发工具如下表:

项次

步骤

基于Fortran的开发工具

基于Matlab的开发工具

1

材料参数设置

Abaqus/CAE Abaqus/CAE

2

编写

文本编译器

Matlab

3

编译

VS+iVF

无需编译

4

调试

VS+iVF+DUS插件

Matlab+iSolver插件

5

运行

Standard.exe+UMAT.for

iSolver.exe+UMAT.m

6

关联Abaqus

/

Standard.exe+UMAT.m

详细研究方法,见附件:

有限元理论基础及Abaqus内部实现方式研究系列8:UMAT用户子程序开发步骤(原创)的图6有限元理论基础及Abaqus内部实现方式研究系列8:UMAT用户子程序开发步骤(SnowWave02 20190213).pdf

==以往的系列文章==

第一篇:S4壳单元刚度矩阵研究。介绍Abaqus的S4刚度矩阵在普通厚壳理论上的修正。

http://www.jishulink.com/content/post/338859

第二篇:S4壳单元质量矩阵研究。介绍Abaqus的S4和Nastran的Quad4单元的质量矩阵。

http://www.jishulink.com/content/post/343905

第三篇:S4壳单元的剪切自锁和沙漏控制。介绍Abaqus的S4单元如何来消除剪切自锁以及S4R如何来抑制沙漏的。

http://www.jishulink.com/content/post/350865

第四篇:非线性问题的求解。介绍Abaqus在非线性分析中采用的数值计算的求解方法。

http://www.jishulink.com/content/post/360565

第五篇:单元正确性验证。介绍有限元单元正确性的验证方法,通过多个实例比较自研结构求解器程序iSolver与Abaqus的分析结果,从而说明整个正确性验证的过程和iSolver结果的正确性。

https://www.jishulink.com/content/post/373743

第六篇:General梁单元的刚度矩阵。介绍梁单元的基础理论和Abaqus中General梁单元的刚度矩阵的修正方式,采用这些修正方式可以得到和Abaqus梁单元完全一致的刚度矩阵。

https://www.jishulink.com/content/post/403932

第七篇:C3D8六面体单元的刚度矩阵。介绍六面体单元的基础理论和Abaqus中C3D8R六面体单元的刚度矩阵的修正方式,采用这些修正方式可以得到和Abaqus六面体单元完全一致的刚度矩阵。

https://www.jishulink.com/content/post/430177

(2条)
默认 最新
很厉害,学习到了
评论 点赞
作者您好,作为刚刚开始尝试学习umat的小白,在了解到MATLAB在UMAT中的可行性后很受鼓励。同时想请教一下您,iSolver的插件如何获取呢?谢谢您
评论 1 点赞
回复
在下面网页下载:http://www.jishulink.com/content/post/337351
评论 点赞
点赞 16 评论 3 收藏 10
关注