udf学习(2)

2019-08-30 20:44

(6)循环宏

多数的UDF任务需要在一个线的所有单元和面上重复执行。比如,定义一个自定义轮廓函数会对一个面thread的所有单元和面进行循环。为了方便用户,Fluent向用户提供了一些循环宏工具(looping macro utilities)来执行对单元、面、节点和线的重复操作。 如果要实现扫描全场的网格就需要使用循环宏。Fluent的循环宏如下。 thread_loop_c:在一个domain中循环所有的cell线程。 thread_loop_f:在一个domain中循环所有的face线程。 beginend_c_loop:在一个cell线程中循环所有的cell。 beginend_f_loop:在一个face线程中循环所有的face。 c_face_loop:在一个cell中循环所有的face。 c_node_loop:在一个cell中循环所有的node。

循环宏大体可以分为两种类型:一种以begin开始,end结束,用来扫描线上的所有网格和面;一种用来扫描所有的线。大体结构如下: cell_t c;

face_t f; Thread*t; Domain*d;

begin_c_loop(c,t) {

}

end_c_loop(c,t) /*循环遍历线上的所有网格*/ begin_f_loop(f,t) { }

end_f_loop(f,t) /*循环遍历线上的所有面*/ thread_loop_c(t,d)

{

} /*遍历网格线*/ thread_loop_f(t,d) {

} /*遍历面上的线*/

UDF的C语言基础

1、FLUENT的C数据类型

FLUENT的UDF解释程序支持下面的C数据类型:

Int整型 Long长整型 Real实型 Float浮点型 Double双精度型 Char字符型

注意:UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。因为解释函数自动作如此分配,所以使用在UDF中声明所有的float和double数据变量时使用real数据类型是很好的编程习惯。

2、常数

常数是表达式中所使用的绝对值,在C程序中用语句#dedine来定义。最简单的常数是十进制整数。包含小数点或者字母e的十进制数被看成浮点常数。按惯例,常数的声明一般都使用大写字母。如:#define YMIN0.0 #define WALL_ID 5 3、变量

变量或者对象保存在可以存储数值的内存中。每一个变量都有类型、名字和值。变量在使用之前必须在C程序中声明。

变量声明结构如下:数据类型+变量名。变量声明可以给定初值。局部变量在函数内部声明。全局变量在单一函数的外部定义,一般在预处理程序之后的文件开始处声明。

如果全局变量在某一源代码中声明,但是另一个源代码的某一文件需要用到它,那么必须在另一个文件中声明它是外部变量,声明时只要在最前面加上extern即可。如果有几个文件涉及到该变量,最方便的处理方法就是在头文件中加上extern的定义,然后在所有的.c文件中引用该头文件即可。外部变量只用于complied UDF。

静态变量。static声明对于全局变量和局部变量的影响是不一样的。静态局部变量在函数调用返回之后,该变量不会被破坏。静态全局变量在定义该变量的.c源文件之外对任何函数保持不可见。静态声明也可以用于函数,使该函数只对定义它的.c文件保持可见。

4、自定义数据类型

C还允许用结构和typedef创建自定义数据类型。如下: typedef struct list { int a; real b; int c; }

mylist; /*mylist为类型结构列表*/ mylist x,y,z; /*x,y,z为类型结构列表*/ 5、强制转换

强制转换数据类型,如: int x=1;

real y3.14159;

int z=x+((int)y); /*z=4*/ 6、函数

UDF的编写

步骤

1、分析实际问题的模型,得到UDF对应的数学模型。 2、将数学模型使用C语言源代码表达出来 3、编译调试UDF源程序 4、在Fluent中执行UDF

UDF基本格式

编写Interpreted型和Compiled型用户自定义函数的过程和书写格式是一样的。其主要区别在于与C语言的结合程度:Compiled型能完全使用C语言的语法,而Interpreted型只能使用其中一小部分。基本格式归为三部分

1、定义恒定常数和包含库文件,分别由#DEFINE和#INCLUDE陈述 2、使用宏DEFINE定义UDF函数

3、函数体部分

包含的库有udf.h、sg.h、mem.h、prop.h、dpm.h等,其中udf.h是必不可少的,书写格式为#include udf.h;所有数值都应采用SI单位制;函数体部分字母采用小写,Interpreted型只能采用Fluent支持的C语言语法和函数。

Fluent提供的宏都以DEFINE_开始,对它们的解释包含在udf.h文件中,所以必须要包含库udf.h。

UDF编译和连接之后,函数名就会出现在Fluent相应的下拉列表内。例如DEFINE_PROFILE(inlet_x_velocity,thread,position),编译连接之后,就能相应的边界条件面板内找到一个名为inlet_x_velocity的函数,选定之后就可以使用。

UDF实例

在圆管中,入口水流速通过以下公式描述:


udf学习(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:油气在线监测系统项目建议书

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

马上注册会员

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