如何在ANSYS中调用其他程序(matlab, C, fortran)和数据交换
- 格式:docx
- 大小:13.86 KB
- 文档页数:2
matlab调用ansys的方法使用MATLAB调用ANSYS的方法ANSYS是一款常用的工程仿真软件,而MATLAB是一种强大的数值计算和数据可视化软件。
将这两种软件结合起来使用,可以更加高效地进行工程仿真和分析。
本文将介绍如何使用MATLAB调用ANSYS,以及一些常用的方法和技巧。
我们需要安装并配置好MATLAB和ANSYS软件。
确保两个软件都已经正确安装,并且可以正常运行。
接下来,我们需要在MATLAB中设置ANSYS的路径。
在MATLAB的命令窗口中输入以下命令:```ansysPath = 'C:\Program Files\ANSYS Inc\v202\ANSYS\bin\winx64\ansys202.exe';ansysWorkingDir = 'C:\path\to\working\directory';```其中,`ansysPath`是ANSYS的安装路径,`ansysWorkingDir`是用于存储工作文件的目录。
请根据实际情况修改这两个路径。
接下来,我们可以使用MATLAB的系统命令`system`来调用ANSYS。
在MATLAB的命令窗口中输入以下命令:```ansysCmd = [ansysPath ' -b -i inputfile.inp -o outputfile.out'];system(ansysCmd, '-echo');```其中,`inputfile.inp`是ANSYS的输入文件,`outputfile.out`是ANSYS的输出文件。
请根据实际情况修改这两个文件名。
上述命令中的`-b`选项表示以批处理模式运行ANSYS,`-i`选项后跟着的是输入文件的路径,`-o`选项后跟着的是输出文件的路径。
`-echo`选项表示将ANSYS的输出信息打印到MATLAB的命令窗口中。
在调用ANSYS之前,我们需要准备好输入文件`inputfile.inp`。
ansys与matlab的相互调用ansys与matlab的相互调用网上对于ansys与fortran和c的相互调用说的较多,而对于ansys和matlab的调用说的较少,由于matlab的功能强大,将它与ansys联用可以及方便的解决一些问题。
本人通过网上的搜索内容和自己的实践,总结出ansys与matlab的相互调用经验,现与大家一起分享:1.用ansys调用matlab先将matlab的m文件filename和读取数据都放在ansys工作目录下,在ansys中输入命令/sys,D:\MATLAB701\bin\win32\MATLAB.exe /r filename上面的命令中“D:\MA TLAB701\bin\win32\MATLAB.exe ”为matlab的运行目录,如果matlab 所在的盘符不是这样,需要修改,filename要改成相应的m文件名。
如果想退出matlab回到ansys工作环境,可在matalb最后加上命令"exit"2.用matlab调用ansys!"D:\ProgramFiles\AnsysInc\v100\ANSYS\bin\intel\ansys100.exe" -b -i C:\FRACTURE4.txt -o C:\fra.out命令说明:!即相当于dos的调用命令;"D:\ProgramFiles\AnsysInc\v100\ANSYS\bin\intel\ansys100.exe" 为ansys的运行目录,本人所用的是10.0版本;C:\FRACTURE4.txt 是ansys命令流文件;C:\fra.out是输入文件。
以上路径和文件名在具体操作时需要做具体修改。
问题的提出:我们经常会需要用ansys计算一些东西,之后再用matlab来处理计算的结果。
当修改某些参数重复上述过程的时候,就比较容易出现问题——比如ansys模型中的参数和matlab程序中参数的一致性问题等。
这时可以考虑采用下面的协同工作的方法。
解决的方法:采用matlab作为主控程序,设置好所有的参数与选项传递给ansys(通过文件)并调用ansys计算。
ansys计算结束后(默认情况下,matlab会自己等着,这一点很方便,呵呵)再用matlab处理ansys的输出文件。
由于所有的设置可以在matlab中统一完成,省去很多参数同步的工作,也顺便实现了计算的自动化。
呵呵。
核心提示:1.如何使用matlab调用ansys,下面是个例子!"D:\Program Files\AnsysInc\v100\ANSYS\bin\intel\ansys100.exe" -b -i d:\inp\vm1.mac -o "d:\out put\1.txt"! 是由matlab提供的用以执行shell命令的操作符(也可以用system或dos命令)参数-b指定使用batch方式运行ansys,-i 指定输入文件,-o指定输出文件。
这里有一点值得注意的是,这里的输出文件是指在gui方式运行是output windows中的输出内容,通常不是我们想要的结果文件。
2.我们想要的ansys结果可以通过*vwrite,*mwrite等命令写入文件,以供matlab使用。
3.想要matlab传递给ansys的参数,也通过文件方式传递。
(不知哪位大侠有其他的方法,请不吝赐教!)下面给出一个matlab调用ansys求解H2范数的例子:%matlab和ansys协同工作clear all;e_num=25; %杆件总数B=(1:e_num);X=combnk(B,3);N=size(X,1);Gama=zeros(1,N); %分离系数初始化for i=1:4fid = fopen('flag.txt','wt');fprintf(fid,'m m m\n',X(i,1),X(i,2),X(i,3));fclose(fid);!"C:\Program Files\AnsysInc\v100\ANSYS\bin\intel\ansys100.exe" -b -i C:\hangjia_25_V.mac -o "C:\1.txt" %调用ansys计算程序%H2范数format long;K0=load('SMATR.txt');M0=load('MMATR.txt');C0=load('CMATR.txt');E=2.06e11;A=5.48e-3;L=1.0;K0=E*A/L*K0;C0=1e5*C0;[NrowNcol]=size(K0);Z=zeros(Nrow,Ncol);I=eye(Nrow,Ncol);A=[Z I;-K0/M0 -C0/M0];B=[Z;I/M0];C=[I Z];R=B*B';[D p]=chol(R);if p>0if real(eig(A))<0Q=lyap(A,R);h22=sqrt(trace(C*Q*C'));h2=3.123592886516603e-006;Gama(i)=(h22-h2)/h2;elseGama(i)=-1;endelseGama(i)=-1;endendfid0 = fopen('result.txt','wt');for i=1:Nfprintf(fid0,'m m mm .5f\n',i,X(i,1),X(i,2),X(i,3),Gama(i)); endfclose(fid0);关于matlab调用Ansys的一些问题?本人初学ANSYS,正在研究ansys怎么被matlab调用的问题,用网上流传的:!D:\ANSYS\V100\ANSYS\Bin\Intel\ansys-b-p strut -i E:\pingmianhangjiashouli.txt-o E:\ WV.out试了一下,(其中pingmianhangjiashouli.txt是命令流文件,以前在ansys输入窗口中输入\input,pingmianhangjiashouli,txt能按里面写的命令流运行,)发现ansys打开后又关闭了,的确输出了WV.out,我用txt格式将wv.out打开查看发现里面只有建模的信息,比如节点一共有几个,桁架的夹角是多少,每次施加的力是多少以及方向以下是几个问题:1、ansys打开后又关闭了,到底运行没有?我起初认为应该是ansys打开显示出整个模型,因此我怀疑没有运行,但是wv.out文件中的信息有很多不是pingmianhangjiashouli.txt里面原有的,比如列出了最大单元数和节点数,各个桁架杆件夹角,整个的确是要经过ansy s计算才能得出的2、wv.out文件是不是只是保存建模信息呢?如果运行了,我想看求解的结果文件,去哪里看?但是网上有的说输入文件是mac格式的,也有的说txt格式也行,我就用个txt格式的,不知道有没有影响?3、要是想要写文件,让ansys把一些结果输出,是不是在pingmianhangjiashouli.txt编命令流?比如说输出最大单元数,用查询函数,这个怎么编?回答的详细我会再次追加100分!!!!我举个例子,查询最大单元数,我编了命令流,*CFOPEN,D:\MYRES,TXTA = ELMIQR(0,14),*VWRITE,A(F6.0,8X,E15.6,2X,E15.6,2X,E15.6)*CFCLOSE要是把命令流粘贴在文件pingmianhangjiashouli.txt中,然后用/input,pingmianhangjiash ouli,txt在输入窗口中,能运行,生成myres.txt,有13这个数,是最大单元号,但是用ma tlab调用这个文件却只有myres.txt文件没有13这个信息,我仔细查看了mv.out文件发现里面有error in format ,意思好像是(F6.0)不是mac命令吧,是不是格式问题?问下高手?1.首先你的命令写错了,其中,产品名称‘struct’写错了,另外注意各个参数中间的空格(如-b -p -i -o等),修改后再试试。
Computer Knowledge and Technology 电脑知识与技术本栏目责任编辑:谢媛媛软件设计开发第7卷第23期(2011年8月)基于VB 调用Ansys 和Matlab 软件的分析方法杨媛媛1,梁霭明2(1.广东技术师范学院天河学院计算机科学与技术系,广东广州510540;2.新科集团MDE ,广东东莞523082)摘要:该文论述了VB 调用Ansys 和Matlab 软件进行分析设计的方法,并介绍其联合开发步骤、编程关键及其应用。
关键词:VB ;Ansys ;Matlab中图分类号:TP391文献标识码:A 文章编号:1009-3044(2011)23-5656-02Method of VB Calling Ansys and Matlab in CalculationYANG Yuan-yuan 1,LIANG Ai-ming 2(1.Department of Computer Science and Technology,Guangdong Polytechnic Normal University Tianhe College,Guangzhou 510540,China;2.SAE,MDE,Dongguan 523082,China)Abstract:This paper discusses Method of VB Calling ANSYS and MATLAB in Calculation,and introbute how to develop system,key of program and it's application.Key words:VB;Ansys;MatlabANSYS 软件在工程上的应用相当广泛。
APDL 是ANSYS 的一种专用语言,允许复杂的数据输入,能实现有限元模型的建模、加载、求解和后处理等功能,但APDL 本质上不是具有集成化开发环境的高级语言,其可视化程度差、开发过程不直观,因而给对APDL 语言不熟悉的科技人员利用ANSYS 软件从事参数化建模带来一定的困难[1-3]。
ansys——ANSYS命令流(Ⅰ)1. A,P1,P2,…,P17,P18(以点定义面)2. AADD,NA1,NA2,…NA8,NA9(面相加)3. AATT,MAT,REAL,TYPE,ESYS,SECN(指定面的单元属性)【注】ESYS为坐标系统号、SECN为截面类型号。
4. *ABBR,Abbr,String(定义一个缩略词)5. ABBRES,Lab,Fname,Ext(从文件中读取缩略词)6. ABBSAVE,Lab,Fname,Ext(将当前定义的缩略词写入文件)7. ABS,IR,IA,--,--,Name,--,--,FACTA(取绝对值)【注】*************8. ACCAT,NA1,NA2(连接面)9. ACEL,ACEX,ACEY,ACEZ(定义结构的线性加速度)10. ACLEAR,NA1,NA2,NINC(清除面单元网格)11. ADAMS,NMODES,KSTRESS,KSHELL【注】*************12. ADAPT, NSOLN, STARGT, TTARGT, FACMN, FACMX, KYKPS, KYMAC【注】*************13. ADD,IR, IA, IB, IC, Name, --,-- , FACTA, FACTB, FACTC(变量加运算)14. ADELE,NA1,NA2,NINC,KSWP(删除面)【注】KSWP =0删除面但保留面上关键点、1删除面及面上关键点。
15. ADRAG,NL1,NL2,…,NL6,NLP1,NLP2,…,NLP6(将既有线沿一定路径拖拉成面)16. AESIZE,ANUM,SIZE(指定面上划分单元大小)17. AFILLT,NA1,NA1,RAD(两面之间生成倒角面)18. AFSURF,SAREA,TLINE(在既有面单元上生成重叠的表面单元)19. *AFUN, Lab(指定参数表达式中角度单位)20. AGEN, ITIME, NA1, NA2, NINC, DX, DY, DZ, KINC, NOELEM, IMOVE(复制面)21. AGLUE,NA1,NA2,…,NA8,NA9(面间相互粘接)22. AINA,NA1,NA2,…,NA8,NA9(被选面的交集)23. AINP,NA1,NA2,…,NA8,NA9(面集两两相交)24. AINV,NA,NV(面体相交)25. AL,L1,L2,…,L9,L10(以线定义面)26. ALIST,NA1,NA2,NINC,Lab(列表显示面的信息)【注】Lab=HPT时,显示面上硬点信息,默认为空。
ANSYS与FORTRAN的相互调用一 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\ANSYS4. 复制 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。
ansys中的命令流文件是怎样调用的?用/input,fname,ext,dir,line,log命令。
如/input,dario,txt是将dario.txt文件读入。
具体命令参见HELP。
怎样修改ansys中的log文件啊就是通过修改ANSYS中list中打开的log文件,来改变我以前的设置,来修改命令流中的错误.可以吗?直接将LOG文件用记事本打开,在其中找出你要修改的部分,改掉之后另存一个文本文件,在FILE-Read Input From中直接输入即可可以用记事本打开,把不要的去了,把错误的改了,也可以一句一句的复制输入到ansys命令栏检查那句是正确的ANSYS的log文件整理心得:解释GUI中产生FLST和FITEMCAE 2010-06-15 20:05:37 阅读77 评论0 字号:大中小订阅log文件整理心得1.要注意时间,因为每次做的东西都会跟在log文件后面,所以要根据时间取舍,不是所有的log文件中的内容就有用的,一开始我建议从新建一个文件开始。
2.最好每做一步看一下log文件,可以知道自己的操作对应哪些命令3.有些关于存盘、显示视角等命令可以删除。
4.选取实体时往往会产生很多命令,可以简化。
5.整理命令流时要新建立一个文本文件,以便从log文件中拷贝所需要的。
6.File菜单中的Read input from可以读入自己所建立的命令流来执行。
7.可以增加注释语句以增强可读性下面以一简单模型为例大致说明一下:/BATCH/COM,ANSYS RELEASE 5.7.1 UP20010418 15:42:42 09/12/2003/input,menust,tmp ,'',,,,,,,,,,,,,,,,1/GRA,POWER/GST,ON/PLO,INFO,3/COL,PBAK,ON,1,BLUE这一段基本上没有用,是开始的设置,每个分析都是差不多这样,因此可以删除。
matlab调用ansys的方法
参照钢结构论坛上的相关的帖子,尝试着使用matlab调用ansys,中间进行参数传递。
经过几次尝试,终获成功。
出于对matlab版的偏爱,本帖发到matlab版,希望版主允许。
现简单说明一下:
%hanyang university, wang xiaoyong, 2006,10,24
aa=[0.5 1.0 1.2;0.6 1.0 1.3]
fid=fopen('c:\duqu.txt','wt')
fprintf(fid,'%6.2f%6.2f%6.2f\n',aa') ………matlab的计算结果写入文件
fclose(fid)
system('D:\ANSYS\v80\ANSYS\bin\intel\ansys80 -b -p ane3fl -i C:\zuixinmoliang.txt -o C:\vm5.out')
C:\zuixinmoliang.txt 是命令流文件
C:\vm5.out 是输出文件所在位置,输出文件保存了程序运行的相关信息。
在ansys的命令流中从matlab的输出文件中读入计算参数。
进行计算。
*create,ff
*DIM,EXA,,2,3
*VREAD,exa(1,1),c:\duqu,txt,,JIK,3,2
(3F6.2)
*end
/input,ff
通过这种方法,可以实现matlab对于ansys的调用。
附件中为matlab程序和ansys命令流。
ANSYS虽然比较强大,但是不能象Femlab一样自定义模型方程。
在某些情况下,必须用当前step的解作为条件,根据某些物理条件来改变单元的材料属性以及载荷,作为下一个step的初始条件。
用ANSYS自带的APDL可用于一般的流程控制,如果要实现特定的复杂物理模型就比较困难,而且速度极慢。
可行的办法就是在ANSYS运行中把每一个step的结果传给外部程序,用来计算下一步的载荷和单元属性。
A. 和外部程序交换数据,首先要处理好协同问题,一般可用一下两种方法:(1)ANSYS 和外部程序同时运行 -- 需要建立一个flag文件。
通过在ANSYS 和程序中读其内容来判断对方是否在运行。
在ANSYS和外部程序运行完一个step,改变flag,告诉对方自己当前运行结束,对方可以继续运行,否则必须等待。
(2)在ANSYS中调用/SYS命令执行外部程序。
此时ANSYS会暂时停止运行,直到外部程序结束运行,把执行权交还给ANSYS。
(1)适用与matlab等非编译语言。
(2)适用与C和Fortran等编译语言。
B. 如何在外部程序中告诉ANSYS改变单元属性和载荷变化:
在从ANSYS中导入数据后,外部程序一般可以根据具体物理模型来创建.mac文件,然后在此文件中写入MPCHG等APDL命令。
例如用C创建一个"MD.mac"文本文件,用fsprintf(fp,"MPCHG %d,%d", element_num, Material_ID). 当程序结束运行,在ANSYS中用*use, MD.mac 来实现加载和单元属性的改变。
C. 如何在ANSYS和外部程序中传递数据。
一般在ANSYS中把当前结果写在数据文件中,在外部程序中读取。
一般常用的命令有*MOPER。
*MOPER可以把节点(node)的结果例如T(x,y,z) 自动根据插值计算映射到用户自己定义的网络上。
然后可以用*MWRITE写入数据文件。
例如,
如果用free mesh, node 的坐标可能是很混乱的。
用MOPER可以把结果映射到特定的有序的网络 (x0->x1,dx;y0->y1,dy;z0->z1,dz).
附上一个例子结果: transient simulation of optical phase change recording. 模拟可擦写光盘的读写过程。
用ANSYS模拟激光加热光盘,每一步matlab读取温度场,并用相变模型模拟出写的记录点形状,然后根据记录点形状来修改所对应的单元热属性和加载(激光吸收的能量),反馈给ANSYS做下一部计算。
上图是开始和最后的温度场(ANSYS),下图是开始和最后光盘上记录的形状(Matlab)。
激光从左向右移动。