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

关于fortran生成.obj文件问题

[复制链接]
发表于 2008-3-24 03:29:11 | 显示全部楼层 |阅读模式 来自 美国

看到有人可以用编译好的.obj 文件在Abaqus 下运行,

Abaqus job=job.inp user=umat.obj

那样的话,可以用Fortran 77 固定格式或者Fortran 90 自由格式写UMAT, 然后生成.obj文件。最后直接在Abaqus 下运行 (不必再编译)。 这样就大大拓展了编写UMAT的灵活性。如果可行,理论上,C++ 也可以编子程序来生成.obj, 然后运行。

但是本人遇到了生成.obj文件的问题.

调试的是手册上的问题User subroutine for isotropic Mises plasticity model
http://abaqusdocs.ecn.purdue.edu:2080/v6.7ef/books/ver/default.htm

input 文件是umatmst3.inp 子程序文件是umatmst3.f 先把umatmst3.f 改为umatmst3.for 然后在Abaqus 6.7.1 上运行如下命令,
abaqus job=umatmst3 user=umatmst3.for
一切运行正常。

但是想通过先生成.obj 文件在运行。参照了论坛上下面的方法
---------------------------------------------------------------
Q: 自己编写子程序需要哪些工作步骤
A: 1.建立工作目录
2.abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc
3.将编好的fortran程序拷贝到工作目录;
4.编译fortran程序,将.obj文件拷贝到工作目录;
5.建立好输入文件.inp;
6.运行abaqus job=inp file name user=fortan name即可。
我的要运行
abq64pr11 job=inp file name user=fortan name
我也学了没多久,按照这个过程成功了一个!你们试一下吧!
---------------------------------------------------------------

先做了前面123 步,然后在intel Fortran 9.1下运行
ifort umatmst3.f

出现问题
1umatmst3.obj : error LNK2019: unresolved external symbol _XIT referenced in function _AHARD
2libifcoremt.lib(libifcoremain.obj) : error LNK2019: unresolved external symbol _MAIN__ referenced in function _main

请问这个是什么原因引起的,如何解决?
当然 尽管有问题,umatmst3.obj文件还是生成了,拷贝到Abaqus工作目录,运行
abaqus job=umatmst3  user=umatmst3.obj
出现了问题。 当然这个应该是由于前面Fortran 生成.obj不对引起的。

不知道正确得到.obj要用什么软件包,什么版本,什么文件要拷贝到工作目录(aba_param.inc 已经修改拷贝)。 上面出现的问题是什么原因引起的?

如前面所说,这个问题意义比较大。

望高人指教!

附:运行Fortran Abaqus 的过程

(1) try to get umatmst3.obj

Intel(R) Visual Fortran Compiler 9.1.037 Build Environment for 32-bit applications
Copyright (C) 1985-2007 Intel Corporation. All rights reserved.

Setting environment for using Microsoft Visual Studio 2005 x86 tools.

C:\Documents and Settings\sunking\My Documents\e4>ifort umatmst3.f
Intel(R) Fortran Compiler for 32-bit applications, Version 9.1
Build 20070322

Z Package ID: W_FC_C_9.1.037
Copyright (C) 1985-2007 Intel Corporation.
All rights reserved.


Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation.
All rights reserved.


-out:umatmst3.exe
-subsystem:console
umatmst3.obj
umatmst3.obj : error LNK2019: unresolved external symbol _XIT referenced in function _AHARD
libifcoremt.lib(libifcoremain.obj) : error LNK2019: unresolved external symbol _MAIN__ referenced in function _main
umatmst3.exe : fatal error LNK1120: 2 unresolved externals

C:\Documents and Settings\sunking\My Documents\e4>

(2)
run in Abaqus


E:\temp\t9>abaqus job=umatmst3
user=umatmst3.obj
INT

Abaqus JOB umatmst3
Abaqus Version 6.7-1
Begin Linking Abaqus/Standard User Subroutines
3/23/2008 2:39:08 PM

Creating library standardU.lib and object standardU.exp

