ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:27.59KB ,
资源ID:18714086      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18714086.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Fluent UDF 中文教程2Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Fluent UDF 中文教程2Word文件下载.docx

1、UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。因为解释函数自动作如此分配,所以使用在UDF中声明所有的float和double数据变量时使用real数据类型是很好的编程习惯。 常数是表达式中所使用的绝对值,在C程序中用语句#define来定义。最简单的常数是十进制整数(如:0,1,2)包含小数点或者包含字母e的十进制数被看成浮点常数。按惯例,常数的声明一般都使用大写字母。例如,你可以设定区域的ID或者定义YMIN和YMAX如下:#define WALL_ID 5#define YMIN 0.0#define YMAX 0.4064变量或

2、者对象保存在可以存储数值的内存中。每一个变量都有类型、名字和值。变量在使用之前必须在C程序中声明。这样,计算机才会提前知道应该如何分配给相应变量的存储类型。2.5.1声明变量变量声明的结构如下:首先是数据类型,然后是具有相应类型的一个或多个变量的名字。变量声明时可以给定初值,最后面用分号结尾。变量名的头字母必须是C所允许的合法字符,变量名字中可以有字母,数字和下划线。需要注意的是,在C程序中,字母是区分大小写的。下面是变量声明的例子:int n; /*声明变量n为整型*/int i1, i2; /*声明变量i1和i2为整型*/float tmax = 0.; /* tmax为浮点型实数,初值为

3、0 */real average_temp = 0.0; /* average_temp为实数,赋初值为0.1*/2.5.2局部变量局部变量只用于单一的函数中。当函数调用时,就被创建了,函数返回之后,这个变量就不存在了,局部变量在函数内部(大括号内)声明。在下面的例子中,mu_lam和temp是局部变量。DEFINE_PROPERTY(cell_viscosity, cell, thread) real mu_lam; real temp = C_T(cell, thread); if (temp 288.) mu_lam = 5.5e-3; else if (temp 286.) mu_la

4、m = 143.2135 - 0.49725 * temp; else mu_lam = 1.; return mu_lam;2.5.3全局变量全局变量在你的UDF源文件中是对所有的函数都起作用的。(调用一个UDF源文件可能会包括一系列的连接函数。)它们是在单一函数的外部定义的。全局变量一般是在预处理程序之后的文件开始处声明。2.5.4外部变量如果全局变量在某一源代码文件中声明,但是另一个源代码的某一文件需要用到它,那么你必须在另一个文件中声明它是外部变量。外部变量的声明很简单,你只需要在变量声明的最前面加上extern即可。如果有几个文件涉及到该变量,最方便的处理方法就是在头文件(.h)中加

5、上extern的定义,然后在所有的.c文件中引用该头文件即可。只有一个.c文件应该包括没有extern关键字的变量声明,如下所示。extern只用于编译过的UDF。例子:/* filea.h */*包含外部定义的头文件*/extern real volume;/* filea.c */*调用头文件filea.h中声明的volumn的C函数*/#include udf.hfilea.hreal volume;DEFINE_ADJUST(compute_volume, domain) /*计算某些区域volumn的代码*/ volume = ./* fileb.c */*调用头文件filea.h中

6、声明的volumn的另一个C函数*/DEFINE_SOURCE(heat_source,c,t,ds,eqn) /* 用总数来计算每个单位体积的源项的代码*/ /*fliea.c的compute_volum计算出的volume*/ real total_source = .; real source; source = total_source/volume; return source;2.5.5静态变量static声明对于全局变量和局部变量的影响是不一样的。静态局部变量在函数调用返回之后,该变量不会被破坏。静态全局变量则在定义该变量的.c源文件之外对任何函数保持不可见。静态声明也可以用于函

