mechbbs论坛

 找回密码
 立即注册
查看: 11433|回复: 9

[二次开发] 用Visual Studio调试ABAQUS子程序的具体方法

[复制链接]

18

主题

19

帖子

62

积分

注册会员

Rank: 2

积分
62
 楼主| 发表于 2016-3-2 04:23:17 | 显示全部楼层 |阅读模式
0. 本人最近开始学习ABAQUS二次开发,无耐无老师、无师兄师姐指点迷津,进展缓慢,深感当一名“网线博士”的悲哀。最近深感ABAQUS无法直接连接Visual Studio调试子程序而带来的不便,往日积累的程序调试经验也基本上毫无用武之地。已检索本论坛,发现本论坛尚无前辈给出用Visual Studio调试abaqus的方法,仅有几个这方面的求助帖。故将本人最近摸索总结的经验贴出来,作为本人的处女作。如有谬误,望各位前辈不吝指正。废话已表,下文进入正题。

1.
安装、配置ABAQUS User Subroutine的开发环境,本人使用的开发工具组合为Windows 7 (x64) +
ABAQUS 6.12-1 (x64) + Visual Studio 2008 + Intel Visual Fortran 11.1.060 + IMSLFortran Library 6.0 (
可选项)首先使用ABAQUS官方所建议的方法编译、运行简单的示例子程序,确保开发环境能正常工作。

