UDF的应用实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Figure 10.1.4: Velocity Magnitude Contours for a Parabolic Inlet x Velocity
第 10 章 应用举例
Figure 10.1.5: Velocity Vectors for a Parabolic Inlet x Velocity
*/
/***********************************************************************/
#include "udf.h"
Hale Waihona Puke Baidu
DEFINE_PROFILE(inlet_x_velocity, thread, position)
{
real x[ND_ND];
速 度 分 布 UDF ( unsteady.c ) 的 源 代 码 显 示 如 下 。
/**********************************************************************/
/*
unsteady.c
*/
/* UDF for specifying a transient velocity profile boundary condition
第 10 章 应用举例
第 10 章 应用举例
本章包含了 FLUENT 中 UDFs 的应用例子。 10.1 边界条件 10.2 源项 10.3 物理属性 10.4 反应速率(Reacting Rates) 10.5 用户定义标量(User_Defined Scalars) 10.1 边界条件 这部分包含了边界条件 UDFs 的两个应用。两个在 FLUENT 中都是作为解释式 UDFs 被执行的。 10.1.1 涡轮叶片的抛物线速度入口分布 要考虑的涡轮叶片显示在 Figure 10.1.1 中。非结构化网格用于模拟叶片周围的流 场。区域从底部周期性边界延伸到顶部周期性边界,左边是速度入口,右边是压 力出口。
Figure 10.1.2: Velocity Magnitude Contours for a Constant Inlet x Velocity
Figure 10.1.3: Velocity Vectors for a Constant Inlet x Velocity
现在入口 x 速度将用以下型线描述:
增加 Surface Monitors 的指标到 1。这将使你定义 monitor-1(如果需要,你可重 命名,在 Name 下的文本输入框内)的参数。选择 Plot,所以所选的数量将作为 计算的收益被画出来。选择 Print 在控制台窗口来看所选数的变化值。选择 Write, 因而信息将被写入文件,它将被给一个名字为 monitor-1.out。(如果你改变了 monitor 的名字,这个名字将用作输出文件的前缀)。 在 Every 下面,你可选择 Iteration, Time Step, or Flow Time。为了监视每个时间 步的结果,你应选择 Time Step 选项。通过点击 Define...你可在 Define Surface Monitor 面板中指定被监视的数量。
在 Interpreted UDFs 面板中,在 Source File Name 区域命名你的函数。如果必要,在 CPP Command Name 区域输入你的 C 预处理程序类型和在 Stack Size 下输入堆栈大小。打开 Display Assembly Listing 在你的控制台窗口中能看到汇编列表,当函数编译时。点击 Compile 然后 Close 面板。 为了选择这个用户定义函数作为所选区域的速度边界条件,打开 Velocity Inlet 面板。
第 10 章 应用举例
在这个例子中,在 Report Of 下的下拉列表中选择 Velocity... and Velocity Magnitude。报告的区域是 pressure-outlet-5,,在 Surfaces 列表中选择它。 Area-Weighted Average 在 Report Type 的下拉列表中选择,Flow Time 在 X Axis 的下拉列表中选择。 一旦完成了你要求的迭代次数,监视器应出现在所选绘图窗口中。作为选择,你 可通过打开 File XY Plot 面板读入文件。 Plot File...
第 10 章 应用举例
begin_f_loop(f, thread) { real t = RP_Get_Real("flow-time"); F_PROFILE(f, thread, position) = 20. + 5.0*sin(10.*t); }
end_f_loop(f, thread) } 函数,被命名为 unsteady_velocity,使用 DEFINE_PROFILE macro 定义。The utility RP_Get_Real("flow-time") 用 于 访 问 real 流 动 时 间 , 它 被 分 配 给 变 量 t 。 (RP_Get_Real 的详细内容见 Section 6.9)。 在你编译这个 UDF 之前,你必须在 Solver 面板中指定为非稳态流动计算。 Define Models Solver... 接下来你将打开 Interpreted UDFs 面板。在 Source File Name 下面的文本框内 输入函数的名字,如果必要,还有你的 C 预处理程序的名字。打开 Display Assembly Listing。点击 Compile 然后关闭面板。 Define User-Defined Functions Interpreted...
你可通过在 Files 下面的文本框中输入它的名字来读取输出文件和选择这个文件 并点击 Add....,然后点击 Plot,你可获得 Figure10.1.6 的图形显示。
第 10 章 应用举例
Figure 10.1.6: Average Velocity Magnitude at the Pressure Outlet
*/
/********************************************************************
**/
#include "udf.h"
DEFINE_PROFILE(unsteady_velocity, thread, position)
{ face_t f;
时间步参数在 Iterate 面板中设置。 Solve Iterate...
在这个例子中,使用了 0.0314 的 Time Step Size,因此在入口速度一个完整的震
第 10 章 应用举例
荡周期内将完成 20 个时间步。在每个时间步内执行的迭代次数被限制为 20。在 求解的早期阶段这个迭代次数不足以获得收敛的流场,但是在通过几个时间步之 后,很可能导致收敛的时间步。UDF Profile Update Interval 被设置为 1 因此每 次迭代速度都被更新。在完成了 60 个时间步之后(或 3 个周期),你可以检查跨 越压力出口由振荡入口条件引起速度数量级。 为了在计算阶段收集这个信息,在开始迭代之前打开 Surface Monitors 面板。 Solve Monitors Surface...
end_f_loop(f, thread) } 函数,被命名为 inlet_x_velocity,使用了 DEFINE_PROFILE 定义并且有两个自变量:thread 和 position。Thread 是一个指向面的 thread 的指针,position 是一个整数,它是每个循环 (loop)内为变量设置的数值标签。
第 10 章 应用举例
函数通过声名变量 f 作为 face_t 的数据类型。一维数组 x 和变量 y 被定义为 real 数据类 型。循环宏用于循环区域内每个面来创建型线,或数据数组。每个循环内,F_CENTROIDS 为带指标 f 的面输出面质心(数组 x)的值,指标 f 在被 thread 指向的线(thread)上。 存储在 x[1]中的 y 坐标用于为变量 y 赋值,然后用于计算 x 速度。这个值接着被分配到 F_PROFILE,使用整数 position(在你从 Velocity Inlet 面板中选择的 UDF 作为 x 速度的 边界条件的基础上通过求解器传递给它)来设置内存中 x 速度面值。 为了在 FLUENT 中使用这个解释式 UDF,你必须首先编译它。 Define User-Defined Functions Interpreted...
这个图精细地显示了速度以期望的振幅值 5m/s 围绕平衡值 20m/s 上下振荡。 10.2 源项 这部分包含了源项 UDF 的应用。在 FLUENT 中它是作为解释式 UDF 被执行的。 10.2.1 给管道流动添加动量源项(Adding a Momentum Source to a Duct Flow) 当使用 UDF 模拟源项时,理解函数调用的内容是很重要的。当你增加了一个源 项,它在单元上执行全局的循环时,FLUENT 将调用你的函数。你的函数应只计 算源项并返回它到求解器。
Figure 10.1.1: The Grid for the Turbine Vane Example
常数 x 速度应用于入口的流场与抛物线 x 速度应用于入口的流场作了比较。当采用分段
第 10 章 应用举例
线性分布的型线的应用是有效的对边界型线选择,多项式的详细说明只能通过用户定 义函数来完成。 常数速度应用于流场入口的结果显示在 Figure 10.1.2 和 Figure 10.1.3 中。当流动移动到 涡轮叶片周围时初始常速度场被扭曲。
第 10 章 应用举例
在 X-Velocity 下拉列表下,选择 udf inlet_x_velocity,这个名字在上面已经命名给函数。 这个函数将被使用,而不是出现在 X-Velocity 区域的 0 值(在这个例子中)。点 OK 接受 这个新边界条件并关闭面板。 在求解运行到收敛之后,获得了一个修正的速度场如 Figure 10.1.4 and 10.1.5 所示。速度 场在入口中心显示了最大值,到边缘上降为 0。
/***********************************************************************/
/* vprofile.c
*/
/* UDF for specifying steady-state velocity profile boundary condition
/* this will hold the position vector */
real y;
face_t f;
begin_f_loop(f, thread) { F_CENTROID(x,f,thread); y = x[1]; F_PROFILE(f, thread, position) = 20. - y*y/(.0745*.0745)*20.; }
由 UDF 定 义 的 正 弦 速 度 边 界 条 件 现 在 可 选 为 入 口 区 域 的 X-Velocity 。 在
第 10 章 应用举例
X-Velocity 面 板 中 , 在 X-Velocity 区 域 右 边 的 下 拉 列 表 中 选 择 udf unsteady_velocity,并点击 OK。
10.1.2 管内流动的瞬态速度入口分布 这个例子中,瞬时的周期性的速度边界条件使用 UDF 应用于管子的入口。速度形式为:
(10.1.1) 管子长 1m,半径为 0.2m。假设充满密度为 1kg/m3 和粘度为 2 ×10−5 kg/m-s 的空气。空
气速度关于平衡值 v0 = 20m / s 的波动振幅为 5m/s,频率为 10rad/s。
第 10 章 应用举例
这里变量 y 在人口中心是 0.0,在顶部和底部其值分别延伸到 ± 0.0745 。这样 x 速度在
入口中心为 20m/sec,在边缘为 0。 UDF 用于传入入口上的这个抛物线分布。C 源代码(vprofile.c)显示如下。函数使用 了 Section 5.3 中 描 述 的 Fluent 提 供 的 求 解 器 函 数 。
第 10 章 应用举例
Figure 10.1.5: Velocity Vectors for a Parabolic Inlet x Velocity
*/
/***********************************************************************/
#include "udf.h"
Hale Waihona Puke Baidu
DEFINE_PROFILE(inlet_x_velocity, thread, position)
{
real x[ND_ND];
速 度 分 布 UDF ( unsteady.c ) 的 源 代 码 显 示 如 下 。
/**********************************************************************/
/*
unsteady.c
*/
/* UDF for specifying a transient velocity profile boundary condition
第 10 章 应用举例
第 10 章 应用举例
本章包含了 FLUENT 中 UDFs 的应用例子。 10.1 边界条件 10.2 源项 10.3 物理属性 10.4 反应速率(Reacting Rates) 10.5 用户定义标量(User_Defined Scalars) 10.1 边界条件 这部分包含了边界条件 UDFs 的两个应用。两个在 FLUENT 中都是作为解释式 UDFs 被执行的。 10.1.1 涡轮叶片的抛物线速度入口分布 要考虑的涡轮叶片显示在 Figure 10.1.1 中。非结构化网格用于模拟叶片周围的流 场。区域从底部周期性边界延伸到顶部周期性边界,左边是速度入口,右边是压 力出口。
Figure 10.1.2: Velocity Magnitude Contours for a Constant Inlet x Velocity
Figure 10.1.3: Velocity Vectors for a Constant Inlet x Velocity
现在入口 x 速度将用以下型线描述:
增加 Surface Monitors 的指标到 1。这将使你定义 monitor-1(如果需要,你可重 命名,在 Name 下的文本输入框内)的参数。选择 Plot,所以所选的数量将作为 计算的收益被画出来。选择 Print 在控制台窗口来看所选数的变化值。选择 Write, 因而信息将被写入文件,它将被给一个名字为 monitor-1.out。(如果你改变了 monitor 的名字,这个名字将用作输出文件的前缀)。 在 Every 下面,你可选择 Iteration, Time Step, or Flow Time。为了监视每个时间 步的结果,你应选择 Time Step 选项。通过点击 Define...你可在 Define Surface Monitor 面板中指定被监视的数量。
在 Interpreted UDFs 面板中,在 Source File Name 区域命名你的函数。如果必要,在 CPP Command Name 区域输入你的 C 预处理程序类型和在 Stack Size 下输入堆栈大小。打开 Display Assembly Listing 在你的控制台窗口中能看到汇编列表,当函数编译时。点击 Compile 然后 Close 面板。 为了选择这个用户定义函数作为所选区域的速度边界条件,打开 Velocity Inlet 面板。
第 10 章 应用举例
在这个例子中,在 Report Of 下的下拉列表中选择 Velocity... and Velocity Magnitude。报告的区域是 pressure-outlet-5,,在 Surfaces 列表中选择它。 Area-Weighted Average 在 Report Type 的下拉列表中选择,Flow Time 在 X Axis 的下拉列表中选择。 一旦完成了你要求的迭代次数,监视器应出现在所选绘图窗口中。作为选择,你 可通过打开 File XY Plot 面板读入文件。 Plot File...
第 10 章 应用举例
begin_f_loop(f, thread) { real t = RP_Get_Real("flow-time"); F_PROFILE(f, thread, position) = 20. + 5.0*sin(10.*t); }
end_f_loop(f, thread) } 函数,被命名为 unsteady_velocity,使用 DEFINE_PROFILE macro 定义。The utility RP_Get_Real("flow-time") 用 于 访 问 real 流 动 时 间 , 它 被 分 配 给 变 量 t 。 (RP_Get_Real 的详细内容见 Section 6.9)。 在你编译这个 UDF 之前,你必须在 Solver 面板中指定为非稳态流动计算。 Define Models Solver... 接下来你将打开 Interpreted UDFs 面板。在 Source File Name 下面的文本框内 输入函数的名字,如果必要,还有你的 C 预处理程序的名字。打开 Display Assembly Listing。点击 Compile 然后关闭面板。 Define User-Defined Functions Interpreted...
你可通过在 Files 下面的文本框中输入它的名字来读取输出文件和选择这个文件 并点击 Add....,然后点击 Plot,你可获得 Figure10.1.6 的图形显示。
第 10 章 应用举例
Figure 10.1.6: Average Velocity Magnitude at the Pressure Outlet
*/
/********************************************************************
**/
#include "udf.h"
DEFINE_PROFILE(unsteady_velocity, thread, position)
{ face_t f;
时间步参数在 Iterate 面板中设置。 Solve Iterate...
在这个例子中,使用了 0.0314 的 Time Step Size,因此在入口速度一个完整的震
第 10 章 应用举例
荡周期内将完成 20 个时间步。在每个时间步内执行的迭代次数被限制为 20。在 求解的早期阶段这个迭代次数不足以获得收敛的流场,但是在通过几个时间步之 后,很可能导致收敛的时间步。UDF Profile Update Interval 被设置为 1 因此每 次迭代速度都被更新。在完成了 60 个时间步之后(或 3 个周期),你可以检查跨 越压力出口由振荡入口条件引起速度数量级。 为了在计算阶段收集这个信息,在开始迭代之前打开 Surface Monitors 面板。 Solve Monitors Surface...
end_f_loop(f, thread) } 函数,被命名为 inlet_x_velocity,使用了 DEFINE_PROFILE 定义并且有两个自变量:thread 和 position。Thread 是一个指向面的 thread 的指针,position 是一个整数,它是每个循环 (loop)内为变量设置的数值标签。
第 10 章 应用举例
函数通过声名变量 f 作为 face_t 的数据类型。一维数组 x 和变量 y 被定义为 real 数据类 型。循环宏用于循环区域内每个面来创建型线,或数据数组。每个循环内,F_CENTROIDS 为带指标 f 的面输出面质心(数组 x)的值,指标 f 在被 thread 指向的线(thread)上。 存储在 x[1]中的 y 坐标用于为变量 y 赋值,然后用于计算 x 速度。这个值接着被分配到 F_PROFILE,使用整数 position(在你从 Velocity Inlet 面板中选择的 UDF 作为 x 速度的 边界条件的基础上通过求解器传递给它)来设置内存中 x 速度面值。 为了在 FLUENT 中使用这个解释式 UDF,你必须首先编译它。 Define User-Defined Functions Interpreted...
这个图精细地显示了速度以期望的振幅值 5m/s 围绕平衡值 20m/s 上下振荡。 10.2 源项 这部分包含了源项 UDF 的应用。在 FLUENT 中它是作为解释式 UDF 被执行的。 10.2.1 给管道流动添加动量源项(Adding a Momentum Source to a Duct Flow) 当使用 UDF 模拟源项时,理解函数调用的内容是很重要的。当你增加了一个源 项,它在单元上执行全局的循环时,FLUENT 将调用你的函数。你的函数应只计 算源项并返回它到求解器。
Figure 10.1.1: The Grid for the Turbine Vane Example
常数 x 速度应用于入口的流场与抛物线 x 速度应用于入口的流场作了比较。当采用分段
第 10 章 应用举例
线性分布的型线的应用是有效的对边界型线选择,多项式的详细说明只能通过用户定 义函数来完成。 常数速度应用于流场入口的结果显示在 Figure 10.1.2 和 Figure 10.1.3 中。当流动移动到 涡轮叶片周围时初始常速度场被扭曲。
第 10 章 应用举例
在 X-Velocity 下拉列表下,选择 udf inlet_x_velocity,这个名字在上面已经命名给函数。 这个函数将被使用,而不是出现在 X-Velocity 区域的 0 值(在这个例子中)。点 OK 接受 这个新边界条件并关闭面板。 在求解运行到收敛之后,获得了一个修正的速度场如 Figure 10.1.4 and 10.1.5 所示。速度 场在入口中心显示了最大值,到边缘上降为 0。
/***********************************************************************/
/* vprofile.c
*/
/* UDF for specifying steady-state velocity profile boundary condition
/* this will hold the position vector */
real y;
face_t f;
begin_f_loop(f, thread) { F_CENTROID(x,f,thread); y = x[1]; F_PROFILE(f, thread, position) = 20. - y*y/(.0745*.0745)*20.; }
由 UDF 定 义 的 正 弦 速 度 边 界 条 件 现 在 可 选 为 入 口 区 域 的 X-Velocity 。 在
第 10 章 应用举例
X-Velocity 面 板 中 , 在 X-Velocity 区 域 右 边 的 下 拉 列 表 中 选 择 udf unsteady_velocity,并点击 OK。
10.1.2 管内流动的瞬态速度入口分布 这个例子中,瞬时的周期性的速度边界条件使用 UDF 应用于管子的入口。速度形式为:
(10.1.1) 管子长 1m,半径为 0.2m。假设充满密度为 1kg/m3 和粘度为 2 ×10−5 kg/m-s 的空气。空
气速度关于平衡值 v0 = 20m / s 的波动振幅为 5m/s,频率为 10rad/s。
第 10 章 应用举例
这里变量 y 在人口中心是 0.0,在顶部和底部其值分别延伸到 ± 0.0745 。这样 x 速度在
入口中心为 20m/sec,在边缘为 0。 UDF 用于传入入口上的这个抛物线分布。C 源代码(vprofile.c)显示如下。函数使用 了 Section 5.3 中 描 述 的 Fluent 提 供 的 求 解 器 函 数 。