ANSYS是以一个多用途的有限元法计算机设计程序软件,主要用来求解结构、流体、电力、电磁场及碰撞等问题。主要用于可进行线性分析、非线性分析和高度非线性分析、流体动力学分析、电磁场分析、声场分析、压电分析以及多物理场的耦合分析。
APDL的全称是ANSYS Parametric Design Language,也被叫做ANSYS参数化设计语言。APDL不仅是优化设计和自适应网格划分等ANSYS经典特性的实现基础,也为日常分析提供了便利。APDL的运用主要体现在用户可以利用程序设计语言将ANSYS命令组织起来,编写出参数化的用户程序,从而实现有限元分析的全过程,即建立参数化的CAD模型、参数化的网格划分与控制、参数化的材料定义、参数化的载荷和边界条件定义、参数化的分析控制和求解以及参数化的后处理。
上述简单介绍ANSYS和APDL是为了让读者更好地了解Matlab调用ANSYS的过程,ANSYS对比其他有限元软件比较突出的优点就是可以利用APDL建模,而Matlab调用ANSYS也是基于APDL来实现的。原理图如下:
Matlab调用ANSYS接口:
system('SET ANSYS_LOCK=OFF & "C:\ANSYS10.0\Ansys Inc\v100\ANSYS\bin\Intel\ansys100.exe" -b -i test1.mac -o file.out');
system('"C:\ANSYS10.0\Ansys Inc\v100\ANSYS\bin\Intel\ansys100.exe" -b -i test1.mac -o file.out');
以上是Matlab2018a调用ANSYS10.0的接口,亲测可用。两个都可以,但是因为某些缘故,ANSYS被锁了,那么也会调用出错,所以建议使用第一条。第一条加了 "SET ANSYS_LOCK=OFF",可以帮助解锁。另外接的 "C:\ANSYS10.0\Ansys Inc\v100\ANSYS\bin\intel\ansys100" 这部分是ANSYS安装的位置,需要替换成自己的ANSYS路径。如果不懂怎么找路径可按以下操作:
(1)找到ANSYS Product Launchar,点进去
(2)找到Links,并选择Display Command Line
(3)红色方框就是本机ANSYS的安装路径,把其复 制下来替换到接口的路径即可:
处理好接口的路径后,还需要把接口的"test1.mac"替换成需要调用的APDL文件或者宏文件,后缀可以是txt,其他保留不动即可。
另外需要注意的是,假如按上述操作还是调用失败,原因主要有两个:(1)APDL文件本身就有问题,可以直接把其复 制到ANSYS进行测试;(2)版本问题,ANSYS高版本的调用接口有所不同,需要做一定的改变。
如果需要在Linux下调用ANSYS可以用以下接口(笔者没有用过,有需要的可以自行测试):
system('/opt/ansys_inc/v811/ansys/bin/ansys811 -p AA_R -b -i test1.mac -o file.out');
利用C++去调用ANSYS的需要应该是比较少的,笔者是为了后续需要ANSYS大量重复计算而用的,利用C++的多线程可以并发调用ANSYS进行计算,从而节省计算时间。C++调用ANSYS主要是用Window自带的api进行调用,主要有WinExec(),ShellExecute()和CreateProcess()三种方式。其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂:
(1)WinExec 有两个参数,前一个指定路径,后一个指定显示方式。
(2)ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。
(3)CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,就需要使用CreateProcess函数了。
笔者只使用了WinExec()和CreateProcess()这两种,具体调用如下:
string path="C:\\ANSYS10.0\\Ansys Inc\\v100\\ANSYS\\bin\\Intel\\ansys100.exe -p ANE3FL -dir C:\\test -j file -s read -l en-us -b -i C:\\test\\b.txt -o C:\\test\\file.out";
WinExec(path.c_str(),SW_HIDE);
STARTUPINFO si;
PROCESS_INFORMATION pi;
LPTSTR szCmdline1=_tcsdup(TEXT("c:\\ANSYS10.0\\Ansys Inc\\v100\\ANSYS\\bin\\Intel\\ansys100.exe"));
LPTSTR szCmdline2=_tcsdup(TEXT("-p ANE3FL -dir C:\\test -j file -s read -l en-us -b -i C:\\test\\b.txt -o C:\\test\\file.out"));
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
CreateProcess( szCmdline1, // No module name (use command line)
szCmdline2, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi); // Pointer to PROCESS_INFORMATION structure
其中接口部分修改如下:
(1)按照上述操作来到ANSYS Product Launchar界面
(2)按自己的需要配置好方框的内容,并按以下操作:
(3)复 制红色方框的内容到接口处替换即可