lsdyna材料本构模型二次开发经验分享(umat41)
Lsdyna材料umat子程序二次开发心得
-----技术邻:小土它月半
一、lsdyna二次开发基本介绍
进行DYNA的二次开发,首先要知道相关的背景知识。下面对DYNA二次开发进行科普性的介绍。
(1)DYNA只是一个求解器(一个固定的可执行的exe文件),它可以读取K文件,并进行计算,最终输出结果
(2)DYNA开发过程:DYNA源代码——DYNA.OBJ文件或DYNA.lib——DYNA.exe文件(可执行文件)
(3)二次开发,实际上就是要修改原有的exe文件,在其中加入自己的程序(子材料什么的)。而不管你是“一般用户”还是正版用户,都不太可能直接修改exe文件。所以目前DYNA开发商,给正版用户提供了下面的方式进行二次开发:
从上面可以看出二次开发实际上是重新生成了一个全新的可执行程序,这一过程需要F文件、DYNA.lib和其它资源文件,而不需要原来的DYNA.EXE文件,所以不管你是正版还是别的,如果没有DYNA.lib文件等都是不可能进行二次开发的。
而一般用户和正版用户的区别在于:
1、正版用户可以直接要求开发商提供F文件、DYNA.lib和其它资源文件,而一般用户只有通过其它渠道。
2、将K文件提交DYNA.EXE计算时,正版用户由于有license,可以直接通过检查并进行计算;而“一般用户”目前基本上是通过修改DYNA.exe文件。跳过检查,最终实现计算的。“一般用户”完全有可能进行二次开发,关键是要通过其它渠道得到正版用户才有的F文件、DYNA.lib和其它资源文件。
二、lsdyna二次开发前期储备
2.1 软件安装(最基本最简单)
(1)必须拥有对应版本的ls-dynalib文件包。需要根据不同的系统平台(32位/64位、SMP/MPP)、版本(971R5.1.1/R711/R8.0.0)得到对应的lib包。
(2)装IFC之前需要先装MVS
(3)有lstc授权文件,即ls‐dyna求解器可求解。
下面是版本对应关系:
2.2 力学知识储备(最难)
因为做lsdyna本构模型二次开发和直接使用内置本构进行计算难易程度差距很大,采用内置本构进行计算不用过多了解本构底层逻辑。而二次开发自己的本构需要对整套本构的内在逻辑有很好的理解,包括基本的应力应变关系、应力偏量、静水应力、应变率、应力不变量、应力偏量不变量等等。如果有做二次开发的打算,建议提早学习一下以上知识点,可以查阅相关书籍,个人建议如果想速成可以在B站上去学习,有一位女老师讲的线上网课非常受用。
2.3 Fortran语言基础(相对较容易)
二次开发对于编程的要求是很低的,只需要掌握最基本的即可。比如用到最多的条件语句里的比较:gt为大于、le为小于等于、ge为大于等于。其他的也都和上边这些最基本的一样,在具备以上两点之后可以在lsdyna手册里看一下具体代码,先读一遍,主要是学习套路和编程语言。
如果以上三点你都基本具备了,那么就可以自己尝试去根据推导的本构去编一下umat代码了。
如果umat代码写完了,那么恭喜你,可以进入下一道难关了:编译生成求解器。如果你是初学者,那么写完之后的代码肯定会错误百出,不过不要慌,这很好解决。因为在编译的时候如果你的语法有错误,他都会提示的,在vs里打开行号就可以清晰地看到具体哪一行出错了,fortran语法以及umat书写格式问题就可以通过一次次改错而解决掉了。
解决掉以上问题,你终于编译成功了,生成了属于你自己的lsdyna.exe,这时候你就可以使用它去计算了,需要用你的求解器把ansys内置的lsdyna求解器给替换掉。在计算之前呢,还需要对k文件进行处理。我们都知道,正常使用内置本构模型需要调用不同的材料,比如111HJC以及272RHT等等。自定义本构也是一样的,在lspp里找到41-50打开进行赋值即可,需要注意的就是,你的代码里边可以没有弹性模量E、泊松比μ,但是绝对要有体积模量K和剪切模量G,因为在卡片里要调用的。而且还需要注意的就是,你材料卡片参数赋值顺序一定要和umat子程序里编写的参数顺序保持一致。
接下来,k文件已经准备好了,就可以进行计算了。如果你一次就得到了想要的结果,那么恭喜你。大部分时候,编译成功之后的求解试算过程是很漫长的。因为编译只会提示你语法错误,而代码本身的逻辑错误只能靠自己去发现,这也就回归了前面讲到的必须要有扎实的力学基础。代码调试是很枯燥乏味而又不得不去做的一件事情,为了帮助调试,你需要在编写的时候就把你想看的所有变量都赋值给历史变量,这样你在lspp里才可以看到,方便查错误。
查错误时候重点看每一个变量的力学公式你是否真的理解正确,是否真的在代码里编写正确了,还有就是你的一整套逻辑是否行得通,你可以把自己带入到整个代码里,思想先走一遍,看看是否可以循环往复地运行下去,置身代码很重要。查错误时候一定要注意细节,有时候一个正负号就有可能使整个代码运算错误。我个人在进行计算时候报错最多的就是负体积以及损伤云图某些步骤不出现,出现这些没有特定的原因,最有可能就是某一个变量的公式你理解错误,仔细检查!
最后给大家展示一下我用自定义本构做的一个混凝土板中心爆炸的粉碎区形成及爆破裂纹扩展的结果:
如果大家对二次开发感兴趣,关注我技术邻号:“小土它月半”,可以私信来交流。
查看更多评论 >