海南省BIM中心

 找回密码
 注册请加微信xycost

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2667|回复: 13

ANSYS与FORTRAN的相互调用

[复制链接]

0

主题

2633

帖子

5136

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5136
发表于 2009-1-2 18:32:00 | 显示全部楼层 |阅读模式
ANSYS与FORTRAN的相互调用0 管理提醒: 本帖被 lvdr 执行合并操作(2008-05-02) ANSYS调用FORTRAN(UPF)
回复

使用道具 举报

0

主题

2780

帖子

2556

积分

论坛游侠

Rank: 1

积分
2556
发表于 2009-1-2 18:32:00 | 显示全部楼层
一 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的调用。
回复 支持 反对

使用道具 举报

0

主题

2693

帖子

2513

积分

论坛游侠

Rank: 1

积分
2513
发表于 2009-1-2 18:32:00 | 显示全部楼层
二 将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输入文件。  
回复 支持 反对

使用道具 举报

0

主题

2916

帖子

2713

积分

论坛游侠

Rank: 1

积分
2713
发表于 2009-1-2 18:32:00 | 显示全部楼层

很多岩土学习工作者都希望既能使用自己的fortran程序,有希望使用ansys的前后处理,上面的方法就可以做到
回复 支持 反对

使用道具 举报

0

主题

2916

帖子

2713

积分

论坛游侠

Rank: 1

积分
2713
发表于 2009-1-2 18:32:00 | 显示全部楼层
关于ansys与VC++Fortran程序的接口资料
关于ansys与VC++Fortran程序的接口资料


请兄弟再上传资料时,写明出处!!!
如果是直接转载其他论坛里的内容和帖子,我看没什么必要! 你只需要帖个连接过来就可以了!!!完全没有必要发这么多帖子!!!谢谢配合!!!!
回复 支持 反对

使用道具 举报

0

主题

2916

帖子

2713

积分

论坛游侠

Rank: 1

积分
2713
发表于 2009-1-2 18:32:00 | 显示全部楼层

将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);
回复 支持 反对

使用道具 举报

0

主题

2830

帖子

2657

积分

论坛游侠

Rank: 1

积分
2657
发表于 2009-1-2 18:32:00 | 显示全部楼层

2.在FORTRAN中调用ANSYS  
LOGICAL(4) result  
RESULT=SYSTEMQQ('d:\ANSYS57\BIN\INTEL\ANSYS57 -b -p  
ansys_product_feature -i input_file -o output_file')
回复 支持 反对

使用道具 举报

0

主题

2830

帖子

2657

积分

论坛游侠

Rank: 1

积分
2657
发表于 2009-1-2 18:32:00 | 显示全部楼层

3.说明  
1和2中,input_file为用APDL语言编写的ANSYS输入文件  
ansys_product_feature为你的ANSYS产品特征代码。  
需要注意的是,在VC中调用ANSYS时,需要加一条判断语句,以确定ANSYS  
已经执行完毕。  

在ANSYS中当然也可以以VC或FORTRAN作为子程序调用。可以参看有关ANSYS二次开发方面的资料。  
这个方法应该是与系统无关的。  

在FORTRAN中不需要判断,FORTRAN会等ANSYS执行完毕才继续执行下一条语句。  
在VC中,我没有找到与FORTRAN类似的函数,只好加一条循环判断语句。  
回复 支持 反对

使用道具 举报

0

主题

2830

帖子

2657

积分

论坛游侠

Rank: 1

积分
2657
发表于 2009-1-2 18:32:00 | 显示全部楼层

判断方法很简单,只需判断错误文件file.err是否可写就可以了  
因为当ANSYS在运行时,file.err是不可写的,只有当它运行完毕,此文件才可写。  
好贴,请教如何在VB中调用ansys?  
这是我早期的帖子,请参考:  
www.fea-league.com/dispbbs.asp?boardID=21&RootID=2923&ID=2923
回复 支持 反对

使用道具 举报

0

主题

2809

帖子

2620

积分

论坛游侠

Rank: 1

积分
2620
发表于 2009-1-2 18:32:00 | 显示全部楼层

在第二页中已经对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");  
//不用::WinExec,就用不着等待语句,可以实现用FORTRAN调用一样的效果。  
printf("Solution finished...");  
}  

希望在传帖子的时候把有关内容全部看清楚,否则很容易以讹传讹,切记!  
能不能也给我发个ansys二次开发的示例  
caxcae 大侠你好,能不能也给我发两个示例:一个是vc调用ansys的,  
另外一个是ansys调用vc和fortran的,  

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");  
//不用::WinExec,就用不着等待语句,可以实现用FORTRAN调用一样的效果。  
printf("Solution finished...");  
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条


QQ|小黑屋|手机版|Archiver|ChinaBIM ( 琼ICP备14001050号-1 )

GMT+8, 2025-1-3 22:59 , Processed in 0.043505 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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