有限元 弧长法 matlab,[转载]MATLAB调用ANSYS的计算结果

==================================前言==================================

因为论文课题有关结构优化,故一直在寻找优化算法的执行操作,优化算法一般在matlab中实现,但结构计算需要在ansys等专业有限元软件中实现,故需要在matlab中调用ansys的计算结果

网上一直没有详细的完整过程描述,下面我把我的调用方法详细阐述出来,以供需要的朋友参考,当然如果你有更好的思路或者更简便的方法,可以联系我,欢迎相互交流:)

我使用的matlab版本是2012b,ansys版本是10.0,需要注意的是ansys的安装路径里不能有空格,比如我的安装路径是

C:Ansysv100ANSYSbinintelansys100.exe

很多人一直失败的原因就是ansys安装的时候是按照默认路径,带了空格

调用过程需要用到4个文件:

dym.m 这是matlab程序的执行文件,dy表示调用,m表示matlab

dya.mac 这是ansys程序的执行文件,dy表示调用,a表示ansys

m2a.txt 这是存放将要从matlab导入ansys中的数据的文件

a2m.txt 这是存放将要从ansys导入matlab中的数据的文件

当然,名字可以自己取~

==================================步骤==================================

整个调用过程可简述如下:

1) 在dym.m中定义变量并写入到m2a.txt

2) 调用启动ansys,dya.mac中有语句能读取m2a.txt中的数据作为计算的参数,并有语句将计算的结果存放至a2m.txt

3) 在dym.m中读取a2m.txt的计算结果,作为函数的返回值,调用结束

下面会给出代码,部分语句已有注释,大家结合帮助很容易看懂,重点关注文件的读写操作

============================我是华丽的分割线============================

下面是dym.m的代码

function [dxmaxa,vol] = dym (A)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%% 定义变量 %%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

A1=A(:,1);

