最近在学习Fluent UDF ,主要参考资料为Fluent软件自带的帮助手册及网上资料。下面是给了一个UDF中DEFINE_PROFILE 宏的应用案例,这个宏主要是可用于边界条件的配置,下面的例子是给定边界上压力随Y轴坐标进行变化,根据自己的学习对代码进行了较为详细的注释。仅供参考。
/*边界面上压力随Y坐标的变化UDF设置函数关系:p(y)=1.1e5-0.1e5*(y/0.0745)^2*/
#include "udf.h"
/* udf.h 文件包含了UDF相关的常用函数或类型的声明 */
DEFINE_PROFILE(pressure_profile,t,i)
/*一个宏,可用于边界条件配置等,包含三个变量。pressure_profile为该UDF配置文件的名称,可以修改;
Thread *t 就是指t是指向这个Thread结构体(网格面等集合体)的指针;
int i 是标识要定义的变量的索引。当通过图形用户界面在“边界条件”对话框中使用UDF时,将设置i。
该索引随后由ANSYS Fluent求解器传递给UDF,以便函数知道要对哪个变量进行操作。*/
{
real x[ND_ND];
/* 定义了一个数组,数组类型为real,数组长度为常数ND_ND,由ND宏定义。
对于二维问题ND_ND为2,对于三维问题ND_ND为3,不需要手动修改,求解器会自动判别,
此处用于后续存放单元中心坐标*/
real y;
/* 定义变量y,数据类型为real*/
face_t f;
/* 定义变量f,数据类型为face_t ,表示网格面的意思,即f代表一个网格单元的网格面*/
begin_f_loop(f,t)
/* 开始遍历网格面,扫描所定义边界的所有网格面,对其进行以下操作*/
{
F_CENTROID(x,f,t);
/* 一个函数,读取网格面形心的坐标,并输出给x,x为之前定义的数组 */
y = x[1];
/* 将坐标网格面的形心坐标Y值赋值给y。0为X坐标,1为Y坐标,2为Z坐标*/
F_PROFILE(f,t,i) = 1.1e5 - y*y/(.0745*.0745)*0.1e5;
/* 将网格面形心的压力通过给定的与Y坐标的函数关系赋值给网格面,
fluent在计算的时候是把数据存储到网格形心上的,所以网格形心的压力值就代表网格的压力值*/
}
end_f_loop(f,t)
/* 结束循环*/
}