找回密码
 注册
Simdroid-非首页
楼主: ilxy

matlab调用ansys的方法

[复制链接]
发表于 2010-10-14 22:32:12 | 显示全部楼层 来自 北京
哥们你太有才了

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-15 11:22:40 | 显示全部楼层 来自 上海
Simdroid开发平台
首先支持LZ的做法,尽管我还在努力弄懂LZ用MATLAB调用ANSYS的命令含义。但是我知道采用这样的方法可以弥补ANSYS软件的不足。例如可以使用matlab先进行一个相关的数学计算然后再写入ANSYS输入文件中,调用ansys 计算。在处理一些实际工程问题中可以省去很多气力和时间。
此外,还可能实现一种简单的交互式的计算,从而取代人工重复性的工作。
因此不能苟同11楼的观点。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-20 13:04:58 | 显示全部楼层 来自 江苏无锡
楼主,,,MATLAB里面的aa参数是什么意思???是矩阵啊?这个程序可以调用,,11楼的说法不太对,MATLAB用优化算法,调用ANSYS有限元分析,很有用的,ANSYS里面只有零阶和一阶优化,,如果设计变量是离散变量就没有办法实现优化。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-22 17:13:06 | 显示全部楼层 来自 重庆沙坪坝区
牛逼啊啊啊啊啊

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-10-26 15:43:01 | 显示全部楼层 来自 湖南长沙
我现在就是在在做优化算法这块,目前正在算一个有25个杆组成的桁架,程序正需在MATLAB中调用ANSYS中的参数,很感谢楼主提供的这方便的知识
回复 不支持

使用道具 举报

发表于 2010-10-28 08:48:35 | 显示全部楼层 来自 湖北武汉
人家好不容易做出个东西,想在论坛上分享一下成果,你就说了这么多大道理,好为人师!谁说这个没有用处,你知道matlab黑箱优化吗?这个就需要用到matlab调用ansys等工程软件。 11# 狗头军师 人家
回复 不支持

使用道具 举报

发表于 2010-10-29 12:36:53 | 显示全部楼层 来自 北京
好为人师???论坛见过最奇怪的评价
论坛就是好学者和好为人师者的集散地,假如没这么多“好为人师”的人,问题谁回答?
姑且看成褒义吧。
回复 不支持

使用道具 举报

发表于 2010-11-1 14:11:31 | 显示全部楼层 来自 四川成都
不错,俺刚学这个软件,还不太懂,先下载下来,好好钻研一下!谢谢楼主分享

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-1 14:11:55 | 显示全部楼层 来自 四川成都
不错,俺刚学这个软件,还不太懂,先下载下来,好好钻研一下!谢谢楼主分享

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-11-2 12:41:12 | 显示全部楼层 来自 江苏无锡
好象aa可以是MATLAB其它程序结果,比如优化算法程序得到的参数设置等。
回复 不支持

使用道具 举报

发表于 2010-11-4 10:54:36 | 显示全部楼层 来自 浙江杭州
本帖最后由 DEFT 于 2010-11-4 11:00 编辑

b] 1# ilxy

也可以直接用matlab写成命令流文件,然后导入到ansys中。详见下面的例子。

数据在ansys、autocad、matlab中的互相导入、运算,编制这样的代码比较方便。
回复 不支持

使用道具 举报

发表于 2010-11-4 10:56:48 | 显示全部楼层 来自 浙江杭州
function dxf_to_ansys
%Version 1.2
%本版本程序用于:从dxf文件获得线单元拓扑关系和分组信息,由层转为实常数组
%暂时适用于line实体,可消除由于数值输出误差带来的赘余点
[filename1,pathname1]=uigetfile('*.dxf','Open *.dxf File ');
fid1=fopen(filename1,'rt');
if fid1<0
    errordlg('file open error!');
    return;
end
nlim=0.5;  %坐标误差容限
layer=[];
x=[];y=[];z=[];
elemi=[];elemj=[];elemlayer=[];

%从dxf文件中读取单元拓扑和层信息
frewind(fid1);
line=fgetl(fid1);
while(~strcmp(line,'ENTITIES'))
     line=fgetl(fid1);
