macc 发表于 2019-6-21 14:05:55

matlab调用ansys计算模态,算不出结果???

小弟正在做一个有关优化的问题,由于ansys mechanical矩阵处理不方便,我试着用matlab循环调用ansys计算模态的方法得到数据。然而在计算中总有那么几个样本的模态算不出来,模态阶数没到设定阶数。但是把样本数据输出出来到apdl里计算是正常的:(,很困扰,求助论坛大佬

macc 发表于 2019-6-21 14:14:35

具体过程是这样的,先在matlab里用拉丁超立方方法得到模型尺寸的样本矩阵,然后在循环里先输出尺寸数据文本,作为计算命令流的输入文件,接着调用ansys计算,并输出对应的模态位移矩阵,matlab再读入数据。问题就是在循环调用ansys计算的时候就是有一两步计算结果不正常,而且计算时间也很久。而且发现当用matlab调用是,只计算有问题的那一组尺寸样本时会出现同样的问题。用apdl直接计算是就是正常的。

macc 发表于 2019-6-21 14:19:40

不是偶然现象,不知道各位遇到过没有,还是我的程序有bug,:Q

macc 发表于 2019-6-21 14:27:33

clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%抽样参数设定和变量范围设定%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                         %
lhsnum = 10;pnum = 12;        %拉丁超立方抽样个数,同样为循环计算次数,pnum样本维数
LBUBs = zeros(pnum,2);      %参数的范围矩阵
LBUBs = [0.2        0.35      % B2 内圈厚度占比
         0.4    0.9         % B3 腹板底部距内圈底部距离占比
         0.5e-3 1e-3      % H4 腹板厚度
         1.2e-3 3e-3      % H7 内圈厚度
         0.3        0.7         % B4 腹板底部距外圈底部占外圈厚度比
         1.2e-3 3e-3      % H2 定子齿基板厚度
         0.5e-3 2e-3      % H3 尺高
         15e-321e-3       % D1 内圈内径
         0.3        0.6         % B1 外圈厚度占比
         0.3e-3 1e-3      % T1 齿隙宽
         0.2        0.8         % BL5 齿顶宽度占外圈壁厚比
         0.1        0.9];       % BC_ 齿顶偏移程度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%拉丁超立方样本生成%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                         %
xlhs = lhsdesign(lhsnum,pnum);%拉丁超立方抽样
Samp = zeros(lhsnum,pnum)';
for i=1:pnum
   Samp(i,:)= (LBUBs(i,2)-LBUBs(i,1))*xlhs(:,i)'+LBUBs(i,1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%调用ansys计算%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                         %
canshu=zeros(2,1);
diss=zeros(630,40,lhsnum);
fres=zeros(40,lhsnum);
for i=1:lhsnum
    fid=fopen('varable.txt','wt');   %打开varable.txt文件 如果没此文件,先创建
      fprintf(fid,'B2=%5.6f\n',Samp(1,i));%创建尺寸参数文本
      fprintf(fid,'B3=%5.6f\n',Samp(2,i));
      fprintf(fid,'H4=%5.6f\n',Samp(3,i));
      fprintf(fid,'H7=%5.6f\n',Samp(4,i));
      fprintf(fid,'B4=%5.6f\n',Samp(5,i));
      fprintf(fid,'H2=%5.6f\n',Samp(6,i));
      fprintf(fid,'H3=%5.6f\n',Samp(7,i));
      fprintf(fid,'D1=%5.6f\n',Samp(8,i));
      fprintf(fid,'B1=%5.6f\n',Samp(9,i));
      fprintf(fid,'T1=%5.6f\n',Samp(10,i));
      fprintf(fid,'BL5=%5.6f\n',Samp(11,i));
      fprintf(fid,'BC_=%5.6f\n',Samp(12,i));
      fprintf(fid,'CyNum=%5.6f\n',i);
      fclose(fid);
%%%%%%%%%%%将matlab产生的初始设计变量写入文件varable.txt中%%%%%%%%%%%%
! "D:\anasys160\v160\ansys\bin\winx64\ansys160" -b -p ane3fl -j 125 -i E:\00-bysj\optim\12jm\MAnalys.mac -o E:\00-bysj\optim\12jm\outfile.out   
spath = strcat('canshu' , num2str(i),'.TXT');
canshu=importdata( spath );                         %读取模态阶数
diss(:,1:canshu(1,1),i)=importdata('xdis.txt');   %读取各阶模态振幅
fres(1:canshu(1,1),i)=importdata('fre.txt');      %读取各阶频率
end

macc 发表于 2019-6-21 14:45:51

上面是matlab主程序代码,另外我ansys版本是18.0,matlab版本是2016b
页: [1]
查看完整版本: matlab调用ansys计算模态,算不出结果???