二次开发
LS-DYNA用户关键字的二次开发
Zhidong Han, Brian Wainscott
Livermore Software Technology Corp.
摘要
在前面两期中我们分别介绍了LS-DYNA新二次开发环境的特点和兼容性,以及相关动态连接库的开发和调试全过程。本文将继续介绍其另外一个新功能: *USER_KEYWORD (用户关键字),用户可以定义自己的关键字,并在用户子程序中实现,让自己开发的用户模块的输入更有效,功能更丰富。
引言
LS-DYNA在实际工程中得到了非常广泛的应用,成功地解决了很多大规模非线性问题。用户在几十年的应用过程中积累了非常多的模型数据,比如各个部件的有效模型,各个机构的建模方法,各种材料的参数库,以及各种求解控制参数等等。这些数据都是经过长期应用反复验证的,在实际应用中也非常有效。如何把这些数据准确可靠地应用到新的数值分析中,很多用户都根据自己的模型特点建立一套管理方法来尽量避免模型差错。目前LS-DYNA的模型输入文件是主要是静态模型文件(关键字文件),对于脚本的语言缺乏良好的支持。在新的二次开发环境下,用户可以通过用户子程序来实现动态的模型生成功能,实现建模自动化,比如:
·对同一个标准部件,在不同的网格尺寸下,实现不同的划分方式;
·对同一个材料模型,在不同的单位制下,实现参数自动转换,避免手工差错;
·对同一个连接机构,在不同的分析中,实现不同的建模方式。
我们在前两期已经介绍了LS-DYNA新的二次开发环境支持用户子程序与LS-DYNA的主程序完全分开,在运行时无需连接。在以前的模式下,用户子程序必须与LS-DYNA的具体执行程序相关联,不同的执行程序往往需要重新编译连接才能执行。当模型还需要别的用户子程序时,往往会产生冲突。因此,当这种限制被突破以后,用户开发的动态建模的用户子程序就成为了模型的一部分,与LS-DYNA的执行程序是完全分开,只有在该模型被读入的时候该子程序才被动态调用。这种新的开发模式导致了用户子程序在概念上有一个比较大的改变,即把用户子程序和用户数据绑定在一起,而与LS-DYNA的执行程序无关,提高了用户子程序的一致性和可维护性。
我们以两个简单的例子来介绍在新的开发环境下,如何利用用户子程序来动态产生用户关键字,实现模型输入上的自动化。
模型自动建模
1)长方块生成程序
这是一个简单的例子,用来演示如何在现有的模型中生成一个长方块(假定为某个部件)。这个长方块的网格生成程序非常简单,但演示了开发的全过程。其源程序已经包含在LS-DYNA用户子程序开发包里面,用户可以根据需要开发出一个实用的部件生成子程序。
如图一所示,先建立一个简单的常规静态模型,由三块板组成的。现在通过以下几个步骤利用新的用户关键字功能来实现长方块的动态生成:
1)编辑源程序dyn21.f,将其中子程序rdusrkwd的第一行
isexample=0
改为
isexample=1
这个自带的动态网格生成功能就能使用了。参阅前面两篇文章,将用户子程序编译连接为动态连接库就可以。假定该动态连接库的名字为libdemo.so
2)调用动态连接库,在模型文件中加入
*MODULE_LOAD
mydemo
libdemo.so
3) 加入新的用户关键字,及其参数
*USER_KEYWORD
100., 20., 30., 10, 2, 3
这个简单演示程序是生成一个长方块,先读入6个参数,分别是X,Y,Z方向的长度,及其相应的单元划分单元个数。此例中输入为X方向长为100,划分10个单元。运行LS-DYNA则在初始的静态模型中动态添加了一个新的长方块,如图二所示。
2)用户关键字子程序接口
用户关键字的子程序统一入口是定义在dyn21.f中的rdusrkwd子程序。其第一个参数iphase是控制整个子程序的运行流程,其它参数见源程序中的说明。在LS-DYNA读入模型文件的过程中,如果遇到用户关键字*USER_KEYWORD,则设置iphase=1后直接调用该子程序,rdusrkwd。从此之后的输入完全有该子程序控制,直到该子程序退出。该子程序在iphase=1时主要任务是读取相应的参数,如上节示例中的6个参数,然后可以直接在内存里面生成LS-DYNA标准的关键字。比如上例中的节点和单元数据,以行为单位保存。在子程序退出之前将另外一个参数设置为iflag=1,表明用户的关键字已经处理结束并且相关卡片可以输出。
LS-DYNA会根据iflag=1的返回值,会设置iphase=2并重复调用该子程序,rdusrkwd,每次以文本方式返回一行卡片数据。当生成的模型卡片读完后,直接将iflag设置0,表明结束。至此,经过这生成和读入两个阶段后,对应的关键字*USER_KEYWORD就处理完毕,LS-DYNA的主程序将继续读入并处理余下的关键字。
这个子程序的具体执行过程请参阅dyn21.f中的源程序的细节,在此不做详细介绍。下面补充几个细节:
•用户关键字的参数中可以包含自定义的关键字信息,以便生成不同的部件或者不同的关键字。
•如果生成的模型太大,可以在iphase=1阶段只进行部分生成,余下的工作也可以在iphase=2时继续生成。
•用户子程序rdusrkwd不限于用FORTRAN语言实现。
•用户子程序rdusrkwd可以实现和数据库等各种外部数据源连接,实现数据集中管理。
材料参数的自动转换
1)*MAT_096 (*MAT_BRITTLE_DAMAGE)
LS-DYNA中的96号材料两张输入卡如图三所示,除去材料号以外,一共有14个材料参数。
表一 96号材料的参数
从表一可以看到,大多数的参数都是应力的单位(Pa, 即M L-1T-2)。但是有两个特殊的参数,一个是裂纹表面释放能FTOUGH,其单位是每平方米释放的能量(J/L-2, 即 M T-2);另一个是粘性系数VISC,在这个模型里面是有量纲的,在LS-DYNA有些模型中粘性系数是无量纲的。
2)用户关键字的数据安排
确定模型的单位制:模型的单位可以在模型文件里面定义为全局的变量,比如:
*PARAMETER
r M_UNIT 0.001
r L_UNIT 0.001
r T_UNIT 0.001
分别定义质量的单位为克(=0.001公斤),长度单位为毫米(=0.001米),时间单位为毫秒(=0.001秒)
这些变量可以作为数据输入文件的标准设置。
用户关键字的参数:这些参数可以定义在全局变量的基础上,无需做局部修改,比如:
生成材料数据卡片:用户子程序读入上述数据后,自动生成以下卡片:
此类单位制的转换工作虽然比较简单,但手工转换的出错机会比较大。如果用户将常用的材料参数集中整理好并保存到数据库中,并在用户子程序中实现数据库接口和自动转换过程,这对数据的准确性和使用的便利性来说都非常重要。
结束语
本文介绍了LS-DYNA二次开发框架中的一个新关键字,*USER_KEYWORD,实现了模型自动化的开发功能。这个新型关键字把用户的子程序和数据绑定在一起,而脱离了与LS-DYNA程序的直接绑定,为用户实现数据集中管理和数据库管理提供了可能。这个关键字是在LS-DYNA的开发版本上新近实现的,功能在进一步完善中。即将发行的R9版本将支持用户子程序的动态调用,但尚未包括该项新功能。有兴趣的用户可以测试LS-DYNA的开发版并欢迎将建议和需求反馈给我们。
作者简介
*韩志东/Zhidong Han博士1998年毕业于清华大学计算固体力学专业,于2011年加入LSTC。他目前从事材料损伤断裂分析及厚壳单元等方面研发。
- 上一个:LS-DYNA的二次开发环境及应用
- 下一个:LS-DYNA的材料模型二次开发过程