standardU_static.lib(umat.obj) : error LNK2005: _UMAT already defined in umatmst
3.obj
umatmst3.obj : error LNK2019: unresolved external symbol _XIT referenced in function _AHARD
standardU.dll : fatal error LNK1120: 1 unresolved externals
Abaqus Error: Problem during linking - Abaqus/Standard User Subroutines.


This error may be due to a mismatch in the Abaqus user subroutine arguments.


These arguments sometimes change from release to release, so user subroutines


used with a previous version of Abaqus may need to be adjusted.

Abaqus/Analysis exited with errors

[ 本帖最后由 sunkingf 于 2008-3-24 03:37 编辑 ]
 楼主| 发表于 2008-3-24 21:32:38 | 显示全部楼层 来自 美国
Simdroid开发平台
ding~
回复 不支持

使用道具 举报

 楼主| 发表于 2008-3-25 22:56:42 | 显示全部楼层 来自 美国

回复 1# 的帖子

不知道曾经得到正确 .obj 文件的同学能不能跳出来 解说点更详细的步骤和注意点, 不胜感激!
回复 不支持

使用道具 举报

 楼主| 发表于 2008-3-26 20:23:09 | 显示全部楼层 来自 美国
要是可以有个现实的例子生成正确.obj文件就好了
回复 不支持

使用道具 举报

发表于 2008-3-26 23:37:36 | 显示全部楼层 来自 德国
回复 不支持

使用道具 举报

发表于 2008-3-26 23:41:41 | 显示全部楼层 来自 德国
今天终于遇到有人知道这东西的重要性了,
回复 不支持

使用道具 举报

 楼主| 发表于 2008-3-27 00:45:26 | 显示全部楼层 来自 美国

回复 6# 的帖子

cdstudio好,

我可以理解你的帖子。 我还想过 在一个机器上运行fortran, 用没有设置子程序环境的Abaqus 来运行(没试过),这样免去装软件的很多麻烦,而且不用装C++。
现在我可以成功运行 abaqus  job=job.inp, user=umat.for
但是我有fortran 90 的一些程序代码,不想修改成 f77。 Fortran 90 里有modulus 和高精度都是比较好的。所以提出这个问题。
我看过你的帖子,只是我这里没有正确生成.obj 文件,运行
job=umatmst3  user=umatmst3.obj  INT
后出错,不知道可不可以把你原来运行的 Ein.inp , HS.fortran, HS.obj 发给我看看,
我的邮箱: sunking2000@gmail.com
非常感谢!

[ 本帖最后由 sunkingf 于 2008-3-27 00:58 编辑 ]
回复 不支持

使用道具 举报

发表于 2008-3-27 16:03:09 | 显示全部楼层 来自 德国
例子我已经没有了(年初电脑硬盘挂了), 不过引用楼主你的高论里的一句话
---------------------------
2.将abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc 或 aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc
---------------------------
按这个方法再在FORTRAN里进行编译就行了.
回复 不支持

使用道具 举报

 楼主| 发表于 2008-3-27 21:13:16 | 显示全部楼层 来自 美国

回复 8# 的帖子

谢谢cdstudio,

步骤2 我已经做了,它是关于变量规定的默认设置,是F77 风格,就二句话。我的编译错误信息里并没有说找不到 aba_param.inc , 所以原因可能是其他。

原则上,调试的是 一些程序的集合,包括软件里的已有程序和用户写的程序。就这里的情况,我用的是Abaqus手册里的例子,所以调试不成功的原因可能是Fortran软件和系统的差别。 可以告诉我一下你用的是
1)什么Fortran 版本/ C++版本
2)什么Abaqus 版本
3)什么windows 版本
吗?

我想进行比较一下。最笨和有效的方法是 新装系统,配置和你原来的一样,这样会成功。更好的办法是找出
error LNK2019: unresolved external symbol _XIT referenced in function _AHARD
的原因,更正即可。但是这方面不熟。

谢谢!
回复 不支持

使用道具 举报

