作者介绍

snowwave02

博士,高级工程师

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

概述

本系列文章研究成熟的有限元理论基础及在商用有限元软件的实现方式。有限元的理论发展了几十年已经相当成熟,商用有限元软件同样也是采用这些成熟的有限元理论,只是在实际应用过程中,商用CAE软件在传统的理论基础上会做相应的修正以解决工程中遇到的不同问题,且各家软件的修正方法都不一样,每个主流商用软件手册中都会注明各个单元的理论采用了哪种理论公式,但都只是提一下用什么方法修正,很多没有具体的实现公式。商用软件对外就是一个黑盒子,除了开发人员,使用人员只能在黑盒子外猜测内部实现方式。一方面我们查阅各个主流商用软件的理论手册并通过进行大量的资料查阅猜测内部修正方法,另一方面我们自己编程实现结构有限元求解器,通过自研求解器和商软的结果比较来验证我们的猜测,如同管中窥豹一般来研究的修正方法,从而猜测商用有限元软件的内部计算方法。我们关注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编程

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

1.2 基于Fortran的Abaqus的UEL的开发步骤

1.2.1 在inp文件中定义UEL

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


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

1.2.2 编写

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

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,如下图所示。

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

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

1.2.5 调试(可选)

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

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

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

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

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

1.3.1 在inp文件中定义UEL

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

1.3.2 编写

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

1.3.3 编译(无)

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

1.3.4 调试(可选)

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

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

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

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

按F10可以进行单步调试。

1.3.5 运行

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

1.4 算例

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

总结

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

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

优质免费课程

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

(一)课程简介深入浅出有限元课程采用: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.提高与练习水平有限,如果在观看的过程中对你有所帮助,我们将非常欣慰。同时,欢迎留言交流讨论,多多批评指正,也期待有更多的合作机会,可以在技术邻私信我们团队。《系列免费课程》

-END-

 往期热文推荐 

中国企业仿真缺什么?

划分网格前,先简化模型

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

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

这样做动力学分析,存在巨大隐患点击阅读原文,免费观看优质免费课!

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

  1. abaqus6.13+vs2012+ivf2013用户子程序关联步骤

    abaqus6.13+vs2012+ivf2013用户子程序关联步骤 之前笔者在论坛上也是找了很多方法和关联步骤,许多步骤都十分繁琐,不容易懂,实在看不懂作者的心思.下面简要介绍怎么操作: **1.* ...

  2. 美发店预约系统开发的作用_分享美发店预约系统开发步骤

    在线可以先查看美发店提供的服务项目,可以查看项目的价格.商家介绍和目前的预约人数等详情,用户掌握了信息之后就能直接预约位置,可以自己选择到店的时间,有变动的话可以在线随时的取消预的,非常的方便.而目, ...

  3. 基于matlab的频率特性测试仪,基于MATLAB的频率特性测试仪_终稿

    基于MATLAB的频率特性测试仪_终稿 (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 基于MATLAB的低频频率特性测试虚拟仪器设 ...

  4. matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...

    Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1   str1   for   max   imp   mda   eva   目录   xls clear;clc; clo ...

  5. houseparty不流畅_重新设计Houseparty –用户体验案例研究

    houseparty不流畅 Houseparty has become very popular during the COVID-19 period because it helps you con ...

  6. 【资源分享(免积分)】增长黑客_创业公司的用户与收入增长秘籍 - 范冰(高清版免费).pdf

    增长黑客_创业公司的用户与收入增长秘籍 - 范冰.pdf 高清版pdf,可以高清阅读,欢迎下载 链接:https://pan.baidu.com/s/1hRcLzR68WwBDnXp1xe_75Q 密 ...

  7. matlab频率域滤波器,频率域滤波的MATLAB设计与实现_课程设计

    频率域滤波的MATLAB设计与实现_课程设计 综合课程设计设计题目 频率域滤波的 MATLAB 设计与实现专业名称班级学号学生姓名指导教师设计时间目 录摘 要 .- 3 -1. 数字图像处理 - 1 ...

  8. 【Matlab】数学建模_变异系数法

    [Matlab]数学建模_变异系数法 1.基本思想 2.数据集介绍 3.文件结构 4.详细代码及注释 5.运行结果 6.结果说明 1.基本思想 变异系数法通常用于解决数据分布不同的问题.它是一个用于测 ...

  9. MATLAB中fix啥意思,matlab fix函数用法_常见问题解析,matlab

    matlab syms什么意思_常见问题解析 matlab中syms的意思是定义多个变量,可以用来创建符号变量x和y,语法是"syms x y":也可以创建一些符号变量.函数和数组 ...

最新文章

  1. datatable.js 服务端分页+fixColumns列固定
  2. java 常量变量使用_java常量和变量入门教程
  3. 求对一组数据进行排名的算法
  4. 【ASP.NET Core】给路由规则命名有何用处
  5. 目录页码错误未定义书签怎么解决_目录页码对不齐应该怎么办?这2种方法,工作效率大增...
  6. java 写oracle clob_Java将数据写入Oracle的Clob字段中
  7. linux怎么使用git安装目录,Linux系统中怎么安装Git?
  8. 【Flink】Generic types have been disabled in the ExecutionConfig and type KryoSerializer Row
  9. js 高级-创建对象
  10. Spring Boot配置文件规则以及使用方法官方文档查找以及Spring项目的官方文档查找方法...
  11. Css 基本的规则写法
  12. Mini-project # 1 - Rock-paper-scissors-lizard-Spock
  13. 不要重启!诺顿居然将系统文件当病毒
  14. html文字闪烁特效代码,HTML最简单的文字闪烁代码
  15. 解决RabbitMQ无法使用guest用户登录问题
  16. EndNote新手入门教程
  17. 数智化转型中的零售餐饮行业
  18. Eclipse RCP - 第一个RCP程序
  19. 【SVN】VS2015和SVN合作
  20. 基于深度学习的肺部CT影像识别——采用U-net、3D CNN、cGAN实现肺结节的检测(一)

热门文章

  1. 设计灵感素材网站:美工设计者必备
  2. 高品质餐饮相关场景模型素材,开始独特的场景来展示设计。
  3. 递归算法详解及测试效率
  4. Linux内核热补丁方案对比
  5. Transitions Among the Processor’s Operating Modes
  6. Linux内核 eBPF:Hacking Linux USDT with Ftrace
  7. FD.io VPP官方邮件列表
  8. x86 Assembly Guide
  9. GTK实现简单计算器(calculator.c)
  10. python安装mysqldb模块_python MysqlDb模块安装及其使用详解