FLUENT udf中文资料ch4

2019-04-17 15:28

第四章 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 DEFINE_INIT DEFINE_ON_DEMAND DEFINE_RW_FILE 激活该宏的面板 User-Defined Function Hooks User-Defined Function Hooks Execute On Demand 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_FILE

?

4.2.1 DEFINE_ADJUST 功能和使用方法的介绍

DEFINE_ADJUST是一个用于调节和修改FLUENT变量的通用宏。例如,你可以用DEFINE_ADJUST来修改流动变量(如:速度,压力)并计算积分。你可以用它来对某一标量在整个流场上积分,然后在该结果的基础上调节边界条件。在每一步迭代中都可以执行用DEFINE_ADJUST定义的宏,并在解输运方程之前的每一步迭代中调用它。参考图3.3.1 和3.3.2 for可以大致了解一下当DEFINE_ADJUST被调用时FLUENT解的过程

宏 DEFINE_ADJUST ( name, d) 参变量类型 Domain *d 返回的功能 void DEFINE_ADJUST有两个参变量:name和d。name是你所指定的UDF的名字。当你的UDF编译并连接时,你的FLUENT图形用户界面就会显示这个名字,此时你就可以选择它了。d是FLUENT解算器传给你的UDF的变量。 D是一个指向区域的指针,调节函数被应用于这个区域上。区域变量提供了存取网格中所有单元和表面的线程。对于多相流,由解算器传给函数的区域指针是混合层区域指针。DEFINE_ADJUST函数不返回任何值给解算器。 例子1

下面的UDF名字是adjust,它使用DEFINE_ADJUST对湍流耗散在整个区域上积分。然后这个值会打印在控制台窗口中。每一步迭代都会调用这个UDF。它可以作为解释程序或者编译后的UDF在FLUENT中执行。

/*******************************************************************/ /* 积分湍流耗散并将其打印到控制台窗口的UDF */ /********************************************************************/

#include \

DEFINE_ADJUST(my_adjust, d) {

Thread *t;

/* Integrate dissipation. */ real sum_diss=0.; cell_t c;

thread_loop_c (t,d) {

begin_c_loop (c,t)

sum_diss += C_D(c,t)* C_VOLUME(c,t); end_c_loop (c,t) }

printf(\}

例子: 2

下面UDF的名字是adjust_fcn,它用DEFINE_ADJUST指定了某一自定义标量是另一自定义标量的梯度的函数。该函数在每一次迭代中都会被调用。它可以作为编译后的UDF在FLUENT中执行。

/********************************************************************/ /* UDF for defining user-defined scalars and their gradients */

/********************************************************************/

#include \

DEFINE_ADJUST(adjust_fcn, d) {

Thread *t; cell_t c;

real K_EL = 1.0;

/* Do nothing if gradient isn't allocated yet. */ if (! Data_Valid_P()) return;

thread_loop_c (t, d) {

if (FLUID_THREAD_P(t)) {

begin_c_loop_all (c,t) { C_UDSI(c,t,1)

K_EL*NV_MAG2(C_UDSI_G(c,t,0))*C_VOLUME(c,t); } end_c_loop_all (c, t) } } }

Activating an Adjust UDF in FLUENT

+=

在为adjust UDF的源代码进行编译和连接之后,你可以在FLUENT中的User-Defined Function Hooks 面板激活这个函数。更详细的内容请参阅8.1.1节。 4.2.2 DEFINE_INIT 功能和使用方法的介绍

你可以用DEFINE_INIT宏来定义一组解的初始值。DEFINE_INIT 完成和修补一样的功能,只是它以另一种方式——UDF来完成。每一次初始化时DEFINE_INIT函数都会被执行一次,并在解算器完成默认的初始化之后立即被调用。因为它是在流场初始化之后被调用的,所以它最常用于设定流动变量的初值。参考图3.3.1和3.3.2关于FLUENT解过程的介绍可以看出什么时候调用DEFINE_INIT函数。

Macro: DEFINE_INIT ( name, d) Argument types: Domain *d Function returns: void DEFINE_INIT有两个参变量:name和d。name是你所指定的UDF的名字。当你的UDF编译并连接时,你的FLUENT图形用户界面就会显示这个名字,此时你就可以选择它了。d是FLUENT解算器传给你的UDF的变量。

d is a pointer to the domain over which the initialization function is to be applied. The domain argument provides access to all cell and face threads in the mesh. For multiphase flows, the domain pointer that is passed to the function by the solver is the mixture-level domain pointer. A DEFINE_INIT function does not return a value to the solver. 例子

下面的UDF名字是my_init_func,它在某一个解中初始化了流动变量。在解过程开始时它被执行了一次。它可以作为解释程序或者编译后的UDF在FLUENT中执行。

/*******************************************************************/ /* UDF for initializing flow field variables */

/***********************************************************************/

#include \

DEFINE_INIT(my_init_function, domain) {

cell_t c; Thread *t;

real xc[ND_ND];

/* loop over all cell threads in the domain */ thread_loop_c (t,domain) {

/* loop over all cells */ begin_c_loop_all (c,t) {

C_CENTROID(xc,c,t);

if (sqrt(ND_SUM(pow(xc[0] - 0.5,2.), pow(xc[1] - 0.5,2.),

pow(xc[2] - 0.5,2.))) < 0.25) C_T(c,t) = 400.; else

C_T(c,t) = 300.; }

end_c_loop_all (c,t) } }


FLUENT udf中文资料ch4.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:反洗钱2017多选题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: