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)检索、阅读文献:有很多歪果仁写文章是很厚道的,尤其是学位论文,都会有源代码,以一个初学者的水平,你能想到的点子,别人在若干年前可能早就干出来了,并且代码都有,提高自己的文献检索能力,能让你事半功倍。这里并不是鼓励大家去抄袭别人的程序,借鉴学习。



05子程序开发要克服的困难

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

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



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

4)程序调试的困难:Abaqus子程序调试不像VS环境下调试那么容易,初学者会犯各种各样的错误,模型错误、语法错误、逻辑错误,在程序调试方面

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空