加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]matlab 调用ansys (转载)

(2016-06-08 09:00:22)
标签:

转载

问题的提出:我们经常会需要用ansys计算一些东西,之后再用matlab来处理计算的结果。当修改某些参数重复上述过程的时候,就比较容易出现问题——比如ansys模型中的参数和matlab程序中参数的一致性问题等。这时可以考虑采用下面的协同工作的方法。

   解决的方法:采用matlab作为主控程序,设置好所有的参数与选项传递给ansys(通过文件)并调用ansys计算。ansys计算结束后(默认情况下,matlab会自己等着,这一点很方便,呵呵)再用matlab处理ansys的输出文件。由于所有的设置可以在matlab中统一完成,省去很多参数同步的工作,也顺便实现了计算的自动化。呵呵。。。
  核心提示:1.如何使用matlab调用ansys,下面是个例子
!"D:Program FilesAnsys Incv100ANSYSbinintelansys100.exe" -b -i d:inpvm1.mac -o "d:out put1.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:4
  fid = fopen('flag.txt','wt');
  fprintf(fid,'m m mn',X(i,1),X(i,2),X(i,3));
  fclose(fid);
!"C:Program FilesAnsys Incv100ANSYSbinintelansys100.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;
[Nrow Ncol]=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 m m .5fn',i,X(i,1),X(i,2),X(i,3),Gama(i));
end
 fclose(fid0);
 
 
 
 

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有