end
line=fgetl(fid1);
line=fgetl(fid1);
while ~strcmp(line,'ENDSEC')   
    if strcmp(line,'LINE')
        for i=1:1:8
            line=fgetl(fid1);
        end
        [s1]=strread(line,'%s',1);
        flag=0;
        if length(layer)==0         %存储layer和elemlayer数组
            layer=[layer;s1];
            elemlayer=[elemlayer;1];
            flag=1;
        else
           for i=1:1:length(layer)
             if strcmp(layer(i,:),s1)
               elemlayer=[elemlayer;i];
               flag=1;               
               break;
             end
          end
        end        
        if flag~=1
            layer=[layer;s1];
            elemlayer=[elemlayer;i+1];
        end        
      
        line=fgetl(fid1);
        line=fgetl(fid1);
        line=fgetl(fid1);
        line=fgetl(fid1);  %i节点x坐标
        [x1]=strread(line,'%f',1);
        line=fgetl(fid1);
        line=fgetl(fid1);  %i节点y坐标
        [y1]=strread(line,'%f',1);        
        line=fgetl(fid1);
        line=fgetl(fid1);  %i节点z坐标
        [z1]=strread(line,'%f',1);
        flag=0;
        if length(x)==0            %存储xi、yi、zi和elemi数组
            x=[x;x1];y=[y;y1];z=[z;z1];
            elemi=[elemi;1];
            flag=1;
        else
            for i=1:1:length(x)
                if abs(x(i)-x1)<nlim&abs(y(i)-y1)<nlim&abs(z(i)-z1)<nlim
                   elemi=[elemi;i];
                   flag=1;
                   break;
                end
            end
        end
        if flag~=1
           x=[x;x1];y=[y;y1];z=[z;z1];
           elemi=[elemi;length(x)];
        end        
        
        line=fgetl(fid1);  
        line=fgetl(fid1);  %j节点x坐标
        [x1]=strread(line,'%f',1);
        line=fgetl(fid1);  
        line=fgetl(fid1);  %j节点y坐标
        [y1]=strread(line,'%f',1);
        line=fgetl(fid1);  
        line=fgetl(fid1);  %j节点z坐标  
        [z1]=strread(line,'%f',1);
        flag=0;
        if length(x)==0            %存储xj、yj、zj和elemj数组
            x=[x;x1];y=[y;y1];z=[z;z1];
            elemj=[elemj;1];
            flag=1;
        else
            for i=1:1:length(x)
                if abs(x(i)-x1)<nlim&abs(y(i)-y1)<nlim&abs(z(i)-z1)<nlim
                   elemj=[elemj;i];
                   flag=1;
                   break;
                end
            end
        end
        if flag~=1
           x=[x;x1];y=[y;y1];z=[z;z1];
           elemj=[elemj;length(x)];
        end        
    end
    line=fgetl(fid1);
    line=fgetl(fid1);
end
fclose(fid1);
%输出ansys命令流
fid2=fopen('dxf_ansys_model','wt');
if fid2<0
    errordlg('file open error!');   
end
frewind(fid2);
fprintf(fid2,'/prep7\n');
fprintf(fid2,'et,1,link8\n');
fprintf(fid2,'mp,ex,1,e1\n');
fprintf(fid2,'mp,prxy,1,0.3\n');
for i=1:1:length(layer)
    fprintf(fid2,'r,%d,0.01,0.02\n',i);        
end
for i=1:1:length(x)
    fprintf(fid2,'n,%d,%.4f,%.4f,%.4f\n',i,x(i),y(i),z(i));
end
for i=1:1:length(layer)
    fprintf(fid2,'type,1\n');
    fprintf(fid2,'mat,1\n');
    fprintf(fid2,'real,%d\n',i);
    for j=1:1:length(elemi)
        if  elemlayer(j)==i
            fprintf(fid2,'e,%d,%d\n',elemi(j),elemj(j));
        end
    end
end
fprintf(fid2,'fini\n');
fclose(fid2);
line,length(elemlayer),length(elemi)
回复 不支持

使用道具 举报

发表于 2010-11-4 10:57:31 | 显示全部楼层 来自 浙江杭州
function addplum
clc
[filename,filepath]=uigetfile('*.txt','input');
fid=fopen(filename,'rt');
if fid<0
    errordlg({'read error'});
else
    frewind(fid);
    node_num=fscanf(fid,'%d',[1,1]);
    element_num=fscanf(fid,'%d',[1,1]);
    eletype_number=fscanf(fid,'%d',[1,1]);
    elereal_number=fscanf(fid,'%d',[1,1]);
    node_all=fscanf(fid,'%f',[7,node_num]);
    node_all=node_all';
    element_all=fscanf(fid,'%f',[4,element_num]);
    element_all=element_all';
end
fclose(fid);
ele_no=element_all(:,1);
ele_lp=element_all(:,2);
ele_rp=element_all(:,3);
ele_load=element_all(:,4);
node_no=node_all(:,1);
node_x=node_all(:,2);
node_y=node_all(:,3);
node_z=node_all(:,4);
node_xload=node_all(:,5);
node_yload=node_all(:,6);
node_zload=node_all(:,7);
mass=node_all(:,1);
for i=1:1:element_num
    ele_length_xy(i)=sqrt((node_x(ele_lp(i))-node_x(ele_rp(i)))^2+(node_y(ele_lp(i))-node_y(ele_rp(i)))^2);% ele_length_xy(i) means the shadow length in plan XY.
end
for i=1:1:node_num
    nodeforce_z(i)=node_zload(i);
    for j=1:1:element_num
        if ele_lp(j)==i | ele_rp(j)==i;
            nodeforce_z(i)=nodeforce_z(i)+0.5*ele_load(j)*ele_length_xy(j);
        end
    end
    mass(i)=nodeforce_z(i)/9.8; %The unit is 1000kg(t) here.
end

