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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(UDF使用指南-1.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

UDF使用指南-1.doc

1、UDF有多种功能,如:定制边界条件,定义材料属性,定义表面和体积反应率,定义 Fluent输运方程中的源项,用户自定义标量输运方程 UDS中的源项扩散率函数等。1、UDF 基础1、Fluent 的求解次序了解 fluent的求解过程有助于理解 UDF的调用过程,确定在给定的任意时间内哪些数据是当前的和有效的。对于不同的求解器,其求解次序是不一样的。在分离式求解器求解过程中,用户定义的初始化函数(使用 DEFINE_INIT定义的)在迭代循环开始之前执行。然后迭代循环开始执行用户定义的调整函数(使用 DEFINE_ADJUST定义的) 。接着,求解守恒方程,顺序是从动量方程和后来的压力修正方程到

2、与特定计算相关的附加标量方程。守恒方程之后,属性被更新(包含用户定义属性) 。这样,如果模型涉及气体定律,这时,密度将随更新的温度(和压力、物质质量分数)而被更新,进行收敛或者附加要求的迭代的检查、循环或者继续或者停止。在耦合求解器求解过程中,用户定义的初始化函数(使用 DEFINE_INIT定义的)在迭代循环开始之前执行;然后迭代循环开始执行用户定义的调整函数(使用 DEFINE_ADJUST定义的) ;接着,Fluent求解连续、动量和(适合的地方)能量的控制方程及相关的物质输运或矢量方程。其余的求解步骤与分离式求解器相同。2、Fluent 网格拓扑1 单元(cell):区域被分割成的控制

3、体积2 单元中心(cell center):Fluent 中数据存储的地方3 面(face):单元(二维或三维)的边界4 边(edge):面(三维)的边界5 节点(node):网格点6 单元线索(cell thread):在其中分配了材料数据和源项的单元组7 面线索(face thread):在其中分配了边界数据的面组8 节点线索(node thread):节点组9 区域(domain):由网格定义的所有节点、面和单元线索的组合3、Fluent 的数据类型在编写 UDF时,除了可以使用 C语言数据类型外,还可以直接使用 Fluent指定的与求解器数据相关的数据类型。常用的 Fluent数据类型

4、如下。cell_t是线索内单元标示符的数据类型,是一个识别给定线索内单元的整数索引。face_t 是线索内面标示符的数据类型,是一个识别给定线索内面的整数索引。Thread 是单元或面的组合相关的数据容器。Node 是单元或面的拐角相关的数据容器。Domain 是 Fluent中最高水平的数据结构,是一个与网格中所有节点、面和单元线索组合相关的数据容器。2、UDF 中访问 Fluent变量的宏(一)访问单元的宏1、访问单元流体变量的宏在 Fluent中可以用来访问单元上流体变量的宏在表 1中列出,注意加了_G、_RG、_M1 和_M2这些下标的单元格温度的宏,可以应用于表 1中除单元格压力(C

5、_P)的所有求解器的变量中。这些下标表示的是矢量梯度、改造的矢量梯度、前一次的步长和前两次的步长。而对于单元格压力,它的矢量梯度和相应的分量是使用 C_DP得到的,而不是 C_P_G。表 1 在 mem.h文件中的流体标量宏名称(参数) 参数类型 返回值C_T(c,t) cell_t c,Thread*t 温度C_T_G(c,t) cell_t c,Thread*t 温度梯度矢量C_T_G(c,t)i cell_t c,Thread*t,inti温度梯度矢量的分量C_T_RG(c,t) cell_t c,Thread*t 改造后的温度梯度矢量C_T_RG(c,t)i cell_t c,Thre

6、ad*t,inti改造后的温度梯度矢量的分量C_T_M1(c,t) cell_t c,Thread*t 温度的前一次步长C_T_M2(c,t) cell_t c,Thread*t 温度的前二次步长C_P(c,t) cell_t c,Thread*t 压力C_DP(c,t) cell_t c,Thread*t 压力梯度矢量C_DP(c,t)i cell_t c,Thread*t,inti压力梯度矢量的分量C_U(c,t) cell_t c,Thread*t u方向的速度C_V(c,t) cell_t c,Thread*t v方向的速度C_W(c,t) cell_t c,Thread*t w方向的

7、速度C_YI(c,t,i) cell_t c,Thread*t,inti物质质量分数C_K(c,t) cell_t c,Thread*t 湍流运动能C_D(c,t) cell_t c,Thread*t 湍流运动能的分散速率(1)可以在宏中加入下标_G 来得到梯度矢量和其分量。例如,C_T_G(c,t)就是返回单元格的温度梯度矢量。注意:只有当已经求解出包含这个变量的方程时才能得到梯度变量。例如,如果定义了一个关于能量的源程序,那么所编的 UDF可以使用 C_T_G读写单元格的温度梯度,而不能使用 C_T_G读写 X方向的速度分量。而且,如果建立一个由使用者确定的方式转移方程,那么就不能得到一部

8、分的梯度了。这是因为求解器不断地移走它不需要的数据。可以使用下面的方法来阻止存储器释放记忆:发出文本命令 save/set/expert,然后对计算机提出的是否阻止暂时的求解器记忆释放这一提问回答是 ,按照这种做法就可以保留所有的梯度数据,但是这种计算需要更多的内存。(2)在调用梯度矢量时把某一分量作为参数,这样就可以得到梯度分量了,参数 0代表 X方向的分量,1 代表 Y方向的分量,2 代表 Z方向的分量。例如,C_T_G(c,t)0就是返回温度梯度 X方向的分量.注意:在表 1中,虽然只列出了温度梯度和其分量求解的宏,但是却可以扩展到除了压力以外的所有变量中去,对于压力只能按照表 1中的方

9、法使用 C_DP来得到压力梯度和其分量。(3)和梯度一样的方式,可以通过加 RG的下标在宏中得到梯度向量和其分量。通过使用恰当的整数作为参数来获得想要的矢量分量,参数 0代表 X方向的分量,1 代表 Y方向的分量,2 代表 Z方向的分量。当完成自己的插补计划时可以使用改造过的梯度。改造过的温度梯度和其分量在表1中列出了,同样可以推广到所有的变量。注意:改造过的梯度矢量和梯度矢量一样都只有在梯度方程被求解出来时才可以得到。(4)在表 1中的宏中加入下标_M1 就可以得到前一次步长时间下 的变量的值,得到的这些)(t数据可以在瞬态的模拟中使用。例如,C_T_M1(c,t),返回前一步时间下的单元格

10、温度的值。若在表 1里宏的后面加上下标_M2 就可以得到前两次步长下的时间 ,这些数据可用于瞬态的模)2(t拟计算中。在表 1中仅列出了温度的前一次步长的求法,也可以扩展到其他的变量中去。2、访问导数的宏表 2 在 mem.h文件中访问导数个宏名称(参数) 参数类型 返回值C_DUDX(c,t) cell_t c,Thread*t U速度对 x方向的导数C_DUDY(c,t) cell_t c,Thread*t U速度对 y方向的导数C_DUDZ(c,t) cell_t c,Thread*t U速度对 z方向的导数C_DVDX(c,t) cell_t c,Thread*t V速度对 x方向的导

11、数C_DVDY(c,t) cell_t c,Thread*t V速度对 y方向的导数C_DVDZ(c,t) cell_t c,Thread*t V速度对 z方向的导数C_DWDX(c,t) cell_t c,Thread*t W速度对 x方向的导数C_DWDY(c,t) cell_t c,Thread*t W速度对 y方向的导数C_DWDZ(c,t) cell_t c,Thread*t W速度对 z方向的导数3、访问材料性质的宏表 3 在 mem.h文件中访问材料性质的宏名称(参数) 参数类型 返回值C_FMEAN(c,t) cell_t c,Thread*t 第一次混合分数的平均值C_FME

12、AN2(c,t) cell_t c,Thread*t 第二次混合分数的平均值C_FVAR(c,t) cell_t c,Thread*t 第一次混合分数变量C_FVAR2(c,t) cell_t c,Thread*t 第二次混合分数变量C_PREMIXC(c,t) cell_t c,Thread*t 反应过程变量C_LAMFLAME SPEED(c,t) cell_t c,Thread*t 层流焰速度C_CRITICAL STRAIN RATE(c,t)cell_t c,Thread*t 临界应变速度C_POLLUT(c,t,i) cell_t c,Thread*t,inti第 i个污染物质的质

13、量分数C_R(c,t) cell_t c,Thread*t 密度C_MU L(c,t) cell_t c,Thread*t 层流速度C_MU T(c,t) cell_t c,Thread*t 湍流速度C_MU EFF(c,t) cell_t c,Thread*t 有效粘度C_K_L(c,t) cell_t c,Thread*t 热传导系数C_K_T(c,t) cell_t c,Thread*t 湍流热传导系数C_K_EFF(c,t) cell_t c,Thread*t 有效热传导系数C_CP(c,t) cell_t c,Thread*t 确定的热量C_RGAS(c,t) cell_t c,Th

14、read*t 气体常数C_DIFF L(c,t,i,j) cell_t c,Thread*t,int 层流物质的扩散率i,int jC_DIFF EFF(c,t,i) cell_t c,Thread*t,int i物质的有效扩散率C_ABS COEFF(c,t) cell_t c,Thread*t 吸附系数C_SCAT COEFF(c,t) cell_t c,Thread*t 扩散系数C_NUT(c,t) cell_t c,Thread*t 湍流速度4、访问用户自定义的单元标量和存储器的宏表 4 在 mem.h文件中的可以为单元格访问用户定义的标量和存储器的宏名称(参数) 参数类型 返回值C_

15、UDSI(c,t,i) cell_t c,Thread*t,int i用户定义的单元格标量C_UDSI M(c,t,i) cell_t c,Thread*t,int i前一次步长下用户定义的单元格标量C_UDSI_DIFF(c,t,i) cell_t c,Thread*t,int i用户定义的标量的单元格分散率C_UDMI(c,t,i) cell_t c,Thread*t,int i用户定义的单元格存储器5、访问雷诺兹压力模型的宏表 5 在 metric.h文件中的可以给雷诺兹压力模型读写标量的宏名称(参数) 参数类型 返回值C_RUU(c,t) cell_t c,Thread*t uu雷诺兹

16、压力C_RVV(c,t) cell_t c,Thread*t vv雷诺兹压力C_RWW(c,t) cell_t c,Thread*t ww雷诺兹压力C_RUV(c,t) cell_t c,Thread*t uv雷诺兹压力C_RVW(c,t) cell_t c,Thread*t vw雷诺兹压力C_RUW(c,t) cell_t c,Thread*t uw雷诺兹压力(二)访问面的宏1、访问面流体标量的宏注意:如果表面在边界上,那么流体的方向是由 F_FLUX决定的点指向外围空间。表 6 在 mem.h文件中可以在边界面读写流体标量的宏名称(参数) 参数类型 返回值F_R(f,t) face_t f

17、,Thread*t 密度F_P(f,t) face_t f,Thread*t 压力F_U(f,t) face_t f,Thread*t u方向的速度F_V(f,t) face_t f,Thread*t v方向的速度F_W(f,t) face_t f,Thread*t w方向的速度F_T(f,t) face_t f,Thread*t 温度F_H(f,t) face_t f,Thread*t 焓F_K(f,t) face_t f,Thread*t 湍流运动能F_D(f,t) face_t f,Thread*t 湍流运动能的分散速率F_YI(f,t,i) face_t f,Thread*t,int

18、i物质的质量分数F_FLUX(f,t) face_t f,Thread*t 通过边界表面的质量流速2、读写用户定义的面标量和存储器的宏表 7 在 mem.h文件中的表面读写用户定义的标量和存储器的宏名称(参数) 参数类型 返回值F_UDSI(f,t,i) face_t f,Thread*t,int i用户确定的表面标量F_UDMI(f,t,i) face_t f,Thread*t,int i用户定义的表面存储器3、访问混合面标量的宏表 8 在 mem.h文件中的访问混合面的宏名称(参数) 参数类型 返回值F_C0(f,t) face_t f,Thread*t 访问表面0 边上的单元变量F_C0

19、_THREAD(f,t) face_t f,Thread*t 访问表面0 边上的单元线索F_C1(f,t) face_t f,Thread*t 访问表面1 边上的单元变量F_C1_THREAD(f,t) face_t f,Thread*t 访问表面1 边上的单元线索(3)访问几何的宏1、节点和面的数量宏 C_NNODES和 C_NFACES返回相应的节点和面的整数值。对于一个给定的单元格,F_NNODES 返回与某个表面相关的节点的整数个数。表 9 在 mem.h文件中的节点和表面的宏名称(参数) 参数类型 返回值C_NNODES(c,t) cell_t c,Thread*t 一个单元格的节点

20、数C_NFACES(c,t) cell_t c,Thread*t 一个单元格中的表面数F_NNODES(f,t) cell_t f,Thread*t 一个表面中的节点数2、单元格和表面的重心表 10列出的宏可以获得一个单元格或是表面的真实重心。C_CENTROID 找到单元格的重心坐标,并把它的坐标存储在矩阵 X中。F_CENTROID 找到表面的重心的坐标,并把它的坐标存储在矩阵 X中。注意,矩阵 X可以是一维、二维或是三维的。表 10 在 metric.h文件中的变量重心宏名称(参数) 参数类型 返回值C_CENTROID(x,c,t) realxND ND,cell_t c,Thread

21、*t单元格重心的 x值F_CENTROID(x,f,t) realxND ND,face_t f,Thread*t表面中心的 x值3、表面积宏 F_AREA可以被用于返回一个实数的面积向量。对于内部的表面,标准的面积向量的方向是从单元格 C0指向单元格 C1。标准的方向总是从边界面指向外(范围之外)的。表 11 在 metric.h文件中的表面积宏名称(参数) 参数类型 返回值F_AREA(A,f,t) AND ND,face_t f,Thread*t面积向量 A4、单元格体积表 12列出的宏可以用于获得二维、三维和轴对称的模型的单元格的真实体积表 12 在 mem.h文件中的单元格体积宏名称

22、(参数) 参数类型 返回值C_VOLUME(c,t) cell_t c,Thread*t 二维或是三维的单元格体积单元格体积/ 是轴对2称模型的体积(四)访问节点的宏表 13和表 14列出的宏返回单元格节点的实数直角坐标(在单元格的拐角)和相应的节点速度的分量。例如,在移动的网格模拟中节点速度是相对应的,每个变量的 Node*node的参数定义了一个节点。表 13 在 mem.h文件中变量的节点坐标名称(参数) 参数类型 返回值NODE X(node) Node*node 节点的 X坐标NODE Y(node) Node*node 节点的 Y坐标NODE Z(node) Node*node 节

23、点的 Z坐标表 14 在 mem.h文件中的节点速度变量宏名称(参数) 参数类型 返回值NODE GX(node) Node*node 节点速度的 X分量NODE GX(node) Node*node 节点速度的 Y分量NODE GX(node) Node*node 节点速度的 Z分量(五)访问多相的宏表 15列出的宏返回一个与整体多相节点相连的实数变量。这些变量的定义在 sg_mphase.h文件中可以找到,这些包含在 udf.h文件中。表 15 在 sg_mphase.h文件中的变量宏名称(参数) 参数类型 返回值C_VOF(c,pt0) cell_t c,Thread*pt 主要相的体积

24、分数C_VOF(c,ptn) cell_t c,Thread*pt 第 n个辅助相的体积分数3、一般循环宏1、查询控制区的单元线当查询给定控制区的单元线索时,可以用 thread_loop_c。它包含单独的说明,后面是对控制区的单元线索所做的操作,正如下面显示的包含在中。注意:thread_loop_c 在执行上和下面的 thread_loop_c相似。Domain *domain;Thread *c_thread;Thread_loop_c(c_thread,domain)/*loops over all cell threads in domain*/2、查询控制区的面当查询给定控制区的面

25、时,可以用 thread_loop_f。它包含单独的说明,后面是对控制区的面所做的操作,正如下面显示的包含在中。注意:thread_loop_f 在执行上和上面的thread_loop_c相似。Thread *f_thread;Domain *domain;Thread_loop_f(f_thread,domain)/*loops over all face threads in a domain*/3、查询单元线索中的单元当要查询给定单元线索 c_thread上所有的单元时,可以用 begin_c_loop和 end_c_loop。它包含 begin和 end loop的说明,完成对单元线索

26、所做的操作,定义包含在中。当查找控制区单元线索的单元时,应用 loop全嵌套在 thread_loop_c中。cell_t c;Thread *c_thread;Begin_c_loop(c,c_thread)/*loops over cells in a cell thread*/end_c_loop(c,c_thread) 4、查询面线索中的面当要查找给定面线索 f_thread的所有面时,可以用 begin_f_loop和 end_f_loop。它包含begin和 end loop的说明,完成对面线索中面单元所做的操作,定义包含在中。当查找控制区面线索的所有面时,应用 loop全嵌套在

27、thread_loop_f中。face_t f;Thread *f_thread;Begin_f_loop(f,f_thread)/*loops over faces in a face thread*/end_f_loop(f,f_thread) 5、查询单元中的面下面函数用以查询给定单元中所有面。它包含单独的查询说明,后面是所做的操作,意义包含在中。face_t f;Thread *tf;int n;c_face_loop(c,t,n)/*loops over all faces on a cell*/F=C_FACE(c,t,n);tf=C_FACE_THREAD(c,t,n);这里 n

28、是当前面的索引号。当前面的索引号用在 C_FACE宏中以获得所有面的数量。例如,f=C_FACE(c,t,n).另一个在 c_face_loop中有用的宏是 C_FACE_THREAD。这个宏用于合并两个面线索,例如,tf=C_FACE_THREAD(c,t,n).6、查询单元节点C_node_loop函数用以查询给定单元中所有节点。它包含单独的查询说明,后面是所做的操作,定义包含在中。cell_t c;Thread *t;int n;c_node_loop(c,t,n)node=C_NODE(c,t,n);这里 n是当前节点的索引号。当前节点的索引号用在 C_NODE宏中以获得所有节点的数量

29、。例如,node=C_NODE(c,t,n).4、查询多相组分的宏1、查询混合物中相的控制区sub_domain_loop宏用于查询混合物控制区的所有相的子区。这个宏查询并在混合物控制区,给每个相区定义指针以及相关的 phase_domain_index。控制区需要指针,在每个相中都有权访问部分数据。注意:sub_domain_loop 宏在执行中和下面的 sub_thread_loop宏是相似的。int phase_domain_index;/*index of subdomain pointers*/Domain *mixture_domain;Domain *subdomain;sub_

30、domain_loop(subdomain,mixture_domain,phase_domain_index)sub_domain_loop的变量是 subdomain、mixture_domain 和 phase_domain_index。subdomain是 phase_level domain的指针,mixture_domain 是 mixture_level domain的指针。当想用 DEFINE宏时,mixture_domain(包含控制区变量,如 DEFINE_ADJUST)通过 Fluent求解器自动传递给 UDF,混合物就和 UDF相关了。如果 mixture_domain

31、没有显式地址传递给UDF,应用另外一个宏来恢复它,如在 sub_domain_loop前使用 Get_Domain(1)。phase_domain_index是子区指针索引号,phase_domain_index 指向初始相时,其索引号为0,混合物中其他相一次加 1,注意:subdomain 和 phase_domain_index是在 sub_domain_loop宏定义中初始化的。下面被集成在 UDF中的语句在求解过程中补充说明一个相的体积分数,它在求解过程的开始执行。这个函数建立一个中心在点(0.5,0.5,0.5) ,半径为 0.25的球形体。第二相的体积分数1被补充说明到球形体内的单

32、元中,但是第二个相在其他单元中的体积分数为 0。#include “udf.h”/*domain pointer that is passed by INIT function is mixture domain */DEFINE_INIT(my_init_function,mixture_domain)int phase_domain_index;cell_t cell;Thread *cell_thread;Domain *subdomain;Real xcND_ND;/*loop over all subdomains (phase) in the superdomain (mixtur

33、e)*/sub_domain_loop(subdomain,mixture_domain,pgase_domain_index)/*loop if secondary phase*/if(domain_ID(sunmain)=2)/*loop over all cell threads in the secondary phase domain*/thread_loop_c(cell_thread,subdomain)/*loop over all cells in secdonary phase cell threads*/Begin_c_loop_all(cell,cell_thread)C_CENTROID(xc,cell,cell_thread);if (sqrt(ND_SUM(pow(xc0-0.5),2.),pow(xc1-0.5,2.),pow(xc2-0.5,2.)0.25)/*set volume fraction to 1 for centroid*/C_VOF(cell,cell_thread)=1.;else/*otherwise initialize to zero*/C_VOF(cell,cell_thread)=0.;end_c_loop_all(cell,cell_thread)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报