Abaqus子程序开发过程中的那些坑(给初学者的建议)

【声明】原创作品,首发于“复合材料力学”微信公众号。

初学者学习子程序的时候,不知如何下手,便会四处逛论坛,各种群里去打听、咨询,零零散散的信息堆积在一个初学者面前,往往会一头雾水,信息交错混乱还有可能会打击自己的积极性,小编当年也是走弯路走过来的,谨以此文分享一些经验,欢迎批评指正。


初学者学习子程序开发一定要先看帮助文档!!!

看帮助文档!!!

帮助文档!!!

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图1

很多人都不喜欢看帮助文档,而Abaqus的帮助文档信息是相当齐全的,各种论坛、QQ群、公众号发布的多数有关Abaqus分析的内容都可以在帮助文档中找到影子。

Abaqus帮助文档中跟子程序相关的主要有
Abaqus User Subroutines Reference Guide用户子程序参考指南

Abaqus Example Problems Guide案例指南

01

用户子程序参考指南

打开用户子程序参考指南,可以看出,帮助文档子程序部分主要包含“User Subroutines”和“Utility Routines”两大类。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图2

“User Subroutines”又分为“Abaqus/Standard subroutines”、“Abaqus/Explicit subroutines”及“Abaqus/CFD subroutines”子程序三类,分别对应Standard隐式求解器、Explicit显式求解器及CFD计算流体力学求解器。再往下细分,“Abaqus/Standard subroutines”中包含CREEP、DISP、DLOAD、FRIC、SVDINI、UAMP、UDMGINI、UEL、UMAT、USDFLD、UVARM子程序等60余种子程序;“Abaqus/Explicit subroutines”中又包含VDISP,VDLOAD、VFRIC、VUAMP、VUEL、VUMAT、VUSDFLD等等20多种子程序。

当你想在CAE分析过程中自定义一些信息时,可以先浏览子程序参考手册,看一下有没有对应的子程序类别。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图3

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图4

“Utility Routines”这类子程序中包含几十种内嵌的应用程序,方便用户通过调用该类程序快速获取计算过程中的一些信息。

“User Subroutines”和“Utility Routines”的区别是,“User Subroutines”核心部分代码是需要用户自己去编写的,从程序接口中获取只读数据信息,通过中间的自定义部分进行数据处理,如自定义输出变量、自定义材料本构,自定义损伤判据等,最后将处理后的数据信息传入接口程序的读写变量中。

而“Utility Routines”是Abaqus内嵌的一些工具类的子程序,不需要自己去编写复杂的代码,而是在“User Subroutines”开发过程中去简单调用“Utility Routines”,这类程序一般都很简洁,仅有一行语句,按照指定的格式调用即可。比如,在USDFLD场变量子程序或者UMAT自定义材料子程序开发过程中,当需要获取积分点上的应力、应变等数据时,就可以通过“Utility Routines”中的GETVRM程序实现,如下:

CALL GETVRM('VAR',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,MATLAYO,
LACCFLA)

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图5

02

案例参考指南

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图6

案例参考指南中包含了大量Abaqus分析 案例,其中更多的案例是跟子程序无关的,要想找到自己想要学习的案例,通过关键字进行搜索即可,如上图所示,想要学习UMAT子程序开发,只需要搜索"UMAT"关键字即可。可以发现在静力分析部分有57条与UMAT这个关键字相关的信息,可以逐个打开,也可以打开对应关键字信息最多的章节查看。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图7

比如打开损伤与断裂一章,其中有一节是纤维-金属复合材料(GLARE层板)开孔板失效分析的案例,记住一句话,案例参考指南中必定有模型文件和源代码!运气好的时候连参数化python建模脚本都有。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图8

那么,打开这一节内容,看一看案例指南的套路:

(1)首先是交代当前案例问题的背景,并做内容概述

(2)模型信息介绍,包括几何、材料、分析类别、边界载荷等

(3)理论详解:因为这个案例是要自定义一种复合材料的损伤本构模型,所以要把用到的本构关系讲解清楚、包含了损伤起始判据、损伤演化、刚度折减等,想学复合材料UMAT子程序开发的同学看到这里眼前是不是一亮?

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图9

刚度折减和雅可比矩阵都给你准备好了。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图10

(4)模型介绍完了以后会展示一些计算结果。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图11

(5)接下来是最重要的模型和程序源代码

这次很幸运,有python参数化建模脚本

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图12

模型的文件及源代码

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图13

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图14

点击,打开源代码文件,就可以看到针对这个案例所开发的UMAT子程序代码了,参照一个完整代码,从头到尾读懂这一类子程序怎么编写就基本搞定了。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图15

