FLUENT流体模拟UDF讲解演示文稿
Fluent中的UDF详细中文教程(9)
第九章本章扼要介绍了FLUENT中用户自定义标量及它们的用法。
•9.1 介绍•9.2 理论•9.3 UDS的定义,求解,后处理9.1 介绍FLUENT可以用求解诸如质量组分之类标量方程的相同方法来求解任意的用户自定义标量 (UDS)。
在某些类型的应用中,如燃烧模拟或是等离子增强表面反应(plasma-enhanced surface reaction)的模拟中,还需引入新的标量输运方程。
用户自定义标量可被用于磁流体动力(MHD)模拟中。
在MHD中,导电流体(conducting fluid)的流体将会产生磁场,此磁场可以用户自定义标量来求解。
磁场造成的对流体的阻尼(a resistance to the flow),可用用户自定义的源项来模拟。
书中4.3.12和4.3.13介绍了用 UDFs来定义标量输运方程的例子。
to customize scalar transport equations.9.2 理论对于一个任意的标量, FLUENT 可求解方程(9.2.1)此处 和 是用户为N 个标量方程中的每一个方程定义的扩散系数和源项。
对于稳态的情况,根据计算对流通量的方法的不同,FLUENT 可求解以下的三种方程之一:•如果对流通量不用计算,则FLUENT 可解方程(9.2.2)此处 和 是用户为N 个标量方程中的每一个方程定义的扩散系数和源项。
•如果以质量流率来计算对流通量,FLUENT可解方程(9.2.3)•如果选择一个用户自定义函数来计算对流通量,FLUENT可解方程(9.2.4)此处 是用户定义的流率。
!! 在FLUENT中,用户自定义函数只可在流体区域内求解,而不能在固体区域内求解。
9.3 UDS的定义,求解,后处理定义,求解,后处理用户自定义标量的步骤概括如下。
注意UDFs 在多相流体和单项流体中应用的重要不同在于,如果是单相的情况(an individual phase), 用户需要提供用户自定义的标量通量函数。
fluent_13.0_lecture08-udf
L8-8
Release 13.0 December 2010
FLUENT User Defined Functions
Example – Parabolic Inlet Velocity Profile
Customer Training Material
• We would like to impose a parabolic inlet velocity to the 2D elbow shown. • The x velocity is to be specified as
ANSYS, Inc. Proprietary © 2010 ANSYS, Inc. All rights reserved.
L8-7
Release 13.0 December 2010
FLUENT User Defined Functions
Loop Macros in UDF
• Several frequently used loop macros:
Exit Loop
Check Convergence Update Properties User-Defined Properties User-Defined BCs
Solve Energy Solve Species Solve Turbulence Equation(s)
Source terms
– Compiled
• • • • UDF code is translated once into machine language (object modules). Efficient way to run UDFs. Creates shared libraries which are linked with the rest of the solver. Does require a compilation step between creating/editing your UDF and using it.
fluent讲稿
质量
动量 能量 封闭方程 底层物理模型
求解设置
物理模型 湍流 燃烧 辐射 多相流 相变 动网格技术
后处理
材料特性 边界条件 初始条件
CFD的基本步骤
分析问题及前处理 1. 确定数值模拟的目标 2. 确定计算区域 3. 建立数值模拟物理模型和网格 求解执行过程 4. 建立数学模型 5. 计算并监控结果 后处理 6. 检查结果 7. 修正模型
建立数值模拟物理模型和网格
能否采用结构化的网格? 几何形状以及流动的复杂程度? 在各个控制区域内需要什么样的网格精度 对于这个几何形体需要什么样的网格精度? 大的网格梯度是否能预测流场? 是否需要采用网格自适应技术? 计算机的内存容量是否满足要求? 需要多少的计算网格? 计算模型的数量?
单方程(Spalart-Allmaras)模型、
双方程模型(基于湍流动能和扩散率:标准κ-ε模型、重整化群κ-ε模型、 带漩流修正的Realizable κ-ε模型;基于湍流能量方程和扩散速率方程: 标准k-ω模型,剪切压力传输(SST) k-ω模型) 雷诺应力模型 大涡模拟(3D)
FLUENT中的湍流模型
三维网格:
tetrahedron
hexahedron
pyramid
prism or wedge
FLUENT中的湍流模型
湍流流动模型很多,但大致可以归纳为以下三类: 湍流输运系数模型 模型的任务就是给出计算湍流粘性系数的方法。根据建立模型所需要的 微分方程的数目,可以分为零方程模型(代数方程模型),单方程模型 和双方程模型。 第二类是抛弃了湍流输运系数的概念,直接建立湍流应力和其它二阶关 联量的输运方程。 大涡模拟
5-1 FLUENT流体模拟-UDF-讲解解析
Fluid (cell thread or zone)
Cells Faces
为了在thread (zone)中获得数据,我们需要提供正确的指针,并 使用循环宏获得thread中的每个成员(cell or face)
A Pera Global Company © PERA China
UDF 数据结构(2)
d: a domain pointer ct, t: a cell thread pointer ft,f_thread: a face thread pointer c: a cell thread variable f: a face thread variable
– 对面thread中所有面循环 begin_f_loop(f, f_thread) { … } end_f_loop(f, f_thread)
A Pera Global Company © PERA China
例子 – 抛物线分布的速度入口
在二维弯管入口施加抛物线分布的速度 x 方向的速度定义为
需要通过宏获得入口的中心点, 通过另外一个宏赋予速度条件
A Pera Global Company © PERA China
第1步 – 准备源代码
Source terms
A Pera Global Company © PERA China
UDF 数据结构 (1)
在UDF中,体域和面域通过Thread数据类型获得 Thread 是 FLUENT 定义的数据类型
Domain Domain Cell Cell Thread Boundary (face thread or zone) face Thread
cell_t 声明了识别单元的整型数据类型 face_t声明了识别面的整型数据类型
5-1 FLUENT流体模拟-UDF-讲解
Source terms
Solve Mass & Momentum
Solve Mass, Momentum,
Energy, Species
Source terms
Exit Loop Check Convergence
Solve Energy
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
Update Properties来自Solve Species
User-Defined Properties User-Defined BCs
Solve Turbulence Equation(s) Solve Other Transport Equations as required
Source terms
例子 – 抛物线分布的速度入口
在二维弯管入口施加抛物线分布的速度 x 方向的速度定义为
需要通过宏获得入口的中心点, 通过另外一个宏赋予速度条件
A Pera Global Company © PERA China
第1步 – 准备源代码
DEFINE_PROFILE 宏允许定 义x_velocity函数
• 预定义宏
▪ 允许获得流场变量,材料属性,单元几何信息及其他
为什么使用 UDFs?
CFD数值模拟(含Fluent)学习及培训课件
而正常运转时可看作定常流动。
❖ 雷诺数
Re uL uL
对于圆形管内的流动,特征长度L取圆管直径d;对于异形管内
的流动,特征长度取水力直径dH。
dH
4
A S
❖ 层流( Re 232)0与湍流( Re 8000 ~ 12000)
当 2320 Re 8000 时,流动处于层流和湍流间的过渡区。
计算流体动力学(CFD)培训资料
-CFD原理及Fluent
XXXX有限公司
2021年02月05日
报告大纲
计算流体动力学(CFD)软件原理与应用
Fluent软件的基本用法 相关模拟案例 公XX司工业程绩的CFD模拟
CFD概述
计算流体动力学(Computational Fluid Dynamics, CFD)是通过计算机数值计算和图像显示,对包含有流 体流动和热传导等相关物理现象的系统所作的分析.其可 以看作是在流动基本方程 (质量守恒方程、动量守恒方 程、能量守恒方程)控制下对流动的数值模拟。通过这 种数值模拟, 可以得到极复杂问题的流场内各个位置的基 本物理量 (如速度、压力、浓度等) 的分布, 以及这些物 理量随时间的变化情况。
CFD商用软件
国内外有许多用于计算流体力学模拟计算的通用 软件, 比较著名的有:
英国CHAM公司推出的Phoenics; 英国帝国学院开发的Star-CD 软件; 英国AEA Technology公司推出的ANSYS CFX 软件; 美国Fluent公司推出的Fluent系列, 现称为ANSYS
分离式解法
❖特点
➢ 非原始变量法没能得到广泛应用。 ➢ 解压力泊松方程法对应的是MAC方法和分布法。 ➢ 人为压缩法要求时间步长必须很小,限制了它的广泛
Fluent中的UDF详细中文教程(7)
第七章 UDF的编译与链接编写好UDF件(详见第三章)后,接下来则准备编译(或链接)它。
在7.2或7.3节中指导将用户编写好的UDF如何解释、编译成为共享目标库的UDF。
_ 第 7.1 节: 介绍_ 第 7.2 节: 解释 UDF_ 第 7.3 节: 编译 UDF7.1 介绍解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。
编译后的UDF由C语言系统的编译器编译成本地目标码。
这一过程须在FLUENT运行前完成。
在FLUENT运行时会执行存放于共享库里的目标码,这一过程称为“动态装载”。
另一方面,解释的UDF被编译成与体系结构无关的中间代码或伪码。
这一代码调用时是在内部模拟器或解释器上运行。
与体系结构无关的代码牺牲了程序性能,但其UDF可易于共享在不同的结构体系之间,即操作系统和FLUENT版本中。
如果执行速度是所关心的,UDF文件可以不用修改直接在编译模式里运行。
为了区别这种不同,在FLUENT中解释UDF和编译UDF的控制面板其形式是不同的。
解释UDF的控制面板里有个“Compile按钮”,当点击“Compile按钮”时会实时编译源码。
编译UDF的控制面板里有个“Open 按钮”,当点击“Open按钮” 时会“打开”或连接目标代码库运行FLUENT(此时在运行FLUENT之前需要编译好目标码)。
当FLUENT程序运行中链接一个已编译好的UDF库时,和该共享库相关的东西都被存放到case文件中。
因此,只要读取case文件,这个库会自动地链接到FLUENT处理过程。
同样地,一个已经经过解释的UDF文件在运行时刻被编译,用户自定义的C函数的名称与内容将会被存放到用户的case文件中。
只要读取这个case文件,这些函数会被自动编译。
注:已编译的UDF所用到的目标代码库必须适用于当前所使用的计算机体系结构、操作系统以及FLUENT软件的可执行版本。
一旦用户的FLUENT升级、操作系统改变了或者运行在不同的类型的计算机,必须重新编译这些库。
UDF自定义函数解读ppt课件
个识别给定线索内面的整数索引。
• Thread Thread数据类型是FLUENT中的数据结构。它
充当了一个与它描述的单元或面的组合相关的
数据容器。
• Node Node数据类型也是FLUENT中的数据结构。它
充当了一个与单元或面的拐角相关的数据容器。
•
Domain
Domain数据类型代表了FLUENT中最高水平的 数据结构。它充当了一个与网格中所有节点、
粘度mu_lam的值,其是温
mu_lam = 143.2135 - 0.49725 * temp; 度 C_T(cell,thread) 的 函 数 。
else
根据单元体温度,计算出
mu_lam = 1.;
mu_lam , 在 函 数 结 尾 ,
return mu_lam;
mu_lam值被返回。
}
Function that Modify an Argument
{
F_CENTROID(x,f,thread);
y = x[0];
F_PROFILE(f,thread,position) = 315. + (y-.044)*(y-.044)/.044/.044*35.;
}
end_f_loop(f, thread)
}
UDF设置边界温度处理要点
• (和一般计算一样设置求解器,模型等) • Define-User defined-Functions-
面组 • 节点线索(node thread) 节点组 • 区域(domain) 由网格定义的所有节点、面和单元线索的组合
Fluent数据类型
• cell_t cell_t是线索(thread)内单元标识符的数据类
《fluent讲义》课件
Fluent的模拟应用和优化技术
1
热传导模拟
模拟热传导过程,包括传热、热辐射和相变,以优化能量传递和系统效率。
2
多物理场模拟
将不同物理场耦合进行模拟,如流体-固体、流体-电磁和流体-热传导,以研究多 场耦合效应。
3
物流耦合模拟
模拟流体和结构耦合,研究流体对结构的影响,以及结构变化对流体行为的反馈。
流体力学概念与模拟
1 流体力学基础
介绍流体力学的基本概念,包括质量守恒、 动量守恒和能量守恒。
2 多相流模拟
探索多相流模型,如气固流、气液流和固液 流,并学习如何模拟这些复杂的流体行为。
3 湍流模拟
了解湍流的产生机制和模型,并学习如何进 行湍流模拟以预测和优化流体行为。
4 化学反应模拟
研究流体中的化学反应过程,包括燃烧、化 学反应和质量转移,并模拟这些过程的影响。
Fluent的动网格技术和并行计算
动网格技术
介绍Fluent中的动网格技术,包括网格自适应和网 格重构。动态调整网格以捕捉流动细节和提高模拟 精度。
并行计算
探索Fluent中的并行计算技术,利用多核处理器和 集群系统提高模拟速度和处理大规模模拟任务。
Fluent的后处理工具和工程应用案例
后处理工具
Fluent的操作和界面介绍包括模型创建、网 格导入、参数设置等。
物理模型选择
深入了解Fluent所提供的多种物理模型选项,并 选择适合你的应用的模型。
用户界面
探索Fluent友好的用户界面,包括工具栏、菜单 栏、视图控制和后处理选项。
求解器设置
学习如何选择和设置合适的求解器以提高模拟效 率和准确性。
使用Fluent的后处理工具进行数据可视化、图表分析 和结果解释,以实现全面的模拟分析。
5-1FLUENT流体模拟-UDF-讲解讲解
• 预定义宏
▪ 允许获得流场变量,材料属性,单元几何信息及其他
为什么使用 UDFs?
– 标准的界面不能编程模拟所有需求:
• 定制边界条件,源项,反应速率,材料属性等 • 定制物理模型 • 用户提供的模型方程 • 调整函数 • 执行和需求函数 • 初始化
Exit Loop
Check Convergence
Update Properties User-Defined Properties User-Defined BCs
Solve Energy Solve Species Solve Turbulence Equation(s) Solve Other Transport Equations as required
A Pera Global Company © PERA China
可以使用UDF的位置
Segregated Userdefined ADJUST PBCS DBCS
Initialize
Loop
Solver? Source terms
Solve U-Momentum
Source terms
cell_t 声明了识别单元的整型数据类型 face_t声明了识别面的整型数据类型
Type Variable Meaning of the declaration
Domain Thread cell_t face_t Node
*d; *t; c; f; *node;
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.
《fluent讲稿》课件
Fluent 的使用者评价
刚需软件
FLUENT 是计算机模拟计算领 域重要的工具,是模拟流体动 力学的良好平台。
一流的C FD解决方案
优秀的CFD计算软件,通过设 定各项物理参数和求解域内物 理场,数据格式相当规范。
信赖的计算流体力学 软件
Fluent 是应用计算流体力学和 计算传热学仿真最广泛的工具 之一,深受用户喜爱。
2 仿真预测分析
能够实现准确预测工程设计的流体力学现象,减少了误差和成本,使得研究人员随时随 地设计多组合的流动设计,如此便于定制出最优的方案。
3 涉及多个应用领域
Fluent 已被广泛应用于化工、建筑、环境、能源、食品、医药、航空航天、汽车甚至数 码备等多个领域中。
Fluent 界面及模块介绍
1
结构化网格
应用定制的网格工具,适合直接网格成像、图形分析和CFD训练模型等应用。
2
有限体积网格
一道典型的网格生成方法,基于一个数学模型,可用于大多数非结构化网格生成, 适用于复杂几何体的网格分析。
3
OpenFOAM
采用较为成熟的生产级非结构化网格技术、压缩实时良好,应用范围非常广。
Fluent 边界条件设置
Fluent 的未来发展趋势
革新技术
Fluent 未来发展愿景是,通过创新技术的开发和引入,为行业大众提供技术解决方案,以应 对美好未来的一切挑战。
上云服务
Fluent 可以为运用该服务的行业界或科研机构提供在线学习、在线制图和线上咨询服务,使 更多的科学家和工程师无处不阅读。
直接液态分析
Fluent 在传输和信号处理领域引入完整的红外和激光移相和测距技术,为人们提供更快速和 准确的工程仿真数据实验操作。
精编【流体数值模拟软件】Fluent基础讲义课件
CFD-FVM
16
策略
Boundary layers
Pre-meshing
Sizing functions 为降低离散误差,减
少单元数量,最好使 用hex(六面体网格) 对形状复杂的几何体 可分解成几个简单几 何体再用六面体网格
CFD-FVM
27
Moving zones
计算流动问题:
旋转部件:叶轮机械 移动或转动的表面:火车会车
CFD-FVM
28
Moving zones
方法
Single reference frame (SRF): 整个计算区域都在 旋转坐标系内
Multiple reference frame (MRF): 选定的区域在旋 转坐标系内
FLUENT6.0 的使用
CFD-FVM
1
Fluent 简介
主流的CFD软件之一 主要用来计算复杂几何形状的流动和换热
问题 其数学模型的组成主要是以纳维-斯托克斯
方程与各种湍流模型为主体
再加上多相流模型、热辐射模型、化学组分的 输运、燃烧与化学反应流模型等.
大多数附加的模型是在主体方程组上补充一些 附加源项、附加输运方程与关系式.
粒子/液滴/气泡在定常和非定常流动中的粒子轨迹
动量、热和质量与流体之间的耦合
液滴的蒸发和沸腾,湿颗粒的干燥
Mixture model: N种组分的混合模型
求解混合物的动量方程,通过确定相对速度来描述离散相
Eulerian multiphase flow model:欧拉多相流模型
CFD-FVM
2
CFD-FVM
Fluent中的UDF详细中文教程
第一章.介绍本章简要地介绍了用户自定义函数(UDF)及其在Fluent中的用法。
在1.1到1.6节中我们会介绍一下什么是UDF;如何使用UDF,以及为什么要使用UDF,在1.7中将一步步的演示一个UDF例子。
1.1 什么是UDF?1.2 为什么要使用UDF?1.3 UDF的局限1.4 Fluent5到Fluent6 UDF的变化1.5 UDF基础1.6 解释和编译UDF的比较1.7一个step-by-stepUDF例子1.1什么是UDF?用户自定义函数,或UDF,是用户自编的程序,它可以动态的连接到Fluent求解器上来提高求解器性能。
用户自定义函数用C语言编写。
使用DEFINE宏来定义。
UDF中可使用标准C语言的库函数,也可使用Fluent Inc.提供的预定义宏,通过这些预定义宏,可以获得Fluent求解器得到的数据。
UDF使用时可以被当作解释函数或编译函数。
解释函数在运行时读入并解释。
而编译UDF则在编译时被嵌入共享库中并与Fluent连接。
解释UDF用起来简单,但是有源代码和速度方面的限制不足。
编译UDF执行起来较快,也没有源代码限制,但设置和使用较为麻烦。
1.2为什么要使用UDF?一般说来,任何一种软件都不可能满足每一个人的要求,FLUENT也一样,其标准界面及功能并不能满足每个用户的需要。
UDF正是为解决这种问题而来,使用它我们可以编写FLUENT代码来满足不同用户的特殊需要。
当然,FLUENT的UDF并不是什么问题都可以解决的,在下面的章节中我们就会具体介绍一下FLUENT UDF的具体功能。
现在先简要介绍一下UDF的一些功能:z定制边界条件,定义材料属性,定义表面和体积反应率,定义FLUENT输运方程中的源项,用户自定义标量输运方程(UDS)中的源项扩散率函数等等。
z在每次迭代的基础上调节计算值z方案的初始化z(需要时)UDF的异步执行z后处理功能的改善z FLUENT模型的改进(例如离散项模型,多项混合物模型,离散发射辐射模型)由上可以看出FLUENT UDF并不涉及到各种算法的改善,这不能不说是一个遗憾。
Fluent UDF 中文教程
第一章.介绍本章简要地介绍了用户自定义函数(UDF)及其在Fluent中的用法。
在1.1到1.6节中我们会介绍一下什么是UDF;如何使用UDF,以及为什么要使用UDF,在1.7中将一步步的演示一个UDF例子。
1.1 什么是UDF?1.2 为什么要使用UDF?1.3 UDF的局限1.4 Fluent5到Fluent6 UDF的变化1.5 UDF基础1.6 解释和编译UDF的比较1.7一个step-by-stepUDF例子1.1什么是UDF?用户自定义函数,或UDF,是用户自编的程序,它可以动态的连接到Fluent求解器上来提高求解器性能。
用户自定义函数用C语言编写。
使用DEFINE宏来定义。
UDF中可使用标准C语言的库函数,也可使用Fluent Inc.提供的预定义宏,通过这些预定义宏,可以获得Fluent求解器得到的数据。
UDF使用时可以被当作解释函数或编译函数。
解释函数在运行时读入并解释。
而编译UDF则在编译时被嵌入共享库中并与Fluent连接。
解释UDF用起来简单,但是有源代码和速度方面的限制不足。
编译UDF执行起来较快,也没有源代码限制,但设置和使用较为麻烦。
1.2为什么要使用UDF?一般说来,任何一种软件都不可能满足每一个人的要求,FLUENT也一样,其标准界面及功能并不能满足每个用户的需要。
UDF正是为解决这种问题而来,使用它我们可以编写FLUENT代码来满足不同用户的特殊需要。
当然,FLUENT的UDF并不是什么问题都可以解决的,在下面的章节中我们就会具体介绍一下FLUENT UDF的具体功能。
现在先简要介绍一下UDF的一些功能:z定制边界条件,定义材料属性,定义表面和体积反应率,定义FLUENT输运方程中的源项,用户自定义标量输运方程(UDS)中的源项扩散率函数等等。
z在每次迭代的基础上调节计算值z方案的初始化z(需要时)UDF的异步执行z后处理功能的改善z FLUENT模型的改进(例如离散项模型,多项混合物模型,离散发射辐射模型)由上可以看出FLUENT UDF并不涉及到各种算法的改善,这不能不说是一个遗憾。
fluent udf定义壁面压强
一、概述在计算流体力学领域,壁面压强是一个十分重要的参量。
而为了准确地计算壁面压强,需要使用一种流畅易读的用户自定义函数(UDF)来定义壁面压强。
在本文中,我们将讨论如何使用流畅的UDF来定义壁面压强。
二、什么是壁面压强壁面压强是指流体在壁面上的压力分布情况。
在流体力学模拟中,准确地计算壁面压强对于预测流体的运动和传热至关重要。
我们需要一种有效的方法来定义壁面压强。
三、流畅UDF的作用UDF是流畅软件中的一个重要功能,它允许用户自定义特定的边界条件、源项或其他模型参数。
通过使用UDF,用户可以更精确地控制模拟过程,实现更精确的模拟结果。
使用UDF来定义壁面压强将会大大提高模拟的准确性。
四、流畅UDF的定义方法在流畅软件中,定义壁面压强的UDF可以通过以下步骤来实现:1. 编写一个新的UDF,并选择“DEFINE_PROFILE”作为UDF的类型。
2. 定义壁面压强的函数表达式。
这可以根据具体模拟的物理过程来确定,通常是通过数学公式或实验数据拟合得到的。
3. 接下来,将编写好的UDF加载到流畅软件中,并将其应用到相应的壁面上。
4. 进行模拟并分析结果,验证定义的壁面压强是否准确。
五、流畅UDF定义壁面压强的案例分析接下来,我们将通过一个具体的案例来演示如何使用流畅UDF来定义壁面压强。
假设我们需要模拟一辆汽车的空气动力学性能,我们可以通过定义壁面压强的UDF来更准确地模拟汽车在风洞中的流体动力学行为。
为了定义汽车表面的压强分布,我们可以使用流畅UDF来描述汽车表面的形状,并根据流体流动的特性来定义壁面压强的函数表达式。
通过对汽车表面进行网格划分,并将定义好的UDF应用到表面上,我们可以得到汽车表面上的压强分布,并进一步分析汽车的空气动力学性能。
六、流畅UDF定义壁面压强的优势通过使用流畅UDF来定义壁面压强,我们可以获得以下几个优势:1. 精确度高:UDF允许用户根据具体的物理过程来定义壁面压强,从而获得更加精确的模拟结果。
(整理)Fluent流体UDF中文教程.word板
第四章DEFINE宏本章介绍了Fluent公司所提供的预定义宏,我们需要用这些预定义宏来定义UDF。
在这里这些宏就是指DEFINE宏。
本章由如下几节组成:∙ 4.1 概述∙ 4.2 通用解算器DEFINE宏∙ 4.3 模型指定DEFINE宏∙ 4.4 多相DEFINE宏∙ 4.5 离散相模型DEFINE宏4.1 概述DEFINE宏一般分为如下四类:∙通用解算器∙模型指定∙多相∙离散相模型(DPM)对于本章所列出的每一个DEFINE宏,本章都提供了使用该宏的源代码的例子。
很多例子广泛的使用了其它章节讨论的宏,如解算器读取(第五章)和utilities (Chapter 6)。
需要注意的是,并不是本章所有的例子都是可以在FLUENT中执行的完整的函数。
这些例子只是演示一下如何使用宏。
除了离散相模型DEFINE宏之外的所有宏的定义都包含在udf.h文件中。
离散相模型DEFINE宏的定义包含在dpm.h文件中。
为了方便大家,所有的定义都列于附录A中。
其实udf.h头文件已经包含了dpm.h文件,所以在你的UDF源代码中就不必包含dpm.h文件了。
注意:在你的源代码中,DEFINE宏的所有参变量必须在同一行,如果将DEFINE声明分为几行就会导致编译错误。
4.2 通用解算器DEFINE宏本节所介绍的DEFINE宏执行了FLUENT中模型相关的通用解算器函数。
表4.2.1提供了FLUENT中DEFINE宏,以及这些宏定义的功能和激活这些宏的面板的快速参考向导。
每一个DEFINE宏的定义都在udf.h头文件中,具体可以参考附录A。
∙DEFINE_ADJUST (4.2.1节)∙DEFINE_INIT (4.2.2节)∙DEFINE_ON_DEMAND (4.2.3节)∙DEFINE_RW_FILE (4.2.4节)表4.2.1:通用解算器DEFINE宏的快速参考向导功能DEFINE宏激活该宏的面板处理变量DEFINE_ADJUST User-Defined Function Hooks初始化变量DEFINE_INIT User-Defined Function Hooks异步执行DEFINE_ON_DEMAND Execute On Demand读写变量到……DEFINE_RW_FILE User-Defined Function Hooks Case和data文件∙ 4.2.1 DEFINE_ADJUST∙ 4.2.2 DEFINE_INIT∙ 4.2.3 DEFINE_ON_DEMAND∙ 4.2.4 DEFINE_RW_FILE4.2.1 DEFINE_ADJUST功能和使用方法的介绍DEFINE_ADJUST是一个用于调节和修改FLUENT变量的通用宏。
Fluent中的UDF详细中文教程(7)
Fluent中的UDF详细中文教程(7)第七章 UDF的编译与链接编写好UDF件(详见第三章)后,接下来则准备编译(或链接)它。
在7.2或7.3节中指导将用户编写好的UDF如何解释、编译成为共享目标库的UDF。
_ 第 7.1 节: 介绍_ 第 7.2 节: 解释 UDF_ 第 7.3 节: 编译 UDF7.1 介绍解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。
编译后的UDF由C语言系统的编译器编译成本地目标码。
这一过程须在FLUENT运行前完成。
在FLUENT运行时会执行存放于共享库里的目标码,这一过程称为“动态装载”。
另一方面,解释的UDF被编译成与体系结构无关的中间代码或伪码。
这一代码调用时是在内部模拟器或解释器上运行。
与体系结构无关的代码牺牲了程序性能,但其UDF可易于共享在不同的结构体系之间,即操作系统和FLUENT版本中。
如果执行速度是所关心的,UDF 文件可以不用修改直接在编译模式里运行。
为了区别这种不同,在FLUENT中解释UDF和编译UDF的控制面板其形式是不同的。
解释UDF的控制面板里有个“Compile按钮”,当点击“Compile按钮”时会实时编译源码。
编译UDF的控制面板里有个“Open 按钮”,当点击“Open按钮” 时会“打开”或连接目标代码库运行FLUENT(此时在运行FLUENT之前需要编译好目标码)。
当FLUENT程序运行中链接一个已编译好的UDF库时,和该共享库相关的东西都被存放到case文件中。
因此,只要读取case文件,这个库会自动地链接到FLUENT处理过程。
同样地,一个已经经过解释的UDF文件在运行时刻被编译,用户自定义的C函数的名称与内容将会被存放到用户的case文件中。
只要读取这个case文件,这些函数会被自动编译。
注:已编译的UDF所用到的目标代码库必须适用于当前所使用的计算机体系结构、操作系统以及FLUENT软件的可执行版本。
FLUENT_UDF实例应用ppt课件
;.
6
;.
7
;.
8
#include “udf.h” DEFINE_PRO) {
face_t f; real x; real a=0.01; real g[ND_ND]; begin_f_loop(f,t) { F_CENTROID(g,f,t); x=g[0]; F_PRO)=a*x; } end_f_loop(f,t) }
begin_f_loop(f,thread_out)
{
F_AREA(A,f,thread_out);
sum_A+=NV_MAG(A);
sum_T_A+=NV_MAG(A)*F_T(f,
thread_out);
}
;.
13
end_f_loop(f,thread_out)
;.
14
对并行编程的展望
大部分单核可以运行的UDF在并行下可以完美运行,不过在一些情况下就 不行了,前面的综合编程就是一个很好的例子(Reading and Writing Sums,Certain Loops over cells and faces等情况)。然而现在大部分 PC机或者工作站都是多核,如何写好并行下的UDF是深入模拟领域的关 键。
型)
;.
3
;.
4
3、举一反三 • DEFINE_PROFILE
• #include "udf.h“ DEFINE_PRO) {
real x[ND_ND]; real y; face_t f;
begin_f_loop(f,t) { F_CENTROID(x,f,t); y = x[1]; F_PRO) = 1.1e5 - y*y/(.0745*.0745)*0.1e5; } end_f_loop(f,t) }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fluid cell-thread (control-volume ensemble)
Nodes
Boundary face-thread (boundary-face ensemble)
Internal face-thread (internal-face ensemble) associated with cell-threads
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.
FLUENT流体模拟UDF讲解演示文稿
优选FLUENT流体模拟UDF讲解ppt
概要
FLUENT UDF简介 FLUENT 数据结构和宏 两个例子 UDF 支持
简介
什么是UDF?
– UDF 是用户自己用C语言写的一个函数,可以和FLUENT动态链接
• 标准C 函数
▪ 三角函数,指数,控制块,Do循环,文件读入/输出等
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) {
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)
= 20.*(1.y*y/(.0745*.0745));
} end_f_loop(f, thread) }
例子 – 抛物线分布的速度入口
在二维弯管入口施加抛物线分布的速度 x 方向的速度定义为
需要通过宏获得入口的中心点, 通过另外一个宏赋予速度条件
第1步 – 准备源代码
DEFINE_PROFILE 宏允许定 义x_velocity函elocity 将在 GUI中 出现
Domain Cell
Boundary (face thread or zone)
Fluid (cell thread or zone)
Domain
Cell Thread
face Thread
Cells
Faces
▪ 为了在thread (zone)中获得数据,我们需要提供正确的指针,并 使用循环宏获得thread中的每个成员(cell or face)
• 预定义宏
▪ 允许获得流场变量,材料属性,单元几何信息及其他
为什么使用 UDFs?
– 标准的界面不能编程模拟所有需求:
• 定制边界条件,源项,反应速率,材料属性等 • 定制物理模型 • 用户提供的模型方程 • 调整函数 • 执行和需求函数 • 初始化
可以使用UDF的位置
Segregated
PBCS
UDF中的循环宏
几个经常用到的循环宏为:
– 对域d中所有单元thread循环: thread_loop_c(ct,d) { }
– 对域d中所有面thread循环: thread_loop_f(ft,d) { }
– 对thread t中所有单元循环: begin_c_loop(c, t) {…} end_c_loop (c,t)
User-Defined Properties User-Defined BCs
Solve Turbulence Equation(s) Solve Other Transport Equations as required
Source terms
UDF 数据结构 (1)
▪ 在UDF中,体域和面域通过Thread数据类型获得 ▪ Thread 是 FLUENT 定义的数据类型
– thread 和 nv DEFINE_PROFILE 宏的参 数, 分别用来识别域和变量
– begin_f_loop宏通过 thread指针,对所有的面f 循环
F_CENTROID宏赋单元位置向 量给 x[]
F_PROFILE 宏在面 f上施加 速度分量
代码以文本文件保存
inlet_bc.c
– 对面thread中所有面循环 begin_f_loop(f, f_thread) {…} end_f_loop(f, f_thread)
d: a domain pointer ct, t: a cell thread pointer ft,f_thread: a face thread
pointer c: a cell thread variable f: a face thread variable
DBCS
Initialize
UserBegin Loop defined
ADJUST
Solver?
User Defined INITIALIZE
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,
Energy, Species
Source terms
Exit Loop Check Convergence
Solve Energy
Update Properties
Solve Species