发表于 2008-3-28 00:45:57 | 显示全部楼层 来自 德国
楼主你说的这个不是F??风格, 而是一种是固定书写格式用f或是for做扩展名, 一种叫自书写由格式用f90做扩展名.

如果你每二步做过了, 并用你的intel fortran编译过了, 而且程序正确的情况下就会生成obj文件了, 要注意是用intel fortran编译而不是用abaqus编译

我的是aba 6.4.1 + compaq 6.6c, 感觉很好用,  少装一个巨型垃圾Visual Studio 2005
回复 不支持

使用道具 举报

 楼主| 发表于 2008-3-28 01:01:19 | 显示全部楼层 来自 美国

回复 10# 的帖子

好,谢谢, 现在应该会有办法解决了
回复 不支持

使用道具 举报

发表于 2008-3-28 10:11:24 | 显示全部楼层 来自 江苏南京
学习ing!
回复 不支持

使用道具 举报

发表于 2009-6-22 16:29:54 | 显示全部楼层 来自 澳大利亚
Intel(R) Visual Fortran Compiler 9.1   对子程序 不能产生正确的 .obj 文件
不能像 compaq 6.6 那样  用obj 代替 for吧
因为compaq 6.6 对子程序 可以产生正确的 obj
但Intel(R) Visual Fortran Compiler  好像不能
回复 不支持

使用道具 举报

发表于 2009-6-23 13:55:28 | 显示全部楼层 来自 广东深圳
Intel(R) Visual Fortran Compiler 9.1   对子程序 不能产生正确的 .obj 文件
不能像 compaq 6.6 那样  用obj 代替 for吧
因为compaq 6.6 对子程序 可以产生正确的 obj
但Intel(R) Visual Fortran Compiler  好像 ...
ma 发表于 2009-6-22 16:29


我用Intel(R) Visual Fortran Compiler编译的生产的obj文件一直不行

不知道是不是你说的这个原因呢,希望成功的兄弟也说下自己的做法,供大家学习
回复 不支持

使用道具 举报

发表于 2009-6-23 17:40:11 | 显示全部楼层 来自 北京
try to add

====
def onJobCompletion():
    import os, osutils
    scrFileList = os.listdir(scrdir)
    for scrFile in scrFileList:
        file = os.path.join(scrdir, scrFile)
        if scrFile.find('obj') != -1 or scrFile.find('explicitU') != -1:
            osutils.copy(file,savedir,force=1)
====
in Abaqus envirment file

and using

abq68ef1.bat j=xx user=xx.obj verbose=2

to run the model
回复 不支持

使用道具 举报

发表于 2009-6-23 20:10:48 | 显示全部楼层 来自 澳大利亚
问题是   用 intel fortran - 产生 obj 的时候(对应的命令  ifort name.for) ,报错, 即产生不了正确的 obj。 可能 intel fortran 9.1 不能build 子程序
回复 不支持

使用道具 举报

发表于 2011-1-13 16:25:08 | 显示全部楼层 来自 四川乐山
我也有同样的问题,在abaqus里面能用的子程序,在intel fortran里面编译出错 unresolved external symbol _MAIN__ referenced in function _main,不知道哪位高手可以解决
回复 不支持

使用道具 举报

发表于 2011-5-5 22:24:52 | 显示全部楼层 来自 天津
Sigh,被这个问题困扰了好几天了,一直没解决,命苦啊~~
回复 不支持

使用道具 举报

 楼主| 发表于 2015-8-13 15:52:15 | 显示全部楼层 来自 江苏苏州
有人用inter Fortran产生过正确的obj文件,并能在Abaqus中运行吗?
回复 不支持

使用道具 举报

发表于 2015-8-15 11:15:42 | 显示全部楼层 来自 北京
sunkingf 发表于 2015-8-13 15:52
有人用inter Fortran产生过正确的obj文件,并能在Abaqus中运行吗?

我用过,你看看这个方法:http://lihuawei.net/index.php/for-obj/
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-2 14:32 , Processed in 0.061694 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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