模块化编程在Abaqus UMAT编写中的应用实例

0、前言

UMAT编写工作量通常较大,对于复杂本构关系的UMAT动辄上千行都是很常见的情况,编写的人不仅工作量大编到后来有些头昏脑涨,调试找错也是痛苦不堪,在这样的情况下,如何使得UMAT编写逻辑更加清晰?如何高效重复利用代码块?如何更加快捷的调试找错?遇到错误如何尽可能小的改动就可以解决错误?本人结合自己编写UMAT的些许经验,和大家如何在利用模块化编程思想编写逻辑清晰,易于调试围护,可重复利用UMAT,本人水平有限,如有谬误或不妥之处,还请大家多多包涵指教。

1、什么是模块化编程

          模块化编程(modular programming)是一种软件设计技术,它将软件分解为若干独立 的、可替换的、具有预定功能的模块,每个模块实现一个功能,各模块通过接口(输入输出 部分)组合在一起,形成最终程序。对于简单问题,可以直接构建单一模块的程序。而对于复杂问题,则可以先创建若干个较小的模块,然后将它们组装、链接在一起,从而构成复杂的软件系统。

2、模块化编程有哪些优点

  • 易设计:较大的复杂问题分解为若干较小的简单问题,使我们可以从抽象的模块功 能角度而非具体的实现角度去理解UMAT,从而整个UMAT的结构非常清晰、容易 理解。

  • 易实现:模块化设计适合课题组团队开发或者是编写较为复杂繁琐的UMAT,UMAT各个模块之间仅仅通过参数来传递信息,尽力隔离各个模块的互相影响。对于我们个人编写而言,也有助于我们把任务分解,逐个攻破。

  • 易调试:每个UMAT模块不但可以独立编写,也可以独立调试,查看各部分的输入输出是否正确,可以帮助我们快速的定位UMAT中存在问题,找到UMAT中的问题模块后,再深入该模块进行调试,如此不断深入,不断聚焦到具体是哪一行代码出了问题。(UMAT调试方法汇总

  • 易维护:如果需要修改UMAT,比如想要应力积分方法想由显式修改为隐式,只需针对特定的部分进行修改即可。

  • 可重用:UMAT中一些常见的代码块完全可以重复利用,例如模型参数传递,向量张量转换,弹塑性判断等等,将这些特定的功能编写成subroutine,形成自己的子程序库,之后再编其他的UMAT可以直接组装,减少不少工作量。

3、模块化编程在UMAT编程中的应用实例

首先我们需要安装好版本匹配的VS+IVF+Abaqus,并完成关联

下面我们来看一下, 一个UMAT模块化编程例子的大体框架,我们把整个UMAT分成三大模块,分别为前处理模块,更新模块,后处理模块,我们这里仅看前处理模块,希望能给大家一些启发。

ATR工作流程图(3).png

接着我们再来简单介绍UMAT前处理模块化编程常用子函数

  • 模型参数传递子函数——用于将UMAT中的模型参数数组的值提取出来,并将其赋值给有物理含义的变量,这样一来方便在UMAT编写公式时使用,二来可以防止我们不小心在UMAT中修改模型参数的值造成错误。

  • 二三维判断子函数——在UMAT中在应力应变的向量的维度为NTENS,这就使得我们UMAT中应力应变向量的维度取决于模型是三维问题还是平面应力(变)的问题,这不便于我们编写具有更加普遍适用性的UMAT,因此,按照规则填满STRESS和STRAN向量,使其维度均为1*6,这也为后面将其转为张量形式提供便利。

  • 向量转张量子函数——由于UMAT中默认的应力应变是存储为向量的形式,但在本构关系式中,我们通常采用的是张量的形式,因此将应力应变向量转为为张量形式,可以让我们更加方便将本构关系式子用代码实现,但这里特别要在处理应变时候要记得应变向量存储的是工程剪切应变,需要除以2才可以存入到应变张量中。

  • 雅克比张量转换子函数——UMAT中DDSDDE(NTENS,NTENS),但我们在本构关系中的常用四维的雅克比矩阵,按照一定规则实现二者的形式上的转换也是十分有必要的。

  • 应力(应变)Invariant 计算子函数——应力应变张量不变量是我们在UMAT中经常需要求解的量,因此将其编写为统一接口的子函数,我们在其他UMAT中只需要轻松调用即可,节省不少工作量。

  • 类似的子函数还有很多,大家可针对自己的问题,去尝试开发

4、结束

限于篇幅,我们仅举这样几个比较通用的子函数,希望起到抛砖引玉的作用,最重要的是大家在自己编写UMAT的过程中,也要常常有这种模块化编程的思想,争取省力的写好UAMT。

也欢迎大家关注我的技术邻主页,主页中有我关于UMAT编写的教学视频,也有一些我在编写UMAT过程中踩过的坑,笔者自己也在学习UMAT的路上,盼望和大家互相学习,一同成长。

参考资料:

1、模块化编程 https://wizardforcel.gitbooks.io/sjtu-cs902-courseware/content/80.html


(4条)
默认 最新
不错不错
评论 点赞 1
学习了
评论 点赞

查看更多评论 >

点赞 14 评论 3 收藏 13
关注