ANSYSFLUENT培训教材UDF

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A Pera Global Company © PERA China
其他 UDF Hooks
除了边界条件、源项、材料属性外,
UDF 还可用于
– 初始化
Define
• 每次初始化执行一次
– 求解调整
• 每次迭代执行一次
– 壁面热流量
• 以传热系数方式定义流体侧的扩散和 辐射热流量
• 应用于所有壁面
Source terms
Repeat
Solve U-Momentum
Solve V-Momentum
Solve W-Momentum
Solve Mass Continuity; Update Velocity
Source terms
Solve Mass & Momentum
Solve Mass, Momentum,
float x[3]; /* an array for the coordinates */
float y; face_t f; /* f is a face
thread index */
begin_f_loop(f, thread) {
F_CENTROID(x,f,thread); y = x[1]; F_PROFILE(f, thread, nv)
Define User-Defined Functions Interpreted
把 UDF 源码加入到源文件列表中 点击 Build进行编译和链接 如果没有错误,点击Load读入库文件 如需要,也可以卸载库文件
/define/userdefined/functions/manage
把 UDF 源码加入到源文件列表中
UDF中的循环宏
几个经常用到的循环宏为:
– 对域d中所有单元thread循环:
thread_loop_c(ct,d) { }
– 对域d中所有面thread循环: thread_loop_f(ft,d) { }
– 对thread t中所有单元循环: begin_c_loop(c, t) {…}
d: a domain pointer ct, t: a cell thread pointer ft,f_thread: a face thread
Fluid cell-thread (control-volume ensemble)
Nodes
A Pera Global Company © PERA China
Boundary face-thread (boundary-face ensemble)
Internal face-thread (internal-face ensemble) associated with cell-threads
pointer c: a cell thread variable f: a face thread variable
end_c_loop (c,t)
– 对面thread中所有面循环
begin_f_loop(f, f_thread)
{…}
end_f_loop(f, f_thread)
A Pera Global Company © PERA China
在球内设定初始温度600 K 球 中心点位于 (0.5, 0.5, 0.5), 半 径为 0.25, 其余区域为300 K
域指针通过变量传递到UDF
thread_loop_c 宏用来获得 所有单元threads (zones), begin_c_loop 宏获得每个 单元thread中的单元
#include "udf.h“
DEFINE 宏的例子
DEFINE_ADJUST(name,domain); general purpose UDF called every iteration DEFINE_INIT(name,domain); UDF used to initialize field variables DEFINE_ON_DEMAND(name); an ‘execute-on-demand’ function DEFINE_RW_FILE(name,fp); customize reads/writes to case/data files DEFINE_PROFILE(name,thread,index); boundary profiles DEFINE_SOURCE(name,cell,thread,dS,index); equation source terms DEFINE_HEAT_FLUX(name,face,thread,c0,t0,cid,cir); heat flux DEFINE_PROPERTY(name,cell,thread); material properties DEFINE_DIFFUSIVITY(name,cell,thread,index); UDS and species diffusivities DEFINE_UDS_FLUX(name,face,thread,index); defines UDS flux terms DEFINE_UDS_UNSTEADY(name,cell,thread,index,apu,su); UDS transient terms DEFINE_SR_RATE(name,face,thread,r,mw,yi,rr); surface reaction rates DEFINE_VR_RATE(name,cell,thread,r,mw,yi,rr,rr_t); volumetric reaction rates DEFINE_SCAT_PHASE_FUNC(name,cell,face); scattering phase function for DOM DEFINE_DELTAT(name,domain); variable time step size for unsteady problems DEFINE_TURBULENT_VISCOSITY(name,cell,thread); calculates turbulent viscosity DEFINE_TURB_PREMIX_SOURCE(name,cell,thread,turbflamespeed,source);
DEFINE_INIT(my_init_function, domain) {
cell_t c; Thread *ct; real xc[ND_ND]; thread_loop_c(ct,domain) {
begin_c_loop (c,ct) { C_CENTROID(xc,c,ct); if (sqrt(ND_SUM(pow(xc[0]-0.5,2.),
= 20.*(1.y*y/(.0745*.0745));
} end_f_loop(f, thread) }
A Pera Global Company © PERA China
第 2 步 – 解释或编译 UDF
编译UDF
Define User-Defined Functions Compiled
解释UDF
例子 – 抛物线分布的速度入口
在二维弯管入口施加抛物线分布的速度 x 方向的速度定义为
需要通过宏获得入口的中心点, 通过另外一个宏赋予速度条件
A Pera Global Company © PERA China
第1步 – 准备源代码
DEFINE_PROFILE 宏允许定 义x_velocity函数
• 定制物理模型
• 用户提供的模型方程
• 调整函数
• 执行和需求函数
• 初始化
A Pera Global Company © PERA China
ቤተ መጻሕፍቲ ባይዱ 可以使用UDF的位置
Segregated
PBCS
DBCS
Initialize
UserBegin Loop defined
ADJUST
Solver?
User Defined INITIALIZE
– 所有的UDFs 以 DEFINE_ 宏开始
– x_velocity 将在 GUI中 出现
– thread 和 nv DEFINE_PROFILE 宏的参 数, 分别用来识别域和变量
– begin_f_loop宏通过 thread指针,对所有的面f 循环
F_CENTROID宏赋单元位置向 量给 x[]
ANSYS FLUENT 培训教材 第七节:UDF
安世亚太科技(北京)有限公司
A Pera Global Company © PERA China
概要
FLUENT UDF简介 FLUENT 数据结构和宏 两个例子 UDF 支持
A Pera Global Company © PERA China
F_PROFILE 宏在面 f上施加 速度分量
代码以文本文件保存
inlet_bc.c
Header file “udf.h” must be included at the top of the program by the #include command
#include "udf.h" DEFINE_PROFILE(x_velocity,thread,nv) {
Fluid (cell thread or zone)
Domain
Cell Thread
face Thread
Cells
Faces
▪ 为了在thread (zone)中获得数据,我们需要提供正确的指针,并 使用循环宏获得thread中的每个成员(cell or face)
A Pera Global Company © PERA China
点击 Interpret FLUENT 窗口会出现语言 如果没有错误,点击 Close
A Pera Global Company © PERA China
解释 vs. 编译
用户函数可以在运行时读入并解释,也可以编译形成共享库文件并和 FLUENT链接
解释 vs. 编译 – 解释
• 解释器是占用内存的一个大型程序 • 通过逐行即时执行代码 • 优势 – 不需要第三方编译器 • 劣势 – 解释过程慢,且占用内存
简介
什么是UDF?
– UDF 是用户自己用C语言写的一个函数,可以和FLUENT动态链接
• 标准C 函数
▪ 三角函数,指数,控制块,Do循环,文件读入/输出等
• 预定义宏
▪ 允许获得流场变量,材料属性,单元几何信息及其他
为什么使用 UDFs?
– 标准的界面不能编程模拟所有需求:
• 定制边界条件,源项,反应速率,材料属性等
UDF 数据结构(2)
cell_t 声明了识别单元的整型数据类型
face_t声明了识别面的整型数据类型
Type
Domain Thread cell_t face_t Node
Variable
*d; *t; c; f; *node;
Meaning of the declaration
d is a pointer to domain thread t is a pointer to thread c is cell thread variable f is a face thread variable node is a pointer to a node.
Energy, Species
Source terms
Exit Loop Check Convergence
Solve Energy
Update Properties
Solve Species
User-Defined Properties User-Defined BCs
Solve Turbulence Equation(s) Solve Other Transport Equations as required
Source terms
A Pera Global Company © PERA China
UDF 数据结构 (1)
▪ 在UDF中,体域和面域通过Thread数据类型获得 ▪ Thread 是 FLUENT 定义的数据类型
Domain Cell
Boundary (face thread or zone)
– 用户定义表面反应或体积反应
– Case/ data 文件的读写
• 读入顺序必须和写出顺序一致
– Execute-on-Demand 功能
• 不参与求解迭代
User-Defined
Function Hooks
A Pera Global Company © PERA China
例 2 – 定制初始化
pow(xc[1] - 0.5,2.), pow(xc[2] - 0.5,2.))) < 0.25) C_T(c,ct) = 600.; else C_T(c,ct) = 300.; } end_c_loop (c,ct) } }
A Pera Global Company © PERA China
DEFINE 宏
– 编译
• UDF 代码一次转换为机器语言 • 运行效率高. • 创建共享库,和其他求解器链接 • 克服解释器的缺陷
只有在没安装C编译器时使用解释方式
A Pera Global Company © PERA China
第3 步– 在 FLUENT GUI中hook UDF
打开边界条件面板,选择你要施加UDF的边界 把 Constant 改为 udf x_velocity 宏的名字为 DEFINE_PROFILE 中第一个参数
A Pera Global Company © PERA China
第4步 – 运行
可以在运行窗口中改变速度分布的更新间隔(默认为1)
– 这个设置控制了流场多久(迭代或时间步)更新一次
运行 calculation
A Pera Global Company © PERA China
结果
左图为速度矢量图 右图为入口的速度矢量图,注意速度分布是抛物线型的
相关文档
最新文档