03

子程序与模型文件的对应

有一些同学是有源代码的,但不会用。这种情况下,先确定自己的子程序是哪一类,同样去帮助文档中搜索代码及模型文件,模型文件中一般需要调用子程序的地方都会有user的关键字,仍然以上述复合材料UMAT子程序为例,其对应的模型计算文件里就有下面一段代码:

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图16

其中user material表示自定义材料,constants=14表示自定义材料中有14个材料常数,接下来几行便是14个材料常数的具体数值,按照模型文件编写规则,一行8个数据。

这里的14个数据是具有实际的物理意义的,如果将模型输入文件导入abaqus CAE或者用python脚本创建模型的话,可以在模型材料中看到下图所示的信息,14个数据一次列在材料常数列表中,此时的数据只有数值和先后顺序,没有明确的物理意义。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图17

其物理意义需要在子程序中指定,于是再回到源代码,可以在程序接口中找到一个PROPS的数组,这里面存储的就是CAE或者模型输入文件中定义的14个数据,在代码里指定其物理意义,例如有的是模量,有的是泊松比,有的是强度数值等等。这样就能把CAE模型中定义的信息与子程序接口的变量信息对应起来了。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图18

除了上述UMAT代码之外,CAE建模过程中有对应user选项的地方一般都对应有一种子程序,但不是所有子程序都能在CAE中找到对应的位置,有些是需要编辑关键字的。

复合材料分析中常用的另一类子程序USDFLD/VUSDFLD场变量子程序在下图所示的位置定义:

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图19

同时在材料定义中选上用户自定义场。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图20

如果想自定义abaqus自身不具备的一些输出变量,可以在材料定义中选择General→user output variables,然后设置自定义变量的数量即可。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图21

如果想自定义载荷,则需要在设置载荷选项中将分布类型切换为自定义,这样在计算的时候就会去调用DLOAD子程序。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图22

同样的边界条件也可以通过DISP子程序来定义。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图23

在interaction模块,还可以自定义接触属性中的切向摩擦行为。,需要用到FRIC或者VFRIC子程序。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图24

04

学习子程序开发的步骤

(1)明确自己需要哪种子程序,如果是隐式的就去隐式子程序分类中去找,显式的就去显式分类中寻找,分析类别与子程序类别整错了等于南辕北辙,同一功能的子程序在显式和隐式求解器中的体现形式是完全不一样的,代码风格、变量调用方式也是完全不一样的。另外,同一种功能可能可以通过好几类子程序都能实现,比如隐式分析中单纯想控制材料的非线性UMAT和USDFLD都可以实现,USDFLD写起来很简单,但是USDFLD对材料参数的控制具有时间上的延迟,用起来需要注意增量步要控制的小一些,UMAT写代码复杂,但是对材料参数的控制具有时效性。因此,先明确自己的问题关心什么,然后确定选用哪一类子程序。

(2)帮助文档子程序参考指南中去详细了解该类子程序的接口和变量信息以及一些其他注意事项。变量中要明确其物理意义、维度、只读变量还是读写变量,这类子程序最终需要返回哪些变量等等,这些在帮助文档中都有明确说明,并且一般在说明的结尾会附带一个完整的代码。以VUMAT子程序为例,帮助文档中会介绍VUMAT子程序的功能、张量存储顺序、初始计算及检查、变形梯度、材料点删除、程序接口、变量解释等。

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图25

其中比较关键的是了解从子程序接口中传来的变量都是什么物理意义?其维度是什么样的?哪些参数是只读的?哪些是必须定义的?哪些是可定义的?

Abaqus子程序开发过程中的那些坑(给初学者的建议)的图26

(3)帮助文档案例中找一个完整的带有模型文件和源代码的案例,了解子程序是如何与模型文件联系在一起的。

(4)认真学习一套代码,帮助文档中的代码都是比较经典的案例,可以作为模板程序进行改写。读懂一套代码,其他的自然就通了。

(5)检索、阅读文献:有很多歪果仁写文章是很厚道的,尤其是学位论文,都会有源代码,以一个初学者的水平,你能想到的点子,别人在若干年前可能早就干出来了,并且代码都有,提高自己的文献检索能力,能让你事半功倍。这里并不是鼓励大家去抄袭别人的程序,借鉴学习,Abaqus子程序开发过程中的那些坑(给初学者的建议)的图27

05

子程序开发要克服的困难

