fluent UDF第六章 工具

上传人:m**** 文档编号:204128433 上传时间:2023-04-26 格式:DOCX 页数:30 大小:55.95KB
收藏 版权申诉 举报 下载
fluent UDF第六章 工具_第1页
第1页 / 共30页
fluent UDF第六章 工具_第2页
第2页 / 共30页
fluent UDF第六章 工具_第3页
第3页 / 共30页
资源描述:

《fluent UDF第六章 工具》由会员分享,可在线阅读,更多相关《fluent UDF第六章 工具(30页珍藏版)》请在装配图网上搜索。

1、6. Utilities (工具)本章提供了针对FLUENT变量性能计算的FLUENT公司提供的预处理工具列表。 6.1 Introduction 间要6.2 General-Purpose Looping Macros 一般目的的宏 6.3 Multiphase-Specific Looping Macros多项组分的宏 6.4 Setting Face Variables ( F_PR0FILE) 设置面变量 6.5 Accessing Variables That Are Not Passed as Arguments访问没有作为Argument传递的变量 6.6 Accessing N

2、eighboring Cell and Thread Variables访问邻近单元(网格点和线)上的变量 6.7 User-Defined Memory for Cells ( C_UDMI)用户为网格定义内存(CUDMI) 6.8 Vector Utilities矢量工具 6.9 Macros for TimeDependent Simulations与时间相关的数值模拟宏 6.10 Miscellaneous Utilities其他各种工具6.1 间要Fluent Inc.提供了针对Fluent变量操作的一系列工具。这些工具中大部分可以 作为宏直接执行。许多宏可以用于单相和多相模型的UD

3、Fs中,但是有些是只针对多相流的。回想 一下当你为多相流模型写UDFs时,你将记住FLUENT的结构的层次。(详细参考 3.11.1)。从求解器中导入到你的 UDFs 中特殊的控制区和线性结构,依赖于你所使用的 DEFINE 宏和相关的控制区函数。(通过图形用户界面和用户定义的源代码)它或许也依赖于你所使用的多相流模型。将控制区的结构传递给 DEFINE_INIT 和 DEFINE_ADJUST 函数 , 但是它与多相流模型是相互独立的。这些函数始终被传 递给与混合物有关的控制区结构。DEFINE_ON_DEMAND UDFs没有被传递给任何控 制区。如果你的PDF没有显式地传给你的函数所需要

4、的线性的或者控制区的结构,那么 你可以利用本章提供的宏工具修复。提供的许多宏使你的函数可以寻找到给定线 和区的所有的网格点和面。6.2一般目的的循环宏下面这些循环的宏可以用于FLUENT单相和多相模型的UDFs中。这些宏的定义 包含再 mem.h 头文件中。 6.2.1 Looping over Cell Threads in a Domain ( thread loop c)查询控制区的单元线 6.2.2 Looping over Face Threads in a Domain ( thread_loop_f)查询控制区的面 6.2.3 Looping over Cells in a Ce

5、ll Thread ( begin.end_c_loop)查询单元线中的单元 6.2.4 Looping over Faces in a Face Thread ( begin.end_f_loop)查询面单元中的面 6.2.5 Looping over Faces on a Cell ( c face loop)查询单元面 6.2.6 Looping over Nodes of a Cell ( c_node_loop)查询单元节点62.1 查询控制区的单元线当你想查询给定控制区的单元线时,你可以用thread_loop_c。它包含单独的说 明,后面是对控制区的单元线所做操作,正如下面显示的

6、包含在 中。注意: thread_loop_c在执行上和thread_loop_f相似,参考6.2.2部分。Domain *domain;Thread *c_thread;thread_loop_c(c_thread, domain) /*loops over all cell threads in domain*/6.2.2 查询控制区的面当你想要查询给定控制区的面时,你可以应用thread_loop_f。它包含单独的说 明,后面是对控制区的面单元所做操作,正如下面显示的包含在 中。注意: thread_loop_f在执行上和thread_loop_c相似,参考6.2.1部分。Thread

