mechbbs论坛

 找回密码
 立即注册
查看: 6809|回复: 1

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

[复制链接]

19

主题

19

帖子

576

积分

高级会员

Rank: 4

积分
576
 楼主| 发表于 2016-3-6 18:51:25 | 显示全部楼层 |阅读模式
下面介绍一种简化编译方法,以供大家参考。
基本编译思想:写好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部分的介绍。
回复

使用道具 举报

0

主题

4

帖子

17

积分

新手上路

Rank: 1

积分
17
QQ
发表于 2017-4-18 21:07:17 | 显示全部楼层
请问makefile在哪
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|mechbbs论坛(mechbbs.com)

扫描关注德国留学DIY公众号:mechbbs

GMT+8, 2025-2-6 03:03 , Processed in 1.331725 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表