(1)心理上的困难:对于有些人这条可能没有,但对于有些人来讲这条可能是致命的。一听到子程序就头大,其实并不是所有的子程序都很复杂。有相当一部分子程序体量是很小的,比如,UVARM、DLOAD、DISP、FRIC等子程序,自定义部分只有十几行或者几十行,USDFLD、VUSDFLD子程序只需要几十或者百十行就能对材料力学性能进行复杂的控制,只有到UMAT、VUMAT、UEL、VUEL等程序的时候可能才需要几百行几千行的代码。

(2)语法上的困难:这方面的困难是相对容易克服的,FORTRAN 语言在科学计算领域有不可撼动的地位,可参考的语法书、代码资料数不胜数。而我们一般在子程序开发过程中所用到的语法也相对比较简单。

公众号后台回复“FORTRAN”或"fortran"可以获取一份FORTRAN基本语法的总结。

 

(3)理论知识的困难:对于复杂子程序,这一点是避免不了的,也是必须要过的一关,以复合材料渐进损伤材料子程序为例,首先要知道应应变关系、损伤起始判据,损伤起始以后的损伤演化、刚度的折减、单元删除控制策略,UMAT子程序中还要推导雅可比矩阵以及粘性正则化对损伤变量以及弹性矩阵的影响等等。

(4)程序调试的困难:Abaqus子程序调试不像VS环境下调试那么容易,初学者会犯各种各样的错误,模型错误、语法错误、逻辑错误,在程序调试方面,我们之前已经写过两篇详细的文章了,可以点击下方链接直接跳转去阅读一下。

 
Abaqus子程序开发过程中的那些坑(给初学者的建议)的图28    

Abaqus中Fortran子程序的调试方法(一)

 
Abaqus子程序开发过程中的那些坑(给初学者的建议)的图29    

VS环境下Abaqus Fortran子程序的高级调试(二)

总而言之:

(1)初学者学习子程序开发要战略上藐视它,战术上重视它

(2)多看帮助文档,会看帮助文档!

另外,有关复合材料子程序开发方面的视频课程可点击以下链接:

Abaqus UVARM子程序详解——自定义输出变量

Abaqus 复合材料VUMAT子程序详解(更新完毕)

ABAQUSAbaqus子程序开发子程序复合材料FORTRAN

Abaqus子程序开发过程中的那些坑(给初学者的建议)的评论21条

Abaqus子程序开发过程中的那些坑(给初学者的建议)的相关案例教程

(原创,欢迎转载,转载请说明出处) 1 概述 本系列文章研究成熟的有限元理论基础及在商用有限元软件的实现方式,通过 (1) 基础理论 (2) 商软操作 (3) 自编程序 三者结合的方式将复杂繁琐的结构有限元理论通过简单直观的方式展现出来,同时深层次的学习有限元理论和商业软件的内部实现原理。 有限元的理论发展了几十年已经相当成熟,商用有限元软件同样也是采用这些成熟的有限元理论,只是在实际应用过程中,
在ABAQUS中,用户定义的子程序是一种重要的构件,可以将其插入到Abaqus分析中以增强该软件的功能和灵活性。这些子程序允许用户在分析过程中添加自定义材料模型、边界条件、初始化、加载等特定操作,以便更精准地模拟分析中的现象和现象。ABAQUS支持各种不同类型和用途的子程序,下面列举了最常用的ABAQUS子程序。 1. DLOAD(Abaqus/标准)和 VDLOAD(Abaqus/显式) 两个子
1、abaqus umat子程序 2、ABAQUS子程序UMAT&VUMAT编写规则(描述了ABAQUS用户子程序UMAT&VUMAT的变量含义,以及编写程序的流程和规则等) 3、ABAQUS 子程序(描述材料损伤过程) 4、线性粘弹性UMAT abaqus子程序详细哦 5、ABAQUS子程序UMAT(Abaqus材料用户子程序UMAT基础知识及手册例子完整解释文档) 6、ABAQUS UMAT资
1 简介 用户子程序被提供来增加一些 Abaqus的功能,为分析提供强有力的和灵活的工具;编写成C、C++或者FORTRAN代码,并且在执行分析时必须包含在模型中,不能相互之间调用;可以在某些情况下调用Abaqus中也提供的工具程序。 2 模型中包含子程序 可以通过指定一个C、C++或者FORTRAN 源码或者包含子程序的预编译目标文件,在一个模型中包括一个或者多个用户子程序。有两种使用方法: (
摘 要 前 言 有限元法是工程中广泛使用的一种数值计算方法。它是力学、计算方法和计算机技术相结合的产物。在工程应用中,有限元法比其它数值分析方法更流行的一个重要原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越普及。 ABAQUS软件一直以非线性有限元分析软件而闻名,这也是它和ANSYS,Nastr
硕士/讲师
影响力
粉丝
内容
获赞
收藏
    项目客服
    培训客服
    27 135