7、*f_thread;Domain *domain;thread_loop_f(f_thread, domain)/* loops over all face threads in adomain*/6.2.3 查询单元线中的单元当你想要查询给定单元线 c_thread 上所有的单元时,你可以应用 begin_c_loop 和end_c_loop。它包含begin和end loop的说明,完成对单元线中单元所做的 操作,定义包含在中。当你想查找控制区单元线的单元时,应用的loop全嵌 套在 thread_loop_c 中。cell_t c;Thread *c_thread;begin_c_loo

8、p(c, c_thread) /* loops over cells in a cell thread */end_c_loop(c, c_thread)例子:/* Loop over cells in a thread to get information stored in cells. */ begin_c_loop(c, c_thread)/* C_T gets cell temperature. The += will cause all of the cell temperatures to be added together. */temp += C_T(c, c_thread)

9、;end_c_loop(c, c_thread)6.2.4 查询面线中的面当你想要查找给定面线 f_thread 的所有的面时,你可以用 begin_f_loop and end_f_loop。它包含begin和end loop的说明,完成对面线中面单元所做的操 作,定义包含在中。当你想查找控制区面线的所有面时,应用的loop全嵌套 在 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)

10、例子:/*Loopoverfacesinafacethreadtogettheinformationstoredonfaces. */begin_f_loop(f, f_thread)/* F_T gets face temperature. The += will cause all of the face temperatures to be added together. */temp += F_T(f, f_thread);end_f_loop(f, f_thread)6.2.5 查询单元中的面下面函数用以查询给定单元中所有面。包含单独的查询说明,后面是所做的操作 包含在。face_t

