这里以简单的二维圆柱涡激振动流固耦合为例,向大家介绍MATLAB与Fluent联合仿真的基本过程。

我们都知道,以往利用Fluent模拟二维圆柱涡激振动是利用用户自定义函数(User-defined-functions,UDFs)来实现,在UDFs中,针对每一个计算时间步长,采用Compute_Force_And_Momenthong宏来计算圆柱表面受到的流体力,这个流体力是由于尾涡交替脱落在圆柱表面产生的。知道圆柱受力之后,根据结构运动方程(如下式,二阶常微分方程,右端项表示流体力),采用四阶龙格库塔法离散求解,得到圆柱的振动位移和速度,然后利用DEFINE_CG_MOTION宏实现网格运动。

python fluent联合仿真 matlab fluent联合_matlab

        通过上面对传统UDFs实现涡激振动的流程可以看出,关键步骤有三点:1、获取圆柱所受的流体力;2、龙格库塔法求解结构运动方程;3、将得出的位移和速度更新圆柱体位置,实现网格运动。

        利用MATLAB与Fluent联合仿真,可以将上述的第2点在MATLAB中实现,发挥MATLAB求解方程的能力,而Fluent主要作用则是求解流体方程,得到流体力,实现步骤1和3。因此,在这一过程中,MATLAB就像是客户端(CLient),FLuent就像是服务器(Sever,提供流体力),组成了CS模型。

  • 环境配置

        首先我们要准备一下开发环境,需要在MATLAB中安装联合仿真的工具箱文件(“ANSYS_aaS 1.1.9.mltbx”文件,获取请在公众号(扫描文章末尾的二维码)内回复“MATLAB联合仿真”)。

python fluent联合仿真 matlab fluent联合_MATLAB_02

python fluent联合仿真 matlab fluent联合_经验分享_03

下载后,在MATLAB中按照上图打开文件的方式找到该文件,选择安装即配置好了环境。

 

  • 以服务器模式启动Fluent

        接下来就是以服务器的方式启动Fluent。首先选定fluent的工作路径,之后在该文件夹下会生成联合仿真的秘钥文件(aaS_FluentId.txt)。接着,在环境(Environment)选项卡中,输入“FLUENT_AAS=1”,代表以服务器方式启动Fluent。

python fluent联合仿真 matlab fluent联合_服务器_04

python fluent联合仿真 matlab fluent联合_服务器_05

按照上述方式启动之后,在工作路径中会出现以下三个文件。

python fluent联合仿真 matlab fluent联合_服务器_06

 至此,Fluent启动过程已经完成。

        此外,还需要按照正常流程进行GUI设置,设置完成之后保存cas文件,之后便于在MATLAB中读取cas文件。

  • MATLAB连接Fluent

        在Fluent的准备工作都完成之后,接下来就是编写MATLAB代码,连接Fluent运行程序。

orb=initialize_orb();
load_ansys_aas;
FluetnPath = 'Your own fluent work path';
aaS_Path = char(FluetnPath+"aaS_FluentId.txt");

ICoFluentUnit = actfluentserver(orb,aaS_Path);
iFluentTuiInterpreter = ICoFluentUnit.getSchemeControllerInstance();

ICoFluentUnit.loadCase('cylinder_2D.cas');
iFluentTuiInterpreter.doMenuCommand('/display/mesh');

ICoFluentUnit 接口提供了一组函数,这些函数在 ANSYS Fluent 中执行典型命令,用于求解 CFD 仿真案例。例如,可以用它来加载或保存案例和数据文件、设置计算迭代次数、启动计算、获取或设置定义的参数值等等。生成的iFluentTuiInterpreter对象可用于将 TUI 或方案命令发送到 Fluent 会话,以此来实现更高级的功能。

  • MATLAB实现联合仿真

        完成连接之后,接下来就是发送计算命令以及获取Fluent生成的流体力数据进行联合仿真计算。主要代码如下:

% 任务1、获取流体力
fileId = fopen(FluetnPath+"force.txt", 'r');
[force, count] = fscanf(fileId, '%f') ;
fclose(fileId);   
    
% 任务2、运动方程求解位移
[vel_n, dis_n] = calculate_y_motion(force(end), vel, dis);
dis_history = [dis_history,dis_n];
    
% 任务3、将位移传递到fluent中进行迭代求解
set_dis_commnd = strcat("(rpsetvar 'vel_n ", num2str(vel_n), ").");
iFluentTuiInterpreter.execScheme(set_dis_commnd)

        通过以上联合仿真步骤,可以实现简单的二维圆柱涡激振动。这种MATLAB和Fluent联合仿真的方式,能够为更为复杂的流固耦合问题提供计算方法和思路。