找回密码
 注册
Simdroid-非首页
查看: 9349|回复: 162

[子程序] 【原创】用Visual Studio调试ABAQUS子程序的具体方法

[复制链接]
发表于 2013-6-21 15:56:55 | 显示全部楼层 |阅读模式 来自 四川成都
本帖最后由 wdhust 于 2013-6-21 16:15 编辑

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


1. 安装、配置ABAQUS User Subroutine的开发环境,本人使用的开发工具组合为 Windows 7 (x64) +
ABAQUS 6.12-1 (x64) + Visual Studio 2008 + Intel Visual Fortran 11.1.060 + IMSL Fortran 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’  选项以使得Intel Visual Fortran linker 在链接期链接调试符号信息
到 .obj 文件。本人的修改结果为
link_sl=['LINK', '/DEBUG', '/nologo', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64', '/NODEFAULTLIBIBC.LIB', '/NODEFAULTLIB:LIBCMT.LIB', '/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB:LIBIFCOREMD.LIB', '/DEFAULTLIB:LIBIFPORTMD', '/DEFAULTLIB:LIBMMD.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 Fortran linker 在链接期链接调试符号信息。
本人的修改结果为:
link_exe=['LINK', '/DEBUG', '/nologo', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64', '/STACK:20000000', '/NODEFAULTLIB:LIBC.LIB', '/NODEFAULTLIB:LIBCMT.LIB', '/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB:LIBIFCOREMD.LIB', '/DEFAULTLIB:LIBIFPORTMD', '/DEFAULTLIB:LIBMMD.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语句等等。本人所使用的方案如下所示:
      subroutine sigini(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”,提交命令 “ABAQUS job=JOB_NAME user=SUBROUTINE_NAME interactive “;
“standard.exe” 进程启动,并且开始等待用户键盘输入时,在Visual Studio点击菜单Debug => Attach to Process…
在弹出的对话框中找到“standard.exe” 进程,最后Attach,此时Visual Studio会启动调试器。






9. ABAQUS Command 窗口中输入任意整数并回车,Visual Studio即打开一个临时生成的和源文件
内容完全相同的临时代码文件,并在设置断点的位置暂停,此时即可开始正常的调试过程了。
以前编写普通应用程序所使用的调试技巧也都可以派上用场,这可比打开巨大、繁杂的.msg
和.dat数据文件查找有用信息要方便的多。



10. Enjoy code, enjoy life

参考文献
[1] Debugging subroutines with Visual Studio. http://polymerfem.com/showthread.php?2138-Debugging-subroutines-with-Visual-Studio

本人新人,刚注册,版本如果觉得本原创帖有价值,给点积分吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2013-6-21 16:10:12 | 显示全部楼层 来自 四川成都
Simdroid开发平台
晕,这发帖系统,代码贴上去后全乱了,改也改不好,我直接上传pdf文件吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2013-6-21 19:42:25 | 显示全部楼层 来自 福建福州
多谢楼主分享!
回复 不支持

使用道具 举报

发表于 2013-6-23 21:14:16 | 显示全部楼层 来自 陕西西安
受教了,大神呀,
回复 不支持

使用道具 举报

发表于 2013-6-24 12:01:15 | 显示全部楼层 来自 新加坡
支持技术贴!
回复 不支持

使用道具 举报

发表于 2013-6-24 17:11:43 | 显示全部楼层 来自 北京
先收藏了  好不容易改得差不多的abaqus不敢再改了   要是又打不开就悲剧了…………
回复 不支持

使用道具 举报

发表于 2013-6-25 14:49:31 | 显示全部楼层 来自 天津
多谢了,调试过小程序,幸亏除了语法没什么大毛病,遇到复杂就悲催了。有曙光了。
回复 不支持

使用道具 举报

发表于 2013-7-8 21:28:39 | 显示全部楼层 来自 江苏南京
真心佩服楼主,可以用vs的功能了
回复 不支持

使用道具 举报

发表于 2013-7-9 08:23:47 | 显示全部楼层 来自 黑龙江大庆
谢谢楼主的分享了,东西不错,都是自己总结的经验
回复 不支持

使用道具 举报

发表于 2013-7-9 20:58:24 | 显示全部楼层 来自 广东广州
楼主好人!
回复 不支持

使用道具 举报

发表于 2013-7-11 22:17:54 | 显示全部楼层 来自 北京
下下来再说,谢谢楼主
回复 不支持

使用道具 举报

发表于 2013-7-12 15:33:10 | 显示全部楼层 来自 广东广州
谢谢楼主的分享!本人也在初学子程序,我在网上找了很久 Intel Visual Fortran 11.1.060 ,这个都找不到,或者找到的需要序列号之类的,求楼主指点一下,这个去哪里找呢?或者发我邮箱一份可以吗?8558715@qq.com,谢谢!
回复 不支持

使用道具 举报

发表于 2013-7-13 00:42:32 | 显示全部楼层 来自 北京
给力啊!
回复 不支持

使用道具 举报

发表于 2013-10-4 08:46:32 | 显示全部楼层 来自 重庆
感谢楼主,学习了
回复 不支持

使用道具 举报

发表于 2013-10-4 09:48:36 | 显示全部楼层 来自 北京
楼主大神啊,膜拜一下!!
回复 不支持

使用道具 举报

发表于 2013-10-22 18:33:12 | 显示全部楼层 来自 广东广州
楼主你好!我按照你的方法做了。但是我的子程序调试老是出错,错误提示如下:
1>------ Build started: Project: Console1, Configuration: Debug Win32 ------
1>Compiling with Intel(R) Visual Fortran 11.1.067 [IA-32]...
1>tri.for
1>Linking...
1>UEL_XFEM.obj : error LNK2005: _UEL already defined in tri.obj
1>UEL_XFEM.obj : error LNK2019: unresolved external symbol _GETOUTDIR referenced in function _UEL
1>libifcoremt.lib(for_main.obj) : error LNK2019: unresolved external symbol _MAIN__ referenced in function _main
1>Debug\Console1.exe : fatal error LNK1120: 2 unresolved externals
1>
1>Build log written to  "file://D:\subrountine work directory\Console1\Console1\Debug\BuildLog.htm"
1>Console1 - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

能否把你的可以调试的程序inp和for文件发给我调试一下,看看我这里是不是已经能够调试abaqus子程序。
回复 不支持

使用道具 举报

发表于 2013-12-17 20:12:36 | 显示全部楼层 来自 江苏南京
开篇第一句话深深的打动了我~~和我长久以来的感受产生了强烈的共鸣!!
回复 不支持

使用道具 举报

发表于 2013-12-19 16:32:18 | 显示全部楼层 来自 江苏南京
技术强帖,支持,赞
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 19:13 , Processed in 0.043306 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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