7、数,使该函数只对定义它的.c源文件保持可见。下面是静态全局变量声明的例子。static real abs_coeff = 1.0; /* 吸收系数*/real source;DEFINE_SOURCE(energy_source, c, t, dS, eqn) int P1 = .; dSeqn = -16.* abs_coeff * SIGMA_SBC * pow(C_T(c,t),3.); source =-abs_coeff *(4.* SIGMA_SBC * pow(C_T(c,t),4.) - C_UDSI(c,t,P1);DEFINE_SOURCE(p1_source, c, t,

8、 dS, eqn) int P1 = .; dSeqn = -abs_coeff; source = abs_coeff *(4.* SIGMA_SBC * pow(C_T(c,t),4.) - C_UDSI(c,t,P1);C还允许你用结构和typedef创建自定义数据类型。下面是一个结构列表的定义。typedef只用于编译过的UDF。typedef struct list int a; real b; int c;mylist; /* mylist为类型结构列表*/mylist x,y,z; /* x,y,z为类型结构列表*/你可以通过强制转换将某一数据类型转换为另一种。强制由类型来表示,

9、其中的类型包括int,float等等,如下例所示:int x = 1;real y = 3.14159;int z = x+(int) y); /* z = 4 */函数是用完成一定任务的一系列语句。在定义该函数的同一源代码中,这些任务可能对其它的函数有用,也可能会被用于完成源文件以外的函数中。每个函数都包括一个函数名以及函数名之后的零行或多行语句,其中有大括号括起来的函数主体可以完成所需要的任务。函数可以返回特定类型的数值。C函数通过数值来传递数据。函数有很多数据类型,如real,void等,其相应的返回值就是该数据类型,如果函数的类型是void就没有任何返回值。要确定定义UDF时所使用的D

10、EFINE宏的数据类型你可以参阅udf.h文件中关于宏的#define声明一节,也可以参阅附录A的列表。! C函数不能改变它们的声明,但是可以改变这些声明所指向的变量。2.9 数组数组的定义格式为:名字数组元素个数,C数组的下标是从零开始的。变量的数组可以具有不同的数据类型。例子int a10, b1010;real radii5;a0 = 1; /* 变量a为一个一维数组*/radii4 = 3.14159265; /*变量radii为一个一维数组*/b1010 = 4; /*变量b为一个二维数组*/指针变量的数值是其它变量存储于内存中的地址值。C程序中指针变量的声明必须以*开头。指针广泛用

11、于提取结构中存储的数据,以及在多个函数中通过数据的地址传送数据。例如:int *ip;本语句声明了一个指向整型变量的指针变量ip。此时你可以为指针变量分配一个地址值了。现在假定你要将某一地址分配给指针ip,你可以用取地址符&来实现。ip = &a;就分配给指针ip变量a的地址值了。要得到指针变量所指向的单元的值,你可以使用:*ip你还可以为指针ip所指向的变量赋值,例如:*ip = 4;将4赋给指针ip所指向的变量。下面是使用指针的例子:int a = 1; /* &a返回了变量a的地址值*/printf(content of address pointed to by ip = %dn, *

12、ip); /* a = 4 */now a = %dn, a);在上面的语句中,整型变量赋初值为1。然后为整型变量声明一个指针。然后整型变量a的地址值分配给指针ip。然后用*ip来输出指针ip所指向的值(该值为1)。然后用*ip间接的给变量a赋值为4。然后输出a的新值。指针还可以指向数组的起始地址,在C中指针和数组具有紧密的联系。2.10.1 作为函数自变量的指针C函数可以通过指针进入和修改它们的自变量。在FLUENT中,线程和域指针是UDF常用的自变量。当你在UDF中指定这些自变量时, FLUENT解算器会自动将指针所指向的数据传送给UDF,从而使你的函数可以存取解算器的数据(你不必声明作为

13、自变量从解算器传送给UDF的指针)。例如,某一传送给指定(由DEFINE_PROFILE宏来定义的)自定义轮廓UDF的自变量是一个指向应用于边界条件的线程的指针。DEFINE_PROFILE函数会存取线程指针所指向的数据。2.11 控制语句你可以使用控制语句,如if, if-else和循环来控制C程序中语句的执行顺序。控制语句决定了程序序列中下一步该执行的内容 2.11.1 if语句if语句是条件控制语句的一种。格式为: if (逻辑表达式) 语句其中逻辑表达式是判断条件,语句是条件满足时所要执行的代码行。if (q != 1) a = 0; b = 1;2.11.2 if-else语句if-

14、else语句是另一种条件控制语句。if (逻辑表达式)else如果逻辑表达式条件满足,则执行第一个语句,否则执行下面的语句。if (x 0.) y = x/50.; x = -x; y = x/25.; 下面是等价的FORTRAN代码,大家可以比较一下: IF (X.LT.0.) THEN Y = X/50. ELSE X = -X Y = X/25. ENDIF2.11.3 for循环for循环是C程序最为基本的循环控制语句。它和FORTRAN中的do循环很类似。for (起点;终点;增量)其中起点是在循环开始时执行的表达式;终点是判断循环是否结束的逻辑表达式;增量是循环迭代一次之后执行的表

15、达式(通常是增量计数器)。/* 输出整数1-10及它们的平方*/int i, j, n = 10;for (i = 1 ; i = n ; i+) j = i*i; printf(%d %dn,i,j);下面是等价的FORTRAN代码,大家可以做一比较: INTEGER I,J N = 10 DO I = 1,10 J = I*I WRITE (*,*) I,J ENDDO2.12常用的C运算符运算符是内部的C函数,当它们对具体数值运算时会得到一个结果。常用的C运算符是算术运算符和逻辑运算符。2.12.1 算术运算符下面是一些常用的算术运算符。= 赋值+ 加- 减* 乘/ 除% 取模+ 增量-

