SimWe仿真论坛's Archiver

mulin 发表于 2003-9-19 16:54

VC++/Fortran程序与ansys的互相调用

[color=red]解密了,呵呵。[/color]
  
以下为hunter的贴子,感觉很好,转贴出来供大家看看。
  
VC++/Fortran程序与ansys的互相调用:
  
一、将ANSYS作为子程序调用  
对于优化或参数化设计,可以在VC或FORTRAN中将ANSYS作为子程序调用。具体调用方法如下:  
1.在VC中调用ANSYS  
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i  
  
input_file -o output_file",SW_SHOWNORMAL);  
  
2.在FORTRAN中调用ANSYS  
LOGICAL(4) result  
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p  
ansys_product_feature -i input_file -o output_file')  
  
3.说明  
1和2中,input_file为用APDL语言编写的ANSYS输入文件。  
ansys_product_feature为你的ANSYS产品特征代码。  
需要注意的是,在VC中调用ANSYS时,需要加一条判断语句,以确定ANSYS  
已经执行完毕。  
  
在ANSYS中当然也可以以VC或FORTRAN作为子程序调用。可以参看有关ANSYS二次开发方面的资料。 这个方法应该是与系统无关的。  
  
在FORTRAN中不需要判断,FORTRAN会等ANSYS执行完毕才继续执行下一条语句。 在VC中,我没有找到与FORTRAN类似的函数,只好加一条循环判断语句。 如果谁能找着这样的函数,请告诉我,谢谢!  
  
判断方法很简单,只需判断错误文件file.err是否可写就可以了。  
因为当ANSYS在运行时,file.err是不可写的,只有当它运行完毕,此文件才可写。  
  
ANSYS调用FORTRAN(UPF)  
  
基于ANSYS57和Visual Fortran 6.1先详细讲一下ANSYS调用FORTRAN的步骤:  
1. 首先,安装ANSYS时选择custom安装;  
2. 建立一个新的用户目录, 如upf,把custom\user\intel目录下的anscust.bat
,makefile和user01.f (当然也可以用你自己的fortran文件啦)这三个文件拷贝
到upf下;  
3. 打开makefile文件,在第一行指定ANSYS的安装路径,如:  
ANSYS57_DIR=d:\ANSYS57 保存退出;  
对于ANSYS7.0:  
ANSYS70_DIR=d:\ansys7\v70\ANSYS  
4. 复制 dfport.lib,dformd.lib, dfconcol.lib(这三个文件在fortran安装目录下的df98\lib目录中可以找到,注意不要用ANSYS自己所带的,因为ANSYS自己所带的版本可能不够高,而导致连接失败)和ansysex.def(在custom\user\intel中)到upf57目录中,以避免连接时找不到这几个文件;  
5. 准备工作已经完成,运行“anscust.bat”进行编译连接。要确信你的Visual  
Fortran 与ANSYS版本的兼容性,如果编译连接不成功,出现诸如“Fatal error
link 1120: 8 unresolved externals”的错误,则表示你的Fortran版本需要升级。  
如用Vfor6.1 编译连接ansys7.0,就会出现这样的错误信息。解决的方法是安装Vfor6.6B。  
对于你自己写的FORTRAN程序,先用FORTRAN编译一遍,保证没有错误。编译连接成功之后,在upf目录下会生成ansys.exe;  
6. 现在你就可以运行这个新的ANSYS了。有两个方法:  
第一个方法,就象“二次开发培训练习题”中所说:  
在dos命令行,先敲入 ansys -p ansysul,指定ansys产品特征代码运行ansys,  
然后OK, 接着 /show,win32和/menu,on启动ANSYS;  
第二个方法,干脆用新生成的ansys.exe 代替ANSYS安装目录(如
d:\ansys57\bin\intel)中的原ansys.exe,建议将原ansys.exe改名或备份,然后
就象你平常启动ANSYS那样(如用Ansys Interactive 方式)启动ANSYS。  
7. 启动并进入ANSYS交互界面之后,在命令输入行输入命令usr1(或者用/ucdm定义为你指定的名称, 如 /ucmd, aaa,1)就实现了ANSYS对Fortran程序user01.f的调用。  
  
