matlab 调用ansys(转载)

更新时间:2024-01-27 15:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

问题的提出:我们经常会需要用ansys计算一些东西,之后再用matlab来处理计算的结

果。当修改某些参数重复上述过程的时候,就比较容易出现问题——比如ansys模型中的参数和matlab程序中参数的一致性问题等。这时可以考虑采用下面的协同工作的方法。 解决的方法:采用matlab作为主控程序,设置好所有的参数与选项传递给ansys(通过文件)并调用ansys计算。ansys计算结束后(默认情况下,matlab会自己等着,这一点很方便,呵呵)再用matlab处理ansys的输出文件。由于所有的设置可以在matlab中统一完成,省去很多参数同步的工作,也顺便实现了计算的自动化。呵呵。。。 核心提示:1.如何使用matlab调用ansys,下面是个例子

!\Files\\AnsysInc\\v100\\ANSYS\\bin\\intel\\ansys100.exe\-b -i d:\\inp\\vm1.mac -o \

! 是由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:4

fid = fopen('flag.txt','wt');

fprintf(fid,'m m m\\n',X(i,1),X(i,2),X(i,3)); fclose(fid);

!\Files\\AnsysInc\\v100\\ANSYS\\bin\\intel\\ansys100.exe\-b -i C:\\hangjia_25_V.mac -o \调用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>0

if real(eig(A))<0 Q=lyap(A,R);

h22=sqrt(trace(C*Q*C'));

h2=3.123592886516603e-006; Gama(i)=(h22-h2)/h2; else

Gama(i)=-1; end else

Gama(i)=-1; end end

fid0 = fopen('result.txt','wt'); for i=1:N

fprintf(fid0,'m m mm .5f\\n',i,X(i,1),X(i,2),X(i,3),Gama(i)); end

fclose(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里面原有的,比如列出了最大单元数和节点数,各个桁架杆件夹角,整个的确是要经过ansys计算才能得出的

2、wv.out文件是不是只是保存建模信息呢?如果运行了,我想看求解的结果文件,去哪里看?

但是网上有的说输入文件是mac格式的,也有的说txt格式也行,我就用个txt格式的,不知道有没有影响?

3、要是想要写文件,让ansys把一些结果输出,是不是在pingmianhangjiashouli.txt编命令流?比如说输出最大单元数,用查询函数,这个怎么编? 回答的详细我会再次追加100分!!!! 我举个例子,查询最大单元数,我编了命令流, *CFOPEN,D:\\MYRES,TXT A = ELMIQR(0,14),*VWRITE,A (F6.0,8X,E15.6,2X,E15.6,2X,E15.6) *CFCLOSE

要是把命令流粘贴在文件pingmianhangjiashouli.txt中,然后用/input,pingmianhangjiashouli,txt在输入窗口中,能运行,生成myres.txt,有13这个数,是最大单元号,但是用matlab调用这个文件却只有myres.txt文件没有13这个信息,我仔细查看了mv.out文件发现里面有error in format ,意思好像是(F6.0)不是mac命令吧,是不是格式问题?问下高手?

1.首先你的命令写错了,其中,产品名称‘struct’写错了,另外注意各个参数中间的空格(如-b -p -i -o等),修改后再试试。 clear,clc

cd 'D:\\Program Files\\ANSYS Inc\\v120\\ansys\\bin\\winx64' !ansys -b -p struct -i F:\\rotor_campbell.txt -o F:\\wv.out

2. wv.out是输出文件所在位置,输出文件保存了程序运行的相关信息,也就是ansys计算时,黑窗口中跳出的那些东西。不是结果文件

3. 如果你想输出结果比如某个节点的位移,则需要在命令流中添加相应语句,将结果写入另外的文件中,至于如何从结果文件中提取你需要的信息,试试*get,命令 如果有疑问请追问

追问

我自己弄好了,哈哈,是命令流),*VWRITE,A (F6.0,8X,E15.6,2X,E15.6,2X,E15.6) 离的太远

回答

A是最大单元数,那么你怎么能用格式控制语句(F6.0,8X,E15.6,2X,E15.6,2X,E15.6)呢?直接在*vwrite后一行用(F6.0)就可以了啊???

%matlab调用文件里的数据

[fid,message]=fopen('文件名.后缀','r');%打开数据文件 if fid==-1

disp(message); %判断文件打开与否 end

[A,count]=fread(fid,[行数,13],'double');%将数据读入A中,?行,13列 fclose(fid);

A11=zeros(0,2); %初始化2列空间 i=1:13; %n为行数 A11(:,i)=A(:,1); %取第一列 A12(:,i)=A(:,2); %取第二列

将ANSYS里的数据导入MATLAB的步骤:

1、在ansys中定义一个矩阵用来存储数据

*get,NodeNum,NODE,0,COUNT !得到模型的所有节点数 *get,nd,NODE,0,NUM,MIN !得到模型的最小节点编号 *dim,nodes,array,NodeNum !定义一个存储节点的数组 *dim,xyz,array,NodeNum,3 !定义一个存储节点坐标的数组 *dim,sxy,array,NodeNum !定义一个存储节点xy剪应力的数组

*do,i,1,NodeNum,1

nodes(i)=nd !将节点编号存储在nodes数组中 xyz(i,1)=NX(nd) !在xyz(i,1)中存储节点的X坐标 xyz(i,2)=NY(nd) !在xyz(i,1)中存储节点的Y坐标 xyz(i,3)=NZ(nd) !在xyz(i,1)中存储节点的Z坐标 *Get,sxy(i),NODE,nodes(i),S,XY

nd=NDNEXT(nd) !取得下一个节点编号

*enddo

上面的代码定义了两个矩阵xyz和sxy,分别存储节点位置和节点的xy方向剪应力。

2、将ansys中的矩阵导出为txt格式:

在ansys的主目录下新建一个txt文档,名字为OUT1(.txt),在此文件中写入:

*cfopen,xyz,txt !打开文件,写入数据 *vwrite,xyz(1,1),xyz(1,2),xyz(1,3) (3e16.8) *cfclos

然后在ansys的命令窗口中输入:

*use,out1.txt

这样ansys中的矩阵xyz就被保存在txt文件xyz中了,放置在ansys主目录下,可打开查看。

本文来源:https://www.bwwdw.com/article/uxkw.html

Top