在家闲着也是闲着,开学无望,不如大胆的立个flag,从今天开始,每天学习一个UDF,大家一起进步吧!
chapter-1 UDF概述
1.1网格基本知识
-
node 节点
node thread 一组节点
edge 一个面(三维)的边界
face 面单元(二维或三维)的边界
face thread 一组面
cell 控制体
cell center 控制体中心
cell threads 一组单元格
domain 一组节点、面和控制体 -
node 存储与网格点相关的数据的结构数据类型
face_t 整数数据类型,用于标识面线程中的特定面
cell_t 整数数据类型,用于标识face thread中的特定单元格
Thread 结构数据类型,用于存储它所表示的一组单元格或面所共有的数据
chapter-2 定义宏
2.1. 概述
DEFINE宏的定义包含在udf.h头文件中
确保宏和参数的第一个括号之间没有空格
对于宏定义,名称应为小写,输入参数是从fluent求解器传递到函数的变量。
2.2通用定义宏
2.2.1 DEFINE_ADJUST
功能:DEFINE_ADJUST可用于调整或修改不作为参数传递的ANSYS FLUENT变量。例如,可以使用DEFINE_ADJUST修改流量变量(例如,速度、压力)和计算积分。还可以使用它对域上的标量进行积分,并根据结果调整边界条件。
example-1
该UDF对整个域上的湍流耗散进行积分。然后在控制台中显示此值。UDF在每次迭代中调用一次。
#include "udf.h"
DEFINE_ADJUST(my_adjust,d)
{
Thread *t;
real sum_diss=0.;
cell_t c;
thread_loop_c(t,d)/*在domain中遍历thread*/
{
begin_c_loop(c,t)/*在thread中遍历cell*/
sum_diss += C_D(c,t)*C_VOLUME(c,t);/*C_D是湍动能耗散率,C_VOLUME获取cell的体积,在udf中积分即为求和*/
end_c_loop(c,t)
}
printf("Volume integral of turbulent dissipation: %g\n", sum_diss);
}
example-2
该UDF将用户定义标量指定为另一个用户定义标量的梯度的函数。该函数在每个迭代中调用一次
#include "udf.h"
DEFINE_ADJUST(adjust_fcn,d)
{
Thread *t;
cell_t c;
real K_EL = 1.0;
if (! Data_Valid_P())
return;
thread_loop_c(t,d)
{
if (FLUID_THREAD_P(t))/*检查单元是否在流体域*/
{
begin_c_loop_all(c,t)/*串行时,begin_c_loop_all和begin_c_loop是相同的;并行时,host 节点两者相同,node 节点两者不一样*/
{
C_UDSI(c,t,1) +=K_EL*NV_MAG2(C_UDSI_G(c,t,0))*C_VOLUME(c,t);/*C_UDSI是自定义标量,NV_MAG2计算平方和,C_UDSI_G取梯度*/
}
end_c_loop_all(c,t)
}
}
}