Matlab调用ANSYS的三种方法

采用matlab作为主控程序,设置好所有的参数与选项传递给ansys(通过文件)并调用ansys计算。ansys计算结束后(默认情况下,matlab会自己等着,这一点很方便,呵呵)再用matlab处理ansys的输出文件。由于所有的设置可以在matlab中统一完成,省去很多参数同步的工作,也顺便实现了计算的自动化。呵呵。。。
核心提示:1.如何使用matlab调用ansys,下面是个例子

1. “!法
!“D:Program FilesAnsys Incv100ANSYSbinintelansys100.exe” -b -i d:inpvm1.mac -o “d:out put1.txt”
“! ” 是由matlab提供的用以执行shell命令的操作符(也可以用system或dos命令)**
2. “system法
system(‘D:\ANSYS\v80\ANSYS\bin\intel\ansys80 -b -p ane3fl -i C:\sibian.dat -o C:\vm5.out’)
3. “dos法”
dos( ’ “C:\Program Files\ANSYS Inc\v162\ansys\bin\winx64\ANSYS” -b -i “C:\New folder\matlabex\ansyscampbell\in.txt” -o “C:\New folder\matlabex\ansyscampbell\out.txt” ');
That is, every path should have " " around it, so that if it happens to have a space in it, dos will not break it up into two arguments.

参数 -b指定使用batch方式运行ansys,-i 指定输入文件,-o指定输出文件。这里有一点值得注意的是,这里的输出文件是指在gui方式运行是output windows中的输出内容,通常不是我们想要的结果文件。
2.我们想要的ansys结果可以通过*vwrite,*mwrite等命令写入文件,以供matlab使用。
3.想要matlab传递给ansys的参数,也通过文件方式传递。


1、调用ANSYS
!“D:\ANSYS Inc\v180\ANSYS\bin\winx64\ansys180.exe” -b -i “E:\ansys2matlab\work.txt” -o “E:\ansys2matlab\process.out”;

以上为在matlab中调用ANSYS内核的代码。

“D:\ANSYS Inc\v180\ANSYS\bin\winx64\ansys180.exe” 是ANSYS的绝对路径,依据ANSYS的安装位置改写即可;

-b 是使用batch方式运行ANSYS;

-i 是输入文件;

“E:\ansys2matlab\work.txt” 是用ANSYS APDL语言编制的计算模型

-o 是输出文件;

“E:\ansys2matlab\process.out” 是ANSYS计算过程的输出文件


两种方式:

  1. 当matlab调用的时候,可以采用!的方式和system函数两种方式。注意第一个ansys80这个可执行文件目录中不能有空格,否则matlab不能识别。即可以采用如下的调用方式:
    system(‘D:\ANSYS\v80\ANSYS\bin\intel\ansys80 -b -p ane3fl -i C:\sibian.dat -o C:\vm5.out’)
  2. 这部分是关于batch的使用的,应尽量避免目录中的空格,减小不必要的麻烦。下边的batch模式是正确的。
    “D:\ANSYS\v80\ANSYS\bin\intel\ansys80” -b -p ane3fl -i C:\sibian.dat -o C:\vm1.out
    我 的经验是输入文件和输出文件的目录不能太长,且最好不带空格。刚刚开始的时候我的输入文件的目录是C:\Documents and Settings\Administrator\sibian.dat,结果batch不能执行。改为C:\sibian.dat 即可执行了。

遇到的问题
MATLAB调用ANSYS停止工作的解决办法:

根据国外论坛的解答,发现是堆栈溢出的问题,错误代码c00000fd
这是一个系统层级的错误,表示堆栈溢出;这个错误是Matlab调用第三方软件时触发的,因为在执行系统命令时,堆栈内存被名为KMP_STACKSIZE的环境变量默认指定为512k,不足以调用ANSYS。
解决办法:人为放大堆栈内存,matlab中的调用命令改为
system(‘SET KMP_STACKSIZE=2048k & “C:\path_to_ansys\ansys[version].exe” [input arguments…]’)

the problem is related to a particular piece of 3rd party software (OpenMP) used by MATLAB. As of 2014b, when running system commands, the stack size is limited to 512k through an environment variable called KMP_STACKSIZE. It is possible to verify the existence and value of this environment variable by issuing the following command listing all the variables (in Windows):

System(‘SET’)
(produces a list of all environment variables currently set…)
For ANSYS to be able to run, you need to increase the stack size before calling the ANSYS executable. You can do this by wrapping the ANSYS call in a batch script or you can do the following:

System(‘SET KMP_STACKSIZE=2048k & “C:\path_to_ansys\ansys[version].exe” [input arguments…]’)
例子

%% matlab调用ANSYS进行分析
%% 
% ansys 版本中的可执行文件,path中有空格要加:""
ansys_path=strcat('"E:\ANSYS16_install\ANSYS Inc\v160\ansys\bin\winx64\ANSYS160.exe"');
% jobname,不需要后缀
jobname='tianqiao1';
% 是命令流文件,也就是用ansys写的apdl语言,matlab调用时,他将以批处理方式运行,需要后缀
skriptFileName='F:\cuichanghui_here_all\mll\C92_movingload_all_use.txt';
% 输出文件所在位置,输出文件保存了程序运行的相关信息,需要后缀
outputFilename='F:\cuichanghui_here_all\cch_test.out';
% 最终总的调用字符串,其中:32代表空格的字符串ASCII码
sys_char=strcat('SET KMP_STACKSIZE=2048k &',32,ansys_path,32,...
    '-b -p ane3fl -i',32,skriptFileName,32,...
    '-j',32,jobname,32,...
    '-o',32,outputFilename),
% 调用ANSYS
ans1=system(sys_char);

SET ANS_CONSEC=YES !设定连续运行忽略警告

SET ANSYS_LOCK=OFF

SET KMP_STACKSIZE=2048k

“C:\Program Files\ANSYS Inc\v181\ansys\bin\winx64\ANSYS181” -b -i ansysinputreader.txt -o out.dat

Matlab可以通过设置参数和选项来调用Ansys进行有限元分析。首先,在Matlab中使用Ansys主控程序作为主程序,并将所有的参数和选项设置好传递给Ansys进行计算。Ansys计算结束后,Matlab可以处理Ansys的输出文件。这种方式可以实现计算的自动化和参数的统一设置,省去了参数同步的工作。在调用Ansys时,可以使用-b参数指定使用batch方式运行Ansys,-i参数指定输入文件,-o参数指定输出文件。需要注意的是,这里的输出文件是指在Ansys的图形界面中的输出内容,而不是我们想要的结果文件。因此,我们可以使用Ansys的命令(如*vwrite、*mwrite等)将结果写入文件,以供Matlab使用。同时,我们可以通过文件方式传递Matlab要传递给Ansys的参数。这样,MatlabAnsys可以联合进行有限元分析。具体步骤为:Matlab生成数据,并将其以科学计数法的形式写入一个txt文件中;编写Ansys的APDL程序,在Matlab环境下调用APDL程序,以batch方式运行Ansys进行分析求解,并将结果输出到一个txt文件中;Matlab调用该输出文件进行数据分析。123 #### 引用[.reference_title] - *1* *2* [Matlab调用ANSYS三种方法](https://blog.csdn.net/xifegnlie/article/details/104130185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [MATLAB调用ANSYS进行有限元分析](https://blog.csdn.net/ikhui7/article/details/107135488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值