16、 减量乘、除和取模运算的优先级要高于加、减运算。除法只取结果的整数部分。取模只取结果的余数部分。+运算符是增量操作的速记符。2.12.2 逻辑运算符下面是一些逻辑运算符。 大于= 大于或等于= 等于= 不等于2.13 C库函数当你书写UDF代码时,你可以使用C编译器中包括的标准数学库和I/O函数库。下面各节介绍了标准C库函数。标准C库函数可以在各种头文件中找到(如:global.h)。这些文件都被包含在udf.h文件中。2.13.1 三角函数下面的三角函数都是计算变量x(只有一个还计算y)的三角函数值。函数和变量都是双精度实数变量。具体的意义大家应该都很清楚,就不具体介绍了。double ac

17、os (double x);返回x的反余弦函数double asin (double x);返回x的反正弦函数double atan (double x);返回x的反正切函数double atan2 (double x, double y);返回x/y的反正切函数double cos (double x);返回x的余弦函数double sin (double x);返回x的正弦函数double tan (double x);返回x的正切函数double cosh (double x);返回x的双曲余弦函数double sinh (double x);返回x的双曲正弦函数double tanh

18、(double x);返回x的双曲正切函数2.13.2 各种数学函数下面列表中,左边是C函数,右边是对应数学函数:double sqrt (double x);double pow(double x, double y);double exp (double x);double log (double x);double log10 (double x);double fabs (double x);double ceil (double x);不小于x的最小整数double floor (double x);不大于x的最大整数2.13.3 标准I/O函数C中有大量的标准输入输出(I/O)函数

19、。在很多情况下,这些函数在指定的文件中工作。下面是一些例子。FILE *fopen(char *filename, char *type);打开一个文件int fclose(FILE *fd);关闭一个文件int fprintf(FILE *fd, char *format, .);格式化输出到一个文件int printf(char *format, .);输出到屏幕int fscanf(FILE *fd, char *format, .);格式化读入一个文件函数fopen和fclose分别打开和关闭一个文件。函数fprintf以指定的格式写入文件,函数fscanf以相同的方式从某一文件中将数

20、据读入。函数printf是一般的输出函数。fd是一个文件指针,它所指向的是包含所要打开文件的信息的C结构。除了fopen之外所有的函数都声明为整数,这是因为该函数所返回的整数会告诉我们这个文件操作命令是否成功执行。在下面的例子中,需要打开的数据文件的名字用双引号括起来。fopen中的选项r表明该文件是以可读形式打开的。fscan函数从fd所指向的文件中读入两个浮点数并将它们存储为f1和f2。关于C的标准输入输出函数其它更多的信息,你可以查阅相关手册(如:2)。 FILE *fd; fd = fopen(data.txt,r); /* opens a file named data.txt */

21、 fscanf(fd, %f ,%f, &f1, &f2); fclose(fd);2.14 用#define实现宏置换UDF解释程序支持宏置换的C预处理程序命令。当你使用#define宏置换命令,C预处理程序(如,cpp)执行了一个简单的置换,并用替换文本替换宏中定义的每一个自变量。#define macro replacement-text 如下面的宏置换命令:#define RAD 1.2345预处理程序会在UDF中所有的变量RAD出现的地方将RAD替换为1.2345。在你的函数中可能会有很多涉及到变量RAD的地方,但是你只需要在宏命令中定义一次,预处理程序会在所有的代码中执行替换操作。

22、在下面这个例子中:#define AREA_RECTANGLE(X,Y) (X)*(Y)你的UDF中所有的AREA_RECTANGLE(X,Y)都会被替换为(X)和(Y)的乘积。2.15 用#include实现文件包含UDF解释程序还支持文件包含的C前处理命令。当你使用#include包含一个文件时,C前处理程序会将#include filename行替换为文件名对应的文件内容。 filename 文件名对应的文件必须在当前目录中。只有udf.h文件例外,这是因为FLUENT解算器会自动将它读入。如下面的文件包含命令:会将文件udf.h包含进你的源代码中。2.16 与FORTRAN 的比较很多简单的C函数和FORTRAN函数的子程序很相似,例子如下:简单的C函数等价的FORTRAN函数int myfunction(int x)INTEGER FUNCTION MYFUNCTION(X)int x,y,z;INTEGER X,Y,Zy = 11;Y = 11z = x+y;Z = X+Yz = %d,z);WRITE (*,100) Zreturn z;MYFUNCTION = ZEND

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1