11、 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是当地面的索引号。当地面的索引号用在C_FACE宏中以获得所有面的 数量(e.g., f = C_FACE(c, t,n)。另一个在c_face_loop中有用的宏是C_FACE_THREAD。这个宏用于合并两个面线。(e.g., tf = C_FACE_THREAD(c,t,n).查找与c_face_loop有关的宏参考6.10部分。6.2.6

12、查询单元节点( 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宏中以获得所有面 的数量(e.g., node = C_NODE(c, t,n)6.3 多相组分查询宏下面这些宏用于多相模型的UDFs。关于FLUENT里的结构的层次的讨论参考3.11 部分尤其是图 3.11.1。 6.3.1 Looping over Phase Domains in

13、 a Mixture ( sub_domain_loop) 查询混合物中的相控制区 6.3.2 Looping over Phase Threads in a Mixture ( sub_thread_loop)查询混合物中的相线 6.3.3 Looping over Phase Cell Threads in a Mixture(mp_thread_loop_c)查询混合物中的相单元线 6.3.4 Looping over Phase Face Threads in a Mixture(mp thread loop f)查询混合物中的相的面线6.3.1 Looping over Phase

14、Domains in a Mixture6.3.1查询混合物中相的控制区( sub_domain_loop) sub_domain_loop 宏用于查询混合物控制区的所有相的子区。这个宏查询并在混 合物控制区给每个相区定义指针以及相关的phase_domain_index。正如3.11部 分所讨论的,控制区需要指针,在每个相中都有权访问部分数据。注意: sub_domain_loop宏在执行中和sub_thread_loop宏是相似的,参考6.3.2部分。int phase_domain_index; */ index of subdomain pointers */ Domain *mixt

15、ure_domain;Domain *subdomain; sub_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 (包含控制区变量e.g., DEFINE_ADJUST)通过FLUENT

16、求解器自动传递给你的UDF,混合物就和你的UDF 相关了。如果mixture_domain 没有显式地传递给你的 UDF, 你应用另外一个宏来恢复它(e.g., Get_Domain(1) before calling sub_domain_loop (参考 6.5.1 部分)。 phase_domain_index 是子区指针所引号, phase_domain_index 是初始相地索 引号为0,混合物中其它相依次加1。注意:subdomain和phase_domain_index 是在 sub_domain_loop 宏定义中初始化的。例子:下列被集成在UDF中的语句在求解过程中补充说明一

17、个相的体积分数。它在求解 过程的开始执行。这个函数建立一个中心在 0.5, 0.5, 0.5,半径为 0.25 的球 形体。第二个相的体积分数1被补充说明到球形体内的单元中,但是第二个相在 其他单元中的体积分数为 0。/*/* UDF for initializing phase volume fraction*/*/#include udf.h/* domain pointer that is passed by INIT function is mixture domain */ DEFINE_INIT(my_init_function, mixture_domain)int phase_

18、domain_index;cell_t cell;Thread *cell_thread;Domain *subdomain;real xcND_ND;/* loop over all subdomains (phases) in the superdomain (mixture) */ sub_domain_loop(subdomain, mixture_domain, phase_domain_index)/* loop if secondary phase */if (DOMAIN_ID(subdomain) = 2)/* loop over all cell threads in th

19、e secondary phase domain */ thread_loop_c (cell_thread,subdomain)/* loop over all cells in secondary 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 cen

20、troid */C_VOF(cell,cell_thread) = 1.;else/* otherwise initialize to zero */ C_VOF(cell,cell_thread) = 0.; end_c_loop_all (cell,cell_thread)6.3.2 查询混合物的相线 ( sub_thread_loop)sub_thread_loop 宏查询所有与混合物等值线相的等值线。这个宏查找并返回每 个子区和相关 phase_domain_index 的指针。如3.11部分所讨论的,如果sub thread指针 与进口区域相关,那么这个宏 将提供给进口区域每个相面线

21、指针。int phase_domain_index;Thread *subthread;Thread *mixture_thread;sub_thread_loop(subthread, mixture_thread, phase_domain_index) sub_thread_loop 的 自 变 量 是 subthread, mixture_thread, 和 phase_domain_index 。 subthread 是 相 线 的 指 针 , mixture_thread 是 mixture-level thread 的指针。当你用 DEFINE 宏(包含一个线自变量)时,通 过F

22、LUENT的求解器mixture_thread自动传递给你的UDF,你的UDF就和混合物 相关了。如果mixture_thread没有显式地传递给你的UDF,你需要在调用 sub_thread_loop 之前,调用工具宏恢复它。 phase_domain_index 是子区指针 索引号,可以用宏PHASE_DOMAIN_INDEX恢复。(详情参考6.5.9部分)初始相 的索引号为0 ,混合物中其它相依次加一。注意:sub thread和 phase_domain_index 在 sub_thread_loop 宏定义中被初始化。6.3.3 查询混合物中所有单元的线( mp_thread_loo

23、p_c) mp_thread_loop_c 宏查询混合物控制区所有单元的线,提供了与混合物等值线 有关的相等值线的指针。当应用到混合物控制区时这几乎和 thread_loop_c 宏 是等价的。(6.2.1部分)区别是:除了查询每个单元线,它还返回一个指针 数组(pt)等价与相等值线。单元线第i相的指针是pt i,这里i是相控制区 索引号phase_domain_index。pt i可以用做宏的自变量。需要相等值线的指 针。相控制区索引号 phase_domain_index 可以用宏 PHASE_DOMAIN_INDEX 恢复 (详情参考6.5.9部分)。Thread *pt;Thread

24、*cell_threads;Domain *mixture_domain; mp_thread_loop_c(cell_threads, mixture_domain, pt)mp_threadoop_c的自变量是cell_threads, mixture_domain , pt. cell_threads 是网格线 的指针,mixture_domain是mixture-level控制区的指针,.pt是含有phase-level线的 指针数组。当你要用包含控制区变量(e.g., DEFINE_ADJUST的宏 DEFINE 时, mixture_domain通过FLUENT的求解器自动传递给你

25、的UDF文件,你的UDF就和 混合物相关了。若mixture_domain没有显式地传递给你UDF文件,你应用另外 一个工具(e.g., Get_Domain(1)来恢复,参考6.5.1部分。注意:pt和 cell_threads的值是由查询函数派生出来的。mp_thread_loop_c是典型的用于 begin_c_loop 中。 begin_c_loop 查询网格线内的所有网格。当 begin_c_loop 嵌套在 mp_thread_loop_c 中, 你就可以查询混合物中相单元线的所有网格了。6.3.4 查询混合物中所有的相面线(mp_thread_loop_f)宏 mp_thread

26、_loop_f 查询混合物控制区内所有混合物等值线的面线并且给每 个与混合物等值线有关的相等值线指针。在混合物控制区内这和宏 thread_loop_f几乎是等价的。区别是:除了查找每一个面线,这个宏还返回一 个指针数组pt,它与相等值线相互关联。指向第i相的面线指针是pt i,这 里是 phase_domain_index。 当需要相等值线指针时, pti 可以作为宏的自变 量。phase_domain_index 可以用宏 PHASE_DOMAIN_INDEX 恢复。(参考 6.5.9)Thread *pt;Thread *face_threads;Domain *mixture_doma

27、in; mp_thread_loop_f(face_threads, mixture_domain, pt)mp_thread_loop_f 的自变量是 face_threads, mixture_domain, 和 pt。 face_threads是面线的指针,是混合物等值线控制区的指针。pt是包含相等值 线的指针数组。当你要用包含控制区变量(e.g., DEFINE_ADJUST的宏DEFINE时,mixture_domain通过FLUENT的求解器自动传递给你的UDF文件,你的UDF就和 混合物相关了。若mixture_domain没有显式地传递给你UDF文件,你应用另外 一个工具(e.

28、g. Get_Domain( 1)来恢复,参考6.5.1部分。注意:pt和 cell_threads的值是由查询函数派生出来的。mp_thread_loop_f是典型的用于 begin_f_loop 中。 begin_f_loop 查询网格线内的所有网格。当 begin_f_loop 嵌套在 mp_thread_loop_f 中, 你就可以查询混合物中相单元线的所有网格了。6.4 Setting Face Variables ( F_PROFILE)6.4 设置面变量当你要设置面的变量的值时,应用F_PROFILE宏。当你要生成边界条件的外形或 存储新的变量值时,自动调用这一函数。F_PROF

29、ILE全部宏定义参考mem.h文件。宏:F_PROFILE( f, t, n)自变量:face_t fThread *tint n函数返回值:voidF_PROFILE的自变量是f,面的索引号是face_t; t,面上线的指针,还有一个 整数n。这些变量通过FLUENT的求解器自动传递给你的UDF。你不必给他们赋 值。整数n是要在边界上设定的变量标志符。例如:进口边界包含总压和总温, 二者都在用户定义函数中定义。进口边界的变量在FLUENT赋予整数0其它赋 予1。当你在FLUENT的进口边界面板中定义边界条件时,这些整数值由求解器 设定。6.5 访问没有赋值的自变量l=J|=|针对单相和多相的

30、模型(比如定义源项,性质和外形),大多数标准的UDF,你 的函数所需要的变量(e.g., domain or thread poin ters)在求解过程中通过求 解器自动做为自变量直接传递给你的UDF。例如,如果你的UDF定义了特殊边界 区域(使用DEFINE_PROFILE)的外形,在FLUENT的边界条件面板中,你的UDF 就和相和混合物相关联了,在执行时通过求解器,合适的相和混合物变量传递给 你的函数。然而,并非所有的UDF都直接把函数所需要的自变量传递给求解器。 回想一下,例如 DEFINE_ADJUST 和 DEFINE_INIT UDFs 传递给 混合物控制区变 量,这里DEFI

31、NE_ON_DEMAND UDFs是没有被传递的自变量。这部分提供了通过 DEFINE函数访问没有被直接传递给UDF文件的工具。 6.5.1 Get_ Domain获得控制区 6.5.2 Phase Domain Pointer Using the Phase Domain Index(DOMAIN_SUB_DOMAIN)通过相控制区索引号使用相控制区指针 6.5.3 Phase-Level Thread Pointer Using the Phase Domain Index(THREAD_SUB_THREAD)通过相控制区索引号使用相等值线指针 6.5.4 Phase Thread Poi

32、nter Array Using Mixture-Level Thread(THREAD_SUB_THREADS)通过混合物等值线使用相线指针数组 6.5.5 Mixture Domain Pointer Using a Phase Domain Pointer(DOMAIN SUPER DOMAIN)通过相控制区指针调用混合物控制区指针 6.5.6 Mixture Thread Pointer Using a Phase Thread Pointer(THREAD SUPER THREAD)通过相线指针使用混合物线指针 6.5.7 Thread Pointer Using a Zone ID

33、 ( Lookup Thread)通过控制区ID使用线指针 6.5.8 domain_id Using a Phase Domain Pointer ( DOMAIN_ID)通过相控制区指针使用控制区ID 6.5.9 Phase Domain Index Using a Phase Domain Pointer(PHASE_DOMAIN_INDEX)通过相控制区指针使用相控制区索引号6.5.1 Get_Domain若控制区指针没有显式地作为自变量传递给你地UDF,你可以用Get_Domain宏 恢复控制区指针。Get_Domain(domain_id); domain_id 是一个整数,混合物

34、控制区其值为 1,在多相混合物模型中其值依次 加一。注意: Get_Domain(1) 来代替以前的 FLUENT 版本中外部变量 Domain *domain表达式。(参见1.4部分)Single-Phase Flows单相流在单相流中, domain_id 为 1 , Get_Domain(1) 将放回流体控制区指针。DEFINE_ON_DEMAND(my_udf)Domain *domain;/* domain is declared as a variable */domain = Get_Domain(1); /* returns fluid domain pointer*/Mult

35、iphase Flows多相流在多相流中,Get_Domain的返回值或者是混合物等值线,或单相等值线,或相 等值线或相等值线控制区指针。 domain_id 的值在混合物控制区始终是一,你可 以用FLUENT里的图形用户界面获得domain_id。简单的说,在FLUENT的相面板 中,选择所需的相。domain_id将被显示出来。你需要用硬件代码整数ID作为 自变量传递给宏。DEFINE_ON_DEMAND(my_udf)Domain *mixture_domain;mixture_domain=Get_Domain(1); /*returnsmixturedomainpointer*/*

36、and assigns to variable*/Domain *subdomain;subdomain = Get_Domain(2); /* returns phase with ID=2 domain pointer*/ /* and assigns to variable*/例子:下面是一个名为 get_coords 的 UDF 打印出了为两个指定的线 ID 面的线面的质 心。这一函数执行在单相流中用的 Get_Domain 工具。在这个例子中,函数 Print_Thread_Face_Centroids 用了 Lookup_Thread 函数来决定线的指针,然后 输出了具体文件中线的

37、所有的面的质心。调用 Get_Domain(1) 函数返回控制区 的指针 (或 在多相 流中 是混合 物控制 区) 。这一 变量没 有被 传递给 DEFINE_ON_DEMAND。/*/ /* Example of UDF for single phase that uses Get_Domain utility */ /*/#include udf.hFILE *fout;Print_Thread_Face_Centroids(Domain *domain, int id)real FC2;face_t f;Thread *t = Lookup_Thread(domain, id);fpri

38、ntf(fout,thread id %dn, id);begin_f_loop(f,t)F_CENTROID(FC,f,t);fprintf(fout, f%d %g %g %gn, f, FC0, FC1, FC2);end_f_loop(f,t) fprintf(fout, n);DEFINE_ON_DEMAND(get_coords)Domain *domain;domain = Get_Domain(1);fout = fopen(faces.out, w);Print_Thread_Face_Centroids(domain, 2);Print_Thread_Face_Centro

39、ids(domain, 4);fclose(fout);6.5.2 Phase Domain Pointer Using the Phase DomainIndex (DOMAIN_SUB_DOMAIN)6.5.2 通过相控制区索引号使用相控制区指针有两个方法可以获得混合物控制区具体相(或子区)的指针。你或者可以用宏DOMAIN_SUB_DOMAIN (在下面描述)或 Get_Domain,在 6.5.1 部分描述。DOMAIN_SUB_DOMAIN 有两个自变量:mixture_domain 和 phase_domain_index。这个函数返回给定 phase_domain_index 的

40、相指针。注意: DOMAIN_SUB_DOMAIN 在执行上和THREAD_SUB_THREAD宏相似。(在6.5.3.部分描述)int phase_domain_index = 0;/* primary phase index is 0 */Domain *mixture_domain;Domain *subdomain = DOMAIN_SUB_DOMAIN(mixture_domain,phase_domain_index);mixture_domain 是 mixture-level domain 的指针。当你用包含控制区自变量(e.g., DEFINE_ADJUST) and的宏DE

41、FINE时,自动通 过FLUENT的求解器传递给你的UDF文件,你的UDF文件就和混合物相关联了。 否则, 如果 mixture_domain 没有显式地传递给你的 UDF, 你需要在调用 sub_domain_loop之前,用另外一个宏工具来恢复(e.g., Get_Domain(1)。参 见6.5.1部分。phase_domain_index 是子区指针地索引号。 它是一个整数初始相值为 0,以后 每相依次加 1。 当你用包含相控制区变量( DEFINE_EXCHANGE_PROPERTY, DEFINE_VECTOR_EXCHANGE_PROPERTY)的 DEFINE 宏时,phase

42、_domain_index 是 自动通过FLUENT的求解器传递给你的UDF,你的UDF就和互相作用的相相联系 了。否则,你需要硬代码调用DOMAIN_SUB_DOMAIN宏给phase_domain_index指 针赋值。如果你的多相流模型有两相,然后phase_domain_index初始相的值是 0, 第二相的值为 1。 然而, 如果多相流模型中有更多的相, 你需要用 PHASE_DOMAIN_INDEX宏来恢复与给定控制区的phase_domain_index。详情参考 6.5.9部分。6.5.3 Phase-Level Thread Pointer Using the PhaseDo

43、main IndexTHREAD_SUB_THREAD6.5.3 通过相控制区索引号使用相等值线指针THREAD_SUB_THREAD宏可以用来恢复给定相控制区索引号的phase-level thread (subthread) 指针。 THREAD_SUB_THREAD 有两个自变量: mixture_thread 和 phase_domain_index。这一函数返回给定 phase_domain_index 的 phase-level 线指针。注意:THREAD_SUB_THREAD在执行上与DOMAIN_SUB_DOMAIN宏相似, 参见6.5.2.部分。int phase_domai

44、n_index = 0;/*primaryphaseindexis0 */Thread*mixture_thread;/*mixture-level thread pointer */Thread *subthread = THREAD_SUB_THREAD(mixture_thread,phase_domain_index);mixture_thread是一 mixtureTevel线的指针。当你用包含控制区自变量(e.g., DEFINE_ PROFILE) and的宏DEFINE时,自动通过FLUENT的求解器传递给你的 UDF 文件,你的 UDF 文件就和混合物相关联了。否则,如果混合

45、物控制线指针没 有显式地传递给你的UDF,你需要在调用Lookup_Thread宏之前,用另外一个宏 工具来恢复(e.g.,Ge t_Domain(l)。参见 6.5.1部分。参考 6.5.7部分)。phase_domain_index 子区指针的索引号。它是一个整数初始相值为 0,以后每相 依次加 1。当你要用包含相控制区索引号变量 ( DEFINE_EXCHANGE_PROPERTY, DEFINE_VECTOR_EXCHANGE_PROPERTY)的 DEFINE 宏时,phase_domain_index 通 过FLUENT的求解器自动传递给你的UDF,你的UDF就和具体的相互作用相相

46、互 关联了。(参考UDF的例子见4部分)否则,你需要用硬代码改变宏 THREAD_SUB_THREAD的phase_domain_index值。如果你的多相流模型中只有两 相,那么 phase_domain_index 对初始相是 0,第二个相为 1。然而,如果你有 更多的相, 你需要用 PHASE_DOMAIN_INDEX 宏来恢复与给定区域相关的 phase_domain_index。详情参考 6.5.9 部分。6.5.4 Phase Thread Pointer Array UsingMixture-Level ThreadTHREAD_SUB_THREADS6.5.4 通过混合物等值线

47、使用相线指针数组THREAD_SUB_THREADS 宏 可以用以恢复指针数组, pt, 它的元素包含相等值线 (子线)的指针。 THREADS_SUB_THREADS 有一个变量 mixture_thread。Thread *mixture_thread;Thread *pt; /* initialize pt */ pt = THREAD_SUB_THREADS(mixture_thread);mixture_thread 是 mixture-level thread 代表网格线或面线的指针。当你用包 含线变量(e.g., DEFINE_PROFILE)的DEFINE宏时,通过FLUENT

48、的求解器自动传 递给你的UDF,这个函数就和混合物有关了。否则,如果混合物线的指针没有显 式地传递给你的UDF,然后你需要用令一个方法来恢复。例如:你可以用 Lookup_Thread 宏。(参考 6.5.7 部分)。pti 数 组 的 元 素 是 与 第 I 相 的 相 等 值 线 有 关 的 值 , 这 里 i 是 phase_domain_index。当你想恢复网格具体相的信息时,你可以用pt i做为 一些网格变量宏的自变量。例如:C_R(c,pti)可以用来返回网格点c第I相 的密度。指针pt i可以用THREAD_SUB_THREAD来恢复,在6.5.3部分讨论, 用I做为自变量。p

49、hase_domain_index可以用宏PHASE_DOMAIN_INDEX来恢复, 参见6.5.9部分。6.5.5 Mixture Domain Pointer Using a Phase DomainPointer (DOMAIN_SUPER_DOMAIN)6.5.5 通过相控制区指针调用混合物控制区指针当你的UDF有权访问特殊的相等值线(子区)指针,你可以用宏DOMAIN_SUPER_DOMAIN, 恢复混合物等值线控制区指针。 DOMAIN_SUPER_DOMAIN 含有一个变量 subdomain。 注意: DOMAIN_SUPER_DOMAIN 在执行上和 THREAD_SUPE

50、R_THREAD宏是非常相似的。参考6.5.6.部分。Domain *subdomain;Domain *mixture_domain = DOMAIN_SUPER_DOMAIN(subdomain);Subdomain 是多相流混合物控制区相等值线的指针。当你用包含控制区变量(e.g., DEFINE_ADJUST)的DEFINE宏时,通过FLUENT的求解器,它可以自动 传递给你的UDF文件,这个函数就会和混合物中的第一相和第二相相关了。注意: 在当前的FLUENT版本中,DOMAIN_SUPER_DOMAIN将返回与Get_Domain(1)相同 的指针。 这样, 如果你的 UDF 可以

51、使用子区的指针, 建议使用宏 DOMAIN_SUPER_DOMAIN 来代替 Get_Domain 宏以避免将来的 FLUENT 版本造成的 不兼容问题。6.5.6 Mixture Thread Pointer Using a Phase ThreadPointer (THREAD_SUPER_THREAD6.5.6 通过相线指针使用混合物线指针当你的 UDF 有权访问某一条相线()子线指针你想恢复混合物的等值线指针时, 你可以使用 宏 THREAD_SUPER_THREAD 。 THREAD_SUPER_ 有一个自变量 subthread。Thread *subthread;Thread *

52、mixture_thread = THREAD_SUPER_THREAD(subthread);subthread 在多相流混合物中是一个特殊的相等值线指针。当你使用包含线变量(e.g., DEFINE_PROFILE)的DEFINE宏时,通过FLUENT的求解器它自动传递给 你的 UDF 文件,这个函数就和混合物中的两相相互关联了。注意:在执行上和 THREAD_SUPER_THREAD宏是非常相似的。参考6.5.5.部分。657 Thread Pointer Using a Zone ID ( Lookup_Thread)6.5.7 通过区的 ID 使用线指针当你想要在FLUENT的边界条

53、件面板中恢复与给定区域ID的线指针时,你可以使 用宏 Lookup_Thread 。例如,假设你的 UDF 需要对该区域的特殊线操作(并非 查找所有的线),你可以用DEFINE宏定义你的UDF文件,而不用将线指针(e.g., DEFINE_ADJUST)从FLUENT的求解器传递到你的UDF文件。你的UDF还可以使用 Lookup_Thread来获得你想要的指针。这一过程分两步:首先,你应该从FLUENT 的边界条件面板中区域的ID;然后,你需要使用硬代码做为自变量调用宏 Lookup_Thread。 Lookup_Thread 返回与给定区域 ID 相关的线的指针。你可以 将线指针赋给thr

54、ead_name,在你的UDF中使用。int zone_ID;Thread *thread_name = Lookup_Thread(domain,zone_ID);在多相流的上下文中,通过宏Lookup_Thread返回的线是与控制区自变量相关的 相的等值线。例子下面是一个使用宏Lookup_Thread的UDF文件,在这个例子中,通过宏 Lookup_Thread返回给定区域ID的线指针,将它赋给线。在begin_f_loop和 F_CENTROID中使用这个线指针查找与这个线相关的所有的面,获得面的质心输 出到文件。/*/ /* Example of UDF that uses Look

55、up_Thread macro*/* Note If UDF is applied to a multiphase flow problem, the domain*/ /* passed will be the mixture domain so that the thread that is */* returned is the mixture-level thread */ /*/ #include udf.h /* domain passed to Adjust function is mixture domain for multiphase*/DEFINE_ADJUST(prin

56、t_f_centroids, domain)real FC2;face_t f;int ID = 1;/* Zone ID for wall-1 zone from Boundary Conditions panel */ Thread *thread = Lookup_Thread(domain, ID);begin_f_loop(f, thread)F_CENTROID(FC, f, thread); printf(x-coord = %f y-coord = %f, FC0, FC1);end_f_loop(f, thread)6.5.8 domain_id Using a Phase

57、Domain Pointer( DOMAIN_ID)6.5.8 使用相的控制区指针当 你有 权访 问与 给定 相等 值线 控制 区指 针的 domain_id 时 ,你 可以 使用 DOMAIN_ID。DOMAIN_ID有一个自变量subdomain,它是相等值线控制区的指针。 控制区(混合物)的最大的等值线的 domain_id 的默认值是 1。即:如过被传递 给D0MAIN_ID的控制区指针是混合物控制区的等值线指针,那么,函数的返回值 为 1。注意:当你在 FLUENT 的相面板中选择需要的相时,宏所返回的 domain_id 是和显示在图形用户界面中的整数值ID相同的。Domain *

58、subdomain;int domain_id = DOMAIN_ID(subdomain);6.5.9 Phase Domain Index Using a Phase DomainPHASE_DOMAIN_IPointer (6.5.9 通过相控制区使用相控制区索引号宏 PHASE_DOMAIN_INDEX 返回给定相等值线控制区(子区)指针的 phase_domain_index。PHASE_DOMAIN_INDEX 有一个自变量,subdomain,它是 phase-level domain 的指针。 phase_domain_index 是子区指针的索引号。初 始相的值为整数 0,以

59、后每相依次加 1。Domain *subdomain;int phase_domain_index = PHASE_DOMAIN_INDEX(subdomain);6.6 Accessing Neighboring Cell and ThreadVariables6.6访问邻近网格和线的变量你可以用F luent Inc.提供的宏来确定邻近网格面。在复杂的UDF文件中,当 你查询特定网格或线的面时,可能会用到这个信息。对给定的面f和它的线tf, 两个相邻的网格点为c0和cl。若是控制区附面层上的面则只有cO, cl的值为 NULL。一般的,然而当把网格导入到FLUENT中时,按照右手定则定义面

60、上节点 的顺序,面f上的网格点c0、c1都存在。下面的宏返回网格点c0和c1的ID 和所在的线。cell_t cO = F_CO(f,tf); /* returns ID for cO*/tcO = THREAD_TO(tf); /* returns the cell thread for cO */ cell_t cl = F_Cl(f,tf); /*returns ID for cl */tcl = THREAD_Tl(tf);/* returns the cell thread for cl */回忆由F_AREA和F_FLUX返回的信息是直接相关的,这些值从网格c0到c1返 回正值。6

61、.7 User-Defined Memory for Cells ( C_UDMI)6.7 用户为网格定义内存为了存储、恢复由UDF网格区域变量的值,你可以用C_UDMI函数分配500个单 元。这些值可以用做后处理,例如,通过其它的UDFs。这个在用户定义内存中 存储变量的方法是比用户定义标量(C_UDSI)更有效。宏:C_UDMI( c, thread, index)自变量类型: cell_t cThread *threadint index函数返回值: voidC_UDMI有三个自变量:c, thread,和index。c是网格标志符号,thread是 网格线指针, index 是识别数据

62、内存分配的。与索引号 0 相关的用户定义的内 存区域为 0,(或 udm-0)。在你用来在内存中存放变量之前,首先你需要在FLUENT的User-Defined Memory 面板中分配内存。参考8.1.5部分Define User-Defined Memory.!当在分配内存之前,如果你想用C_UDMI,就会出现错误。你在图形用户窗口分配的每一个用户定义的内存,都会创建一个新的变量。例如: 你要指定两个内存分配区,那么两个变量udm-0和and udm-1就会在数据储存器 中产生。这些名字将会在后台处理面板中显示出来。下面是计算网格点的温度的 例子,然后存放到用户定义的内存中。例子:/* Computes cell temperatu

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!