fid=fopen('MassAdd.txt','wt');%ansys output file
if fid<0
    errordlg({'error'});
else
fprintf(fid,'/PREP7\nET,%d,MASS21\n',eletype_number+1);     %start output
fprintf(fid,'KEYOPT,%d,1,0\nKEYOPT,%d,2,0\nKEYOPT,%d,3,2\n',eletype_number+1,eletype_number+1,eletype_number+1);  
  for i=1:1:node_num
    fprintf(fid,'R,%d,%f\n',i+elereal_number,mass(i));%assign mass to nodes.
  end
  for i=1:1:node_num
    fprintf(fid,'\n\nTYPE,%d\nMAT,1\nREAL,%d\nESYS,0\n',eletype_number+1,i+elereal_number);
    fprintf(fid,'E,%d\n',node_no(i));
  end
end
fclose(fid);
msgbox('done!')
回复 不支持

使用道具 举报

发表于 2010-11-4 10:58:45 | 显示全部楼层 来自 浙江杭州
function pu
clc;
clear;

Tg=0.35;                                     %特征周期               
ALPHAmax=0.04;                              %地震影响系数最大值
sita=0.02;                                  %结构阻尼比


gama=0.9+(0.05-sita)/(0.5+5*sita);           %曲线下降阶段的衰减指数
eita1=0.02+(0.05-sita)/8;                    %直线下降斜率调整系数
eita2=1+(0.05-sita)/(0.06+1.7*sita);         %阻尼调整系数
if eita1<0
    eita1=0;
end
if eita2<0.55
    eita2=0.55;
end
FREQ(18)=1/Tg;
alfa(18)=ALPHAmax*eita2;
FREQ(19)=10;
alfa(19)=ALPHAmax*eita2;
FREQ(20)=10000;
alfa(20)=0.45*ALPHAmax;

j=15;
for i=3:17
    FREQ(i)=1/(Tg+j*(4*Tg)/16);
    j=j-1;
    alfa(i)=power(Tg*FREQ(i),gama)*eita2*ALPHAmax;
end

FREQ(1)=1/6;

alfa(1)=(eita2*power(0.2,gama)-eita1*(6-5*Tg))*ALPHAmax;
if alfa(1)<=0
    alfa(1)=0.0001;
    FREQ(1)=1/((eita2*power(0.2,gama)-alfa(1)/ALPHAmax)/eita1+5*Tg);
end

FREQ(2)=0.2/Tg;
alfa(2)=(eita2*power(0.2,gama)-eita1*(1/FREQ(2)-5*Tg))*ALPHAmax;

SV=alfa*9.8;                           %加速度谱是规范系数谱的9.8倍


fid=fopen('puinput.txt','wt');
if fid<0
    errordlg({'文件打开出错'});
else
    fprintf(fid,'/solu\nantype,8\nsvtyp,2,1,\nsed,0,,1,\nrock,0,0,0,0,0,0,\nfreq');
    for i=1:9
        fprintf(fid,',%5.4f',FREQ(i));
    end
    fprintf(fid,'\nfreq');
    for i=10:18
        fprintf(fid,',%5.4f',FREQ(i));
    end
    fprintf(fid,'\nfreq');
    for i=19:20
        fprintf(fid,',%5.4f',FREQ(i));
    end
   
    fprintf(fid,'\nsv,%f',sita);
    for i=1:9
        fprintf(fid,',%5.4f',SV(i));
    end
    fprintf(fid,'\nsv,%f',sita);
    for i=10:18
        fprintf(fid,',%5.4f',SV(i));
    end
    fprintf(fid,'\nsv,%f',sita);
    for i=19:20
        fprintf(fid,',%5.4f',SV(i));
    end
end
fclose(fid);
回复 不支持

使用道具 举报

发表于 2010-11-20 21:39:43 | 显示全部楼层 来自 江苏无锡
楼上这个不错,,,高人,有优化方面的资料吗??比如遗传算法和PSO算法,网上好多都是算函数的,没有和ANSYS结合做优化的。
回复 不支持

使用道具 举报

发表于 2010-12-23 11:49:51 | 显示全部楼层 来自 重庆
强烈支持哪位高人弄个abaqus to mablat的调用程序
回复 不支持

使用道具 举报

发表于 2010-12-23 12:37:30 | 显示全部楼层 来自 湖北武汉
解决了大问题!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-3-16 19:58:56 | 显示全部楼层 来自 陕西西安
是不是该LOAD一下,
回复 不支持

使用道具 举报

发表于 2011-3-21 19:11:34 | 显示全部楼层 来自 上海
11楼也是出于善意。但是学习这个过程,如果大家都偏于理性的话,科学就不会有发展。LZ 的做法也许不可取,但是,整个过程中他学会的东西和增长的自信以及快感还是很巨大的,对他以后做其他的事还是很有间接的好处的,不能一棍子打死。
回复 不支持

使用道具 举报

发表于 2011-3-22 09:59:48 | 显示全部楼层 来自 湖南长沙
不知abaqus to matlab 有什么不同!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 07:09 , Processed in 0.059508 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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