2.
用文本编辑器打开 “C:\SIMULIA\Abaqus\6.12-1\SMA\site\abaqus_v6.env”(文件的路径和内容可能因软件版本、安装路径等因素会略有差异,请根据自己的实际情况作相应调整,下同) 3.找到 "compile_fortran" 参数,添加 ‘/Od’ 和 ‘/Zi’ 选项以使得Intel Visual Fortran compiler 在编译期生成
调试符号信息。本人的修改结果为:
compile_fortran=['ifort', '/c','/DABQ_WIN86_64', '/iface:cref','/recursive', '/Qauto-scalar', '/QxW', '/nologo', '/heap-arrays:1', '/Od','/include:%I', '/free', '/Od', '/Zi']
4. 找到 "link_sl" 参数, 添加 ‘/DEBUG’  选项以使得IntelVisual Fortran linker 在链接期链接调试符号信息
到 .obj 文件。本人的修改结果为
link_sl=['LINK', '/DEBUG', '/nologo', '/INCREMENTAL:NO', '/subsystem:console','/machine:AMD64', '/NODEFAULTLIB IBC.LIB','/NODEFAULTLIB IBCMT.LIB','/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB IBIFCOREMD.LIB','/DEFAULTLIB IBIFPORTMD','/DEFAULTLIB IBMMD.LIB','/DEFAULTLIB:MSVCRT.LIB', '/DEFAULTLIB:kernel32.lib', '/DEFAULTLIB:user32.lib','/DEFAULTLIB:advapi32.lib', '/FIXED:NO', '/dll', '/def:%E', '/out:%U', '%F','%A', '%L', '%B', 'oldnames.lib', 'user32.lib', 'ws2_32.lib', 'netapi32.lib','advapi32.lib']
5. 找到 "link_exe" 参数, 添加 ‘/DEBUG’ 选项以使得Intel Visual Fortranlinker 在链接期链接调试符号信息。
本人的修改结果为:
link_exe=['LINK', '/DEBUG','/nologo', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64','/STACK:20000000', '/NODEFAULTLIBIBC.LIB', '/NODEFAULTLIBIBCMT.LIB','/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIBIBIFCOREMD.LIB','/DEFAULTLIBIBIFPORTMD', '/DEFAULTLIBIBMMD.LIB', '/DEFAULTLIB:MSVCRT.LIB','/DEFAULTLIB:kernel32.lib', '/DEFAULTLIB:user32.lib','/DEFAULTLIB:advapi32.lib', '/FIXED:NO', '/LARGEADDRESSAWARE', '/out:%J', '%F','%M', '%L', '%B', '%O', 'oldnames.lib', 'user32.lib', 'ws2_32.lib','netapi32.lib', 'advapi32.lib']
6. 准备好job文件 (*.inp) 和子程序源代码文件 (*.for)
7. 在子程序源代码文件的变量声明段和可执行代码段之间添加一些可以使ABAQUS暂停执行的代码,并在适当的位置设置断点。有多种方案,如用Sleep函数、或read语句等等。本人所使用的方案如下所示:
      subroutinesigini(sigma,coords,ntens,ncrds,noel,npt, &
            layer,kspt,lrebar,names)
         implicit none
        integer,parameter:: single=4, double=8
        real(kind=double),intent(in):: coords(ncrds)
        integer,intent(in)::ntens,ncrds,noel,npt,layer,kspt,lrebar
        character(len=80),intent(in):: names(2)
        real(kind=double),intent(out):: sigma(ntens)
        ! ------------------------------------------
        logical, save :: FirstCall=.true.
        integer :: dummyVar
        if (FirstCall==.true.) then    ! 仅在第一次使用read暂停ABAQUS的执行后续暂停均使用断点
            FirstCall = .false.
            read(*,*) dummyVar
        end if
        dummyVar = 1234     ! 设置断点
        ! ------------------------------------------
        !
        ! your own executive statement here
        !
        return
      end
8. 启动 “ABAQUS Command”提交命令 “ABAQUSjob=JOB_NAME user=SUBROUTINE_NAME interactive “;
“standard.exe” 进程启动并且开始等待用户键盘输入时Visual Studio点击菜单Debug =>Attach to Process…在弹出的对话框中找到“standard.exe” 进程最后Attach此时Visual Studio会启动调试器。
1.jpg
2.jpg
3.jpg
9. ABAQUS Command 窗口中输入任意整数并回车,VisualStudio即打开一个临时生成的和源文件内容完全相同的临时代码文件,并在设置断点的位置暂停,此时即可开始正常的调试过程了。
以前编写普通应用程序所使用的调试技巧也都可以派上用场,这可比打开巨大、繁杂的.msg
和.dat数据文件查找有用信息要方便的多。
4.jpg
10. Enjoy code, enjoy life
参考文献



回复

使用道具 举报

0

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
QQ
发表于 2016-10-25 10:48:53 | 显示全部楼层
谢谢楼主分享经验
回复 支持 反对

使用道具 举报

0

主题

7

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2016-11-2 17:02:38 | 显示全部楼层
谢谢楼主分享,我也在学习这个
回复 支持 反对

使用道具 举报

0

主题

104

帖子

106

积分

注册会员

Rank: 2

积分
106
发表于 2016-12-13 03:25:56 | 显示全部楼层
谢谢楼主分享,我也在学习这个
回复 支持 反对

使用道具 举报

0

主题

14

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2017-1-5 09:21:42 | 显示全部楼层
感谢楼主分享!!
回复 支持 反对

使用道具 举报

0

主题

7

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2017-3-4 16:15:04 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

26

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2017-3-21 22:08:25 | 显示全部楼层
谢谢楼主分享,这样的经验最真实而宝贵
回复 支持 反对

使用道具 举报

2

主题

13

帖子

58

积分

注册会员

Rank: 2

积分
58
QQ
发表于 2018-4-2 07:30:01 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

3

主题

29

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2018-10-26 15:05:45 | 显示全部楼层
非常赞了
回复

使用道具 举报

0

主题

2

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2021-4-4 21:40:10 | 显示全部楼层
认真
学习   
回复 支持 反对

使用道具 举报

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

本版积分规则

    免责声明:
    本站仅提供网上自由讨论使用,请勿在本站发布非法、色情等不良信息,所有个人言论并不代表本站立场,本站不负任何责任。如发现有侵权行为,请与我们联系,我们将立刻从网站上删除,并向所有持版权者致最深歉意。

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

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

GMT+8, 2024-12-28 15:56 , Processed in 1.390488 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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