二 将ANSYS作为子程序调用  
对于优化或参数化设计,可以在VC或FORTRAN中将ANSYS作为子程序调用。具体调用方法如下:  
1.在VC中调用ANSYS  
VC调用ANSYS的示例程序。  
//Test.cpp  
#include "stdio.h"  
#include"process.h"  
void main()  
{  
int result;  
printf("Solving...");  
result=system("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansysul -i test.txt  
  
-o test.out");  
printf("Solution finished...");  
}  
  
2.在FORTRAN中调用ANSYS  
LOGICAL(4) result  
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p  
ansys_product_feature -i input_file -o output_file')  
  
3.说明  
1和2中,input_file为用APDL语言编写的ANSYS输入文件。  
ansys_product_feature为你的ANSYS产品特征代码。

blueli 发表于 2003-9-19 22:48

回复: VC++/Fortran程序与ansys的互相调用

啊啊啊啊啊/
看不到呀?
  
哭呀?

rudder 发表于 2003-9-26 20:48

回复: VC++/Fortran程序与ansys的互相调用

积分不够,如何挣积分

netgod_zy 发表于 2003-10-1 21:23

回复: VC++/Fortran程序与ansys的互相调用

积分不够,如何挣积分

netgod_zy 发表于 2003-10-6 19:56

回复: VC++/Fortran程序与ansys的互相调用

还以为是什么宝贝,结果是这个文件,早就在网上看过了。

fireghg 发表于 2003-10-6 23:08

回复: VC++/Fortran程序与ansys的互相调用

这个帖子很好,有很多人都没看过,包括我在内,谢谢mulin的转贴!

lzj 发表于 2003-11-30 21:13

回复: VC++/Fortran程序与ansys的互相调用

积分不够,看都不让看,又不是未满十八岁不让××××?
郁闷!

mysim 发表于 2003-12-8 17:21

回复: VC++/Fortran程序与ansys的互相调用

[quote][b]mulin wrote:[/b]

以下为hunter的贴子,感觉很好,转贴出来供大家看看。
  
VC++/Fortran程序与ansys的互相调用:
  
一、将ANSYS作为子程序调用  
对于优化或参数化设计,可以在VC或FORTRAN中将ANSYS作为子程序调用。具体调用方法如下:  
1.在VC中调用ANSYS  
::WinExec("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansys_product_feature -i  
  
input_file -o output_file",SW_SHOWNORMAL);  
  
2.在FORTRAN中调用ANSYS  
LOGICAL(4) result  
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p  
ansys_product_feature -i input_file -o output_file')  
  
3.说明  
1和2中,input_file为用APDL语言编写的ANSYS输入文件。  
ansys_product_feature为你的ANSYS产品特征代码。  
需要注意的是,在VC中调用ANSYS时,需要加一条判断语句,以确定ANSYS  
已经执行完毕。  
  
在ANSYS中当然也可以以VC或FORTRAN作为子程序调用。可以参看有关ANSYS二次开发方面的资料。 这个方法应该是与系统无关的。  
  
在FORTRAN中不需要判断,FORTRAN会等ANSYS执行完毕才继续执行下一条语句。 在VC中,我没有找到与FORTRAN类似的函数,只好加一条循环判断语句。 如果谁能找着这样的函数,请告诉我,谢谢!  
  
判断方法很简单,只需判断错误文件file.err是否可写就可以了。  
因为当ANSYS在运行时,file.err是不可写的,只有当它运行完毕,此文件才可写。  
  
ANSYS调用FORTRAN(UPF)  
  
基于ANSYS57和Visual Fortran 6.1先详细讲一下ANSYS调用FORTRAN的步骤:  
1. 首先,安装ANSYS时选择custom安装;  
2. 建立一个新的用户目录, 如upf,把custom\user\intel目录下的anscust.bat
,makefile和user01.f (当然也可以用你自己的fortran文件啦)这三个文件拷贝
到upf下;  
3. 打开makefile文件,在第一行指定ANSYS的安装路径,如:  
ANSYS57_DIR=d:\ANSYS57 保存退出;  
对于ANSYS7.0:  
ANSYS70_DIR=d:\ansys7\v70\ANSYS  
4. 复制 dfport.lib,dformd.lib, dfconcol.lib(这三个文件在fortran安装目录下的df98\lib目录中可以找到,注意不要用ANSYS自己所带的,因为ANSYS自己所带的版本可能不够高,而导致连接失败)和ansysex.def(在custom\user\intel中)到upf57目录中,以避免连接时找不到这几个文件;  
5. 准备工作已经完成,运行“anscust.bat”进行编译连接。要确信你的Visual  
Fortran 与ANSYS版本的兼容性,如果编译连接不成功,出现诸如“Fatal error
link 1120: 8 unresolved externals”的错误,则表示你的Fortran版本需要升级。  
如用Vfor6.1 编译连接ansys7.0,就会出现这样的错误信息。解决的方法是安装Vfor6.6B。  
对于你自己写的FORTRAN程序,先用FORTRAN编译一遍,保证没有错误。编译连接成功之后,在upf目录下会生成ansys.exe;  
6. 现在你就可以运行这个新的ANSYS了。有两个方法:  
第一个方法,就象“二次开发培训练习题”中所说:  
在dos命令行,先敲入 ansys -p ansysul,指定ansys产品特征代码运行ansys,  
然后OK, 接着 /show,win32和/menu,on启动ANSYS;  
第二个方法,干脆用新生成的ansys.exe 代替ANSYS安装目录(如
d:\ansys57\bin\intel)中的原ansys.exe,建议将原ansys.exe改名或备份,然后
就象你平常启动ANSYS那样(如用Ansys Interactive 方式)启动ANSYS。  
7. 启动并进入ANSYS交互界面之后,在命令输入行输入命令usr1(或者用/ucdm定义为你指定的名称, 如 /ucmd, aaa,1)就实现了ANSYS对Fortran程序user01.f的调用。  
  
二 将ANSYS作为子程序调用  
对于优化或参数化设计,可以在VC或FORTRAN中将ANSYS作为子程序调用。具体调用方法如下:  
1.在VC中调用ANSYS  
VC调用ANSYS的示例程序。  
//Test.cpp  
#include "stdio.h"  
#include"process.h"  
void main()  
{  
int result;  
printf("Solving...");  
result=system("d:/ANSYS57/BIN/INTEL/ANSYS57 -b -p ansysul -i test.txt  
  
-o test.out");  
printf("Solution finished...");  
}  
  
2.在FORTRAN中调用ANSYS  
LOGICAL(4) result  
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p  
ansys_product_feature -i input_file -o output_file')  
  
3.说明  
1和2中,input_file为用APDL语言编写的ANSYS输入文件。  
ansys_product_feature为你的ANSYS产品特征代码。  [/quote]
  
请问被输入的文件input_file应该放在什么地方啊?
我怎么老提示"input file name does not exist"

xiaoxiu 发表于 2003-12-30 12:56

回复: VC++/Fortran程序与ansys的互相调用

唉。积分不够

jiahong76 发表于 2004-1-2 13:29

回复: VC++/Fortran程序与ansys的互相调用

过分!积分不够就不能看?

jiahong76 发表于 2004-1-5 15:32

回复: VC++/Fortran程序与ansys的互相调用

偶终于找到有用的资源了,哎!可惜!可惜!看不了呀!

hcui 发表于 2004-1-10 12:58

回复: VC++/Fortran程序与ansys的互相调用

thanks

qyao_1980 发表于 2004-1-14 15:01

回复: VC++/Fortran程序与ansys的互相调用

good  
thank you

shooooot 发表于 2004-2-12 23:40

回复: VC++/Fortran程序与ansys的互相调用

可惜看不到 啊

agui2001 发表于 2004-2-13 21:51

回复: VC++/Fortran程序与ansys的互相调用

我很想要这方面的东西,老大能不能开恩啊 ??!!

Nick_oy 发表于 2004-2-14 15:32

回复: VC++/Fortran程序与ansys的互相调用

我很想看,怎么样才能增加积分啊,我希望尽快。

fireghg 发表于 2004-2-15 13:45

回复: 回复: VC++/Fortran程序与ansys的互相调用

[quote][b]Nick_oy wrote:[/b]
我很想看,怎么样才能增加积分啊,我希望尽快。 [/quote]
  
可以帮助大家解决问题啊,详情请参看建设家园版块!

waterwall 发表于 2004-2-20 11:42

回复: VC++/Fortran程序与ansys的互相调用

It interests me, but I can see it. What a pity

waterwall 发表于 2004-2-20 11:43

回复: VC++/Fortran程序与ansys的互相调用

I wanna seeeeeeeeee it!

daminghu 发表于 2004-2-24 10:44

回复: VC++/Fortran程序与ansys的互相调用

加分的标准时什么

sun1979 发表于 2004-3-19 10:16

回复: VC++/Fortran程序与ansys的互相调用

让我看看阿

angel1999 发表于 2004-4-15 10:05

回复: VC++/Fortran程序与ansys的互相调用

扫兴

blazeyes 发表于 2004-4-23 07:07

回复: VC++/Fortran程序与ansys的互相调用

怎么增加积分亚

freepu 发表于 2004-4-23 09:43

回复: VC++/Fortran程序与ansys的互相调用

各位想得到分的请去“建设家园”板块(顶部)看看论坛规则和加分机制,不难的,关键在参与,互相帮助。

zjs11961 发表于 2004-4-23 14:38

回复: VC++/Fortran程序与ansys的互相调用

为什么积分不够就不让看啊,我也想学习啊

zjs11961 发表于 2004-5-5 12:45

回复: VC++/Fortran程序与ansys的互相调用

就是啊,积分不够怎么赚积分呢,另外我好想看到这个帖子啊,因为与我的课题很有关啊,能不能给我瞧瞧啊!

jlmm 发表于 2004-8-18 10:58

回复: VC++/Fortran程序与ansys的互相调用

太可惜了,现在还看不到
不过我真的很想看

iwtry 发表于 2004-8-20 08:36

回复: VC++/Fortran程序与ansys的互相调用

谢谢,虽说现在不用,以后肯定能用上,感谢呀

freepu 发表于 2004-8-20 09:10

回复: VC++/Fortran程序与ansys的互相调用

鉴于此贴已有近一年的历史,获得了广大网友的相应,而且联系mulin兄不到,特此决定开放此贴:D。希望mulin兄不要介意:),我替各位朋友谢谢了。:D:D:D
Enjoy!

genghp 发表于 2004-8-27 14:55

回复: VC++/Fortran程序与ansys的互相调用

有没实现更底层的调用的方法,比如获取求解过程中中的单位阵,矩阵组装等功能!

visualfor 发表于 2004-9-9 14:08

回复: VC++/Fortran程序与ansys的互相调用

可以学到很多东西。

leap 发表于 2004-11-9 15:23

Re: VC++/Fortran程序与ansys的互相调用

如何增加积分,这么多贴都看不了,郁闷

glede 发表于 2005-6-5 20:48

Re: VC++/Fortran程序与ansys的互相调用

好帖子!

azhum 发表于 2005-6-7 10:00

Re:VC++/Fortran程序与ansys的互相调用

我觉得好过分啊,凭什么积分不够就不可以看帖子啊,网站的宗旨本身就是为了大家互相交流,互相提高的嘛,干吗还要搞这种东西,不解

xyghzzj 发表于 2005-6-23 02:10

Re:VC++/Fortran程序与ansys的互相调用

好帖!

lzj 发表于 2005-8-8 16:50

Re:VC++/Fortran程序与ansys的互相调用

不公平,积分不就看不到》

lzj 发表于 2005-8-8 16:53

Re:VC++/Fortran程序与ansys的互相调用

看不到,连学习的机会都失却了
遗憾

w_snow 发表于 2005-8-22 23:04

Re:VC++/Fortran程序与ansys的互相调用

[Hidden Post:2]

[您无权限看这个帖子,您的积分需要大于 2]

bugaaa 发表于 2005-8-25 10:12

Re:VC++/Fortran程序与ansys的互相调用

哎,积分不够啊

snowfall 发表于 2006-9-16 09:39

感觉很有用,可是才开始学ANSYS和FORTRAN,看得不懂呐

页: [1] 2
 

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.