声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1372|回复: 0

[前后处理] MATLAB调用ANSYS的计算结果

[复制链接]
发表于 2016-3-8 10:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  ==================================前言==================================

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

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

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

  C:\Ansys\v100\ANSYS\bin\intel\ansys100.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:\WORK\matlabwork\diaoyongwork\m2a.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,'%s\r\n',' matlab to ansys variables = matlab传至ansys变量');

  fprintf(fid,'%s\r\n','*************************************************************');

  fprintf(fid,' s s\r\n','A1','A2');

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

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

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

  fprintf(fid,' .10f .10f\r\n',A);

  %% %f:Fixed-point notation固定字符表示法 先是20位的数字精确到小数点10位然后是20位的数字精确到小数点后10位

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

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

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

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

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

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

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

  system('C:\Ansys\v100\ANSYS\bin\intel\ansys100.exe -b -p ane3fl -i D:\WORK\ansyswork\dya.mac -o D:\WORK\ansyswork\dya.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:\WORK\matlabwork\diaoyongwork\a2m.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:\WORK\matlabwork\diaoyongwork\m2a,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:\WORK\matlabwork\diaoyongwork\a2m,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



转自:http://blog.sina.com.cn/s/blog_4d84764b0101eowk.html
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-19 22:11 , Processed in 0.060956 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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