你不知道的CAE小常识(二十六)


你不知道的CAE小常识(二十六)



LS-DYNA自定义材料本构子程序的简便编译方法

按这个流程做下来确实可以生成自定义求解器。但客观地说,这个流程略显繁琐。下面介绍一种简化编译方法,以供大家参考。
基本编译思想:写好fortran子程序之后,通过IVF编译器以及nmake命令编译for子程序,生成obj目标文件和求解器。
简化方法:
1、利用文本编辑器写fortran子程序,起个方便查看的名字, 存为.f格式文件,比如umat41-for-shell.f
2、打开dyn21.f文件,注释掉subroutine umat41 (cm,eps,sig,epsp,hsv,dt1,capa,etype,tt,temper,failel,crv,cma)下这一整个子程序的语句(包括这个语句),或者直接删掉这部分子程序的内容。保存dyn21.f。
3、用文本编辑器打开makefile,做如下修改
1) OBJS= dyn21.obj dyn21b.obj一行中,增加umat41-for-shell.obj。变为OBJS= dyn21.obj dyn21b.obj umat41-for-shell.obj
2)参照dyn21.obj: dyn21.F
$(FC) $(FFLAGS) dyn21.F 

格式,书写两行语句

umat41-for-shell.obj:umat41-for-shell.f
$(FC) $(FFLAGS) umat41-for-shell.f
比如:
dyn21.obj: dyn21.F
$(FC) $(FFLAGS) dyn21.F 
dyn21b.obj: dyn21b.F
$(FC) $(FFLAGS) dyn21b.F
umat41-for-shell.obj: umat41-for-shell.f
$(FC) $(FFLAGS) umat41-for-shell.f
然后保存makefile。
3)用IVF编译器和nmake命令编译子程序。这步以及后续的步骤与df_af_aq写的基本流程一样。

简化编译方法的优点:不需要每次都进入dyn21.f中修改子程序,也可以按fortran语法命名所需编译子程序的名称;编译简单快捷。

至于版上有些朋友反映,说赵海欧先生一书那个子程序无法输出应力,这大多情况是因子程序的变量名与971所要求的不一致引起的。
赵先生一书所用的版本是970,而根据关键字用户手册附录A的说明,不同的求解器版本,其子程序的变量名很可能不同。
如果你用971求解器所需的lib文件包,那么在写子程序的时候,尤其需要注意其变量名。
比如,在971中,前一时间步的历史变量数组名为hsv,而不是hisv;971中增加了内置历史变量epsp(前一时间步的等效塑性应变);
当前时间步长名为dt1,当前时间为tt。所有这些变量以及这些变量在子程序中的定义、引用都需要与971的要求保持一致。
建议想二次开发LS-DYNA材料模型子程序的朋友,多看看LS-DYNA keyword user manual中APPENDIX A: User Defined Materials部分的介绍。



欢引关注微信公众号:DR有限元仿真

默认 最新
当前暂无评论,小编等你评论哦!
点赞 1 评论 收藏 5
关注