A2=A(:,2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%% 将变量写入文件 %%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fid=fopen('D:WORKmatlabworkdiaoyongworkm2a.txt','wt');

%将matlab中变量输出到文件par.txt中

%% fid = fopen(filename, permission)

%% fid:An integer that identifies the file for all subsequent

low-level file I/O op%MATLAB reserves file identifiers 0, 1, and 2

for standard input, standard output (the screen), and standard

error, respectively. When fopen successfully opens a file, it

returns a file identifier greater than or equal to 3.

%% filename:Name of the file associated with the specified

fid.

%% permission:String that describes the type of access for the

file: read, write, append, or update. Also specifies whether to

open files in binary or text mode.

%% 'w':Open or create new file for writing. Discard existing

contents, if any.

%% To open files in text mode, attach the letter 't' to the

permission

fprintf(fid,'%srn',' matlab to ansys variables = matlab传至ansys变量');

fprintf(fid,'%srn','*************************************************************');

fprintf(fid,' s srn','A1','A2');

%% fprintf(fileID,formatSpec,A1,...,An)

%% %s:String of characters字符串 先是20位的string 然后是20位的string

%% rn保证在所有系统里面都能正确显示换行,具体可以百度换行和回车的区别

fprintf(fid,' .10f .10frn',A);

%% %f:Fixed-point notation固定字符表示法

先是20位的数字精确到小数点10位然后是20位的数字精确到小数点后10位

%% 输出的时候,数字间什么都不用加 非要加就加空格,不能加逗号,ansys读取数据的时候不能识别逗号

%% 不同格式之间加空格表示生成的数据之间带空格

fclose(fid); %% 关闭打开的文件

%% type par.txt %% 显示文件内容

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%% 启动ansys %%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

system('C:Ansysv100ANSYSbinintelansys100.exe -b -p ane3fl

-i D:WORKansysworkdya.mac -o D:WORKansysworkdya.out')

%% -b:batch mode

%% -p ??? : product ??? 后面接产品特征代码

%%

ansys的产品特征代码:屏幕左下角“开始”->>“ansys10.0”->>"help"->>installation

and licensing。查找Product list。

%% -i:input file

%% -o:output file

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%% 读取ansys计算结果 %%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 读取数据文件的时候数字间可以是空格也可以是逗号

[dxmaxa,vol]=textread('D:WORKmatlabworkdiaoyongworka2m.txt','%f%f','headerlines',3)

return

============================我是华丽的分割线============================

下面是dya.mac的代码

fini !结束当前

/clear !清除所有

/filname,youhua4 !定义文件名

/units,SI !把单位设置成国际制单位

/config,nres,10000 !设置最大步数为10000,因为默认为1000,超过弹出警告

/prep7 !参数定义

parshh=1

parsll=2

*dim,pars,,parshh,parsll

*vread,pars,D:WORKmatlabworkdiaoyongworkm2a,txt,,JIK,parsll,parshh,,3

(2F20.10) !!一行读2个20位的数字精确到小数点后10位

!!*VREAD, ParR, Fname, Ext, --, Label, n1, n2, n3, NSKIP

!!JIK,parsll,parshh 表示先行再列的读一组parshh行parsll列的数据

!!NSKIP表示读数据时跳过的行数,默认为0,表示从第1行开始读,这里为3,表示从第4行开始读

!!尼玛啊!!!vread语句和格式语句中间不能插注释啊有木有!!!vread不能在ansys窗口里面直接输入只能在mac文件里面啊有木有!!!

Es=2.1e11 !弹性模量

Nu=0.3 !泊松比

A1=pars(1,1)

A2=pars(1,2)

Ix1=A1*A1/12 !惯性矩

Ix2=A2*A2/12 !惯性矩

FF1=30*1000 !荷载大小

FF2=15*1000 !荷载大小

FF3=80*1000 !荷载大小

/prep7 !定义单元类型,实常数,材料特性

Et,1,beam3 !定义单元类型1:beam3

r,1,A1,Ix1,sqrt(A1) !定义实常数1:面积、惯性矩和边长

r,2,A2,Ix2,sqrt(A2) !定义实常数1:面积、惯性矩和边长

mp,Ex,1,Es !定义材料特性中的弹性模量1:Es

mp,prxy,1,Nu !定义材料特性中的泊松比1:Nu

!!!!!!!!!!!!建立有限元模型

n,1,0,0,0 !定义关键点1

n,2,0,4,0 !定义关键点2

n,3,3,0,0 !定义关键点3

n,4,3,4,0

n,5,4.5,4,0

n,6,6,0,0

n,7,6,4,0

TYPE,1

MAT,1

REAL,1

e,2,4

e,4,5

e,5,7

TYPE,1

MAT,1

REAL,2

e,1,2

e,3,4

e,6,7

!!!!!!!!!!!!!! 施加约束条件

d,1,ux,0 !在结点1处施加x方向大小为0的位移约束

d,1,uy,0 !在结点1处施加y方向大小为0的位移约束

d,1,rotz,0 !在结点1处施加y方向大小为0的位移约束

d,3,ux,0 !在结点12处施加x方向大小为0的位移约束

d,3,uy,0 !在结点12处施加y方向大小为0的位移约束

d,3,rotz,0 !在结点12处施加y方向大小为0的位移约束

d,6,ux,0 !在结点27处施加x方向大小为0的位移约束

d,6,uy,0 !在结点27处施加y方向大小为0的位移约束

d,6,rotz,0 !在结点27处施加y方向大小为0的位移约束

!!!!!!!!!!!!!!施加荷载

f,5,fy,-FF3

sfbeam,1,1,pres,FF2

sfbeam,4,1,pres,FF1,0

!--------------------------------------------

!!!求解

/solu !进入求解模块

antype,0 !指定分析类型和重新开始状态

nlgeom,1 !打开大变形开关

outres,all,all !控制写入数据库的求解数据

nsubst,50 !指定完成该荷载步的子步数

AUTOTS,off !关闭自动步长,若打开弧长法,则步长肯定为自动步长

!arclen,1 !打开弧长法开关

!arctrm,u,1,5,uy !当5号节点的Y向位移为1时结束迭代

solve !开始求解

finish !结束求解

!!!!!!!!!!!在后处理模块通过单元表提取结果后,保存到变量

/POST1

SET,LAST !!选择最后一子步

allsel !!选择全部

nsort,u,x,0,1 !!以ux的绝对值为基准对节点排序

*get,dxmax,sort,,max !!将最大x位移赋给变量dxmax

*set,dxmaxa,abs(dxmax) !!对dxmax取绝对值

*set,vol,6*A1+12*A2

*cfopen,D:WORKmatlabworkdiaoyongworka2m,txt,

*vwrite,

(' ansys to matlab variables = ansys传至matlab变量')

*vwrite,

('*************************************************************')

*vwrite,

(14x,'dxmaxa',17x,'vol')

!!nx表示n个空格

*vwrite,dxmaxa,vol

(f20.10,f20.10)

*cfclos

FINISH

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值