1、1第六章. Utilities (工具)FLUENT公司提供的针对 FLUENT变量性能计算的预处理工具列表 6.1 Introduction 简要 6.2 General-Purpose Looping Macros 一般目的的宏 6.3 Multiphase-Specific Looping Macros 多项组分的宏 6.4 Setting Face Variables ( F_PROFILE) 设置面变量 6.5 Accessing Variables That Are Not Passed as Arguments 访问没有作为 Argument 传递的变量 6.6 Accessin
2、g Neighboring Cell and Thread Variables 访问邻近单元(网格点和线)上的变量 6.7 User-Defined Memory for Cells ( C_UDMI) 用户为网格定义内存(CUDMI) 6.8 Vector Utilities 矢量工具 6.9 Macros for Time-Dependent Simulations 与时间相关的数值模拟宏 6.10 Miscellaneous Utilities 其他各种工具6.1 简要Fluent Inc.提供了针对 Fluent 变量操作的一系列工具。这些工具中大部分可以作为宏直接执行。2许多宏可以用
3、于单相和多相模型的 UDFs 中,但是有些是只针对多相流的。回想一下当你为多相流模型写 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
5、over Cells in a Cell 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 查询控制区的单元线3当你想查询给定控制区的单元线时,你可以用 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 在执行上和 thre
7、ad_loop_c 相似,参考 6.2.1 部分。Thread *f_thread;Domain *domain;thread_loop_f(f_thread, domain)/* loops over all face threads in a domain*/6.2.3 查询单元线中的单元当你想要查询给定单元线 c_thread 上所有的单元时,你可以应用begin_c_loop 和 end_c_loop。它包含 begin 和 end loop 的说明,完成对单元线中单元所做的操作,定义包含在 中。当你想查找控制区单元线的单元时,应用的 loop 全嵌套在 thread_loop_c 中
8、。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)例子:/* Loop over cells in a thread to get information stored in cells. */begin_c_loop(c, c_thread)4/* C_T gets cell temperature. The += will cause all of the cell temperatures to be add
9、ed together. */temp += C_T(c, c_thread);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 face
10、s in a face thread */ end_f_loop(f, f_thread)例子:/* Loop over faces in a face thread to get the information stored on faces. */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)
11、6.2.5 查询单元中的面下面函数用以查询给定单元中所有面。包含单独的查询说明,后面是所做的操作包含在。 5face_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 是当地面的索引号。当地面的索引号用在 C_FACE 宏中以获得所有面的数量(e.g., f = C_FACE(c,t,n)。另一个在 c_face_loop 中有用的宏是 C_FACE_THREAD。这个宏用于合并两个面线。
12、(e.g., tf = C_FACE_THREAD(c,t,n). 查找与 c_face_loop 有关的宏参考 6.10 部分。6.2.6 查询单元节点( c_node_loop)下面函数用以查询给定单元中所有节点。包含单独的查询说明,后面是所做的操作包含在。 cell_t c;Thread *t;int n;c_node_loop(c, t, n).node = C_NODE(c,t,n);.6.这里,n 是当地节点的索引号。当地面的索引号用在 C_NODE 宏中以获得所有面的数量(e.g., node = C_NODE(c,t,n)6.3 多相组分查询宏下面这些宏用于多相模型的 UDFs
13、。关于 FLUENT 里的结构的层次的讨论参考3.11 部分尤其是图 3.11.1。 6.3.1 Looping over Phase Domains in 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 Pha
14、se Face Threads in a Mixture ( mp_thread_loop_f) 查询混合物中的相的面线6.3.1 Looping over Phase Domains in a Mixture 6.3.1 查询混合物中相的控制区( sub_domain_loop)sub_domain_loop 宏用于查询混合物控制区的所有相的子区。这个宏查询并在混合物控制区给每个相区定义指针以及相关的 phase_domain_index。正如 3.11部分所讨论的,控制区需要指针,在每个相中都有权访问部分数据。注意:sub_domain_loop 宏在执行中和 sub_thread_loo
15、p 宏是相似的,参考 6.3.2 部分。int phase_domain_index; */ index of subdomain pointers */Domain *mixture_domain;Domain *subdomain;sub_domain_loop(subdomain, mixture_domain, phase_domain_index)7sub_domain_loop 的变量是 subdomain,mixture_domain 和phase_domain_index。Subdomain 是 phase-level domain 的指针, mixture_domain 是
16、mixture-level domain 的指针。当你想用 DEFINE 宏时,mixture_domain(包含控制区变量 e.g., DEFINE_ADJUST)通过 FLUENT 求解器自动传递给你的 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,混合物中其
17、它相依次加 1。注意:subdomain 和phase_domain_index 是在 sub_domain_loop 宏定义中初始化的。 例子:下列被集成在 UDF 中的语句在求解过程中补充说明一个相的体积分数。它在求解过程的开始执行。这个函数建立一个中心在 0.5, 0.5, 0.5,半径为 0.25 的球形体。第二个相的体积分数 1 被补充说明到球形体内的单元中,但是第二个相在其他单元中的体积分数为 0。/*/* UDF for initializing phase volume fraction */*/#include “udf.h“/* domain pointer that is
18、 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 (phases) in the superdomain (mixture) */sub_domain_loop(subdomain, mixture_domain, phase_domain
19、_index)/* loop if secondary phase */if (DOMAIN_ID(subdomain) = 2) 8/* loop over all cell threads in the 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(N
20、D_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)6.3.2 查询混合物的相线 ( sub_thread_loop) sub_thread_loop 宏查询所有与混合物等值
21、线相的等值线。这个宏查找并返回每个子区和相关 phase_domain_index 的指针。如 3.11 部分所讨论的, 如果 subthread 指针 与进口区域相关,那么这个宏将提供给进口区域每个相面线指针。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
22、。 subthread 是相线的指针, mixture_thread 是 mixture-level thread 的指针。当你用 DEFINE 宏(包含一个线自变量)时,9通过 FLUENT 的求解器 mixture_thread 自动传递给你的 UDF,你的 UDF 就和混合物相关了。如果 mixture_thread 没有显式地传递给你的 UDF,你需要在调用 sub_thread_loop 之前,调用工具宏恢复它。phase_domain_index 是子区指针索引号,可以用宏 PHASE_DOMAIN_INDEX 恢复。(详情参考 6.5.9 部分) 初始相的索引号为 0,混合物中其
23、它相依次加一。注意: subthread 和phase_domain_index 在 sub_thread_loop 宏定义中被初始化。6.3.3 查询混合物中所有单元的线( mp_thread_loop_c)mp_thread_loop_c 宏查询混合物控制区所有单元的线,提供了与混合物等值线有关的相等值线的指针。当应用到混合物控制区时这几乎和 thread_loop_c 宏是等价的。 ( 6.2.1 部分) 区别是:除了查询每个单元线 ,它还返回一个指针数组( pt) 等价与相等值线。单元线第 i 相的指针是 pti,这里 i 是相控制区索引号 phase_domain_index。pti
24、 可以用做宏的自变量。需要相等值线的指针。相控制区索引号 phase_domain_index 可以用宏 PHASE_DOMAIN_INDEX 恢复 (详情参考 6.5.9 部分)。 Thread *pt; Thread *cell_threads;Domain *mixture_domain;mp_thread_loop_c(cell_threads, mixture_domain, pt)mp_thread_loop_c 的自变量是 cell_threads, mixture_domain , pt. cell_threads 是网格线的指针, mixture_domain 是 mixtu
25、re-level 控制区的指针,. pt 是含有 phase-level 线的指针数组。 当你要用包含控制区变量(e.g., DEFINE_ADJUST 的宏 DEFINE 时,mixture_domain 通过 FLUENT 的求解器自动传递给你的 UDF 文件,你的 UDF 就和混合物相关了。若 mixture_domain 没有显式地传递给你 UDF 文件,你应用另外一个工具(e.g., Get_Domain(1)来恢复,参考 6.5.1 部分。注意: pt 和 cell_threads 的值是由查询函数派生出来的。mp_thread_loop_c 是典型的用于 begin_c_loop
26、 中。 begin_c_loop 查询网格线内的所有网格。当begin_c_loop 嵌套在 mp_thread_loop_c 中,你就可以查询混合物中相单元线的所有网格了。 6.3.4 查询混合物中所有的相面线( mp_thread_loop_f)10宏 mp_thread_loop_f 查询混合物控制区内所有混合物等值线的面线并且给每个与混合物等值线有关的相等值线指针。在混合物控制区内这和宏thread_loop_f 几乎是等价的。区别是:除了查找每一个面线,这个宏还返回一个指针数组 pt,它与相等值线相互关联。 指向第 i 相的面线指针是 pti, 这里是 phase_domain_in
27、dex。 当需要相等值线指针时,pti 可以作为宏的自变量。phase_domain_index 可以用宏 PHASE_DOMAIN_INDEX 恢复。 (参考 6.5.9) Thread *pt; Thread *face_threads;Domain *mixture_domain;mp_thread_loop_f(face_threads, mixture_domain, pt)mp_thread_loop_f 的自变量是 face_threads, mixture_domain, 和 pt。 face_threads 是面线的指针,是混合物等值线控制区的指针。pt 是包含相等值线的指针
28、数组。 当你要用包含控制区变量(e.g., DEFINE_ADJUST 的宏 DEFINE 时,mixture_domain 通过 FLUENT 的求解器自动传递给你的 UDF 文件,你的 UDF 就和混合物相关了。若 mixture_domain 没有显式地传递给你 UDF 文件,你应用另外一个工具(e.g., Get_Domain(1)来恢复,参考 6.5.1 部分。注意: pt 和 cell_threads 的值是由查询函数派生出来的。mp_thread_loop_f 是典型的用于 begin_f_loop 中。 begin_f_loop 查询网格线内的所有网格。当begin_f_loo
29、p 嵌套在 mp_thread_loop_f 中,你就可以查询混合物中相单元线的所有网格了。6.4 Setting Face Variables ( F_PROFILE) 6.4 设置面变量当你要设置面的变量的值时,应用 F_PROFILE 宏。当你要生成边界条件的外形或存储新的变量值时,自动调用这一函数。F_PROFILE 全部宏定义参考 mem.h文件。. 宏: F_PROFILE( f, t, n)自变量: face_t f11Thread *tint n函数返回值: voidF_PROFILE 的自变量是 f, 面的索引号是 face_t; t, 面上线的指针,还有一个整数 n。 这些
30、变量通过 FLUENT 的求解器自动传递给你的 UDF。你不必给他们赋值。 整数 n 是要在边界上设定的变量标志符。例如:进口边界包含总压和总温,二者都在用户定义函数中定义。 进口边界的变量在 FLUENT 赋予整数 0,其它赋予 1。当你在 FLUENT 的进口边界面板中定义边界条件时,这些整数值由求解器设定。 6.5 访问没有赋值的自变量针对单相和多相的模型(比如定义源项,性质和外形),大多数标准的 UDF,你的函数所需要的变量(e.g., domain or thread pointers)在求解过程中通过求解器自动做为自变量直接传递给你的 UDF。例如,如果你的 UDF 定义了特殊边界
31、区域(使用 DEFINE_PROFILE)的外形,在 FLUENT 的边界条件面板中,你的UDF 就和相和混合物相关联了,在执行时通过求解器,合适的相和混合物变量传递给你的函数。然而,并非所有的 UDF 都直接把函数所需要的自变量传递给求解器。回想一下,例如 DEFINE_ADJUST 和 DEFINE_INIT UDFs 传递给 混合物控制区变量,这里 DEFINE_ON_DEMAND UDFs 是没有被传递的自变量。这部分提供了通过 DEFINE 函数访问没有被直接传递给 UDF 文件的工具。 6.5.1 Get_Domain 获得控制区 6.5.2 Phase Domain Pointe
32、r 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 Pointer Array Using Mixture-Level Thread ( THREAD_SUB_THREADS) 通过混合物等值线使用相线指针数组 6.5.5 Mixture Domain Pointer U
33、sing a Phase Domain Pointer ( DOMAIN_SUPER_DOMAIN) 通过相控制区指针调用混合物控制区指针 6.5.6 Mixture Thread Pointer Using a Phase Thread Pointer ( THREAD_SUPER_THREAD) 12 通过相线指针使用混合物线指针 6.5.7 Thread Pointer Using a Zone ID ( Lookup_Thread) 通过控制区 ID 使用线指针 6.5.8 domain_id Using a Phase Domain Pointer ( DOMAIN_ID) 通过相控
34、制区指针使用控制区 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 是一个整数,混合物控制区其值为 1,在多相混合物模型中其值依次加一。注意: Get_Domain(1) 来代替以前的 FLUENT 版本中外部变量 Domain *domain 表达式。
35、(参见 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 */.Multiphase Flows 多相流13在多相流中,Get_Domain 的返回值或者是混合物等值线,或单相等值线,或相等值线或相等值线控制区指针。doma
36、in_id 的值在混合物控制区始终是一,你可以用 FLUENT 里的图形用户界面获得 domain_id。简单的说,在 FLUENT 的相面板中,选择所需的相。domain_id 将被显示出来。你需要用硬件代码整数 ID作为自变量传递给宏。 DEFINE_ON_DEMAND(my_udf)Domain *mixture_domain;mixture_domain = Get_Domain(1); /* returns mixture domain pointer */* and assigns to variable */Domain *subdomain;subdomain = Get_Do
37、main(2); /* returns phase with ID=2 domain pointer*/* and assigns to variable */.例子:下面是一个名为 get_coords 的 UDF 打印出了为两个指定的线 ID 面的线面的质心。这一函数执行在单相流中用的 Get_Domain 工具。在这个例子中,函数Print_Thread_Face_Centroids 用了 Lookup_Thread 函数来决定线的指针,然后输出了具体文件中线的所有的面的质心。调用 Get_Domain(1) 函数返回控制区的指针 (或在多相流中是混合物控制区)。这一变量没有被传递给 D
38、EFINE_ON_DEMAND。/*/* Example of UDF for single phase that uses Get_Domain utility */*/#include “udf.h“FILE *fout;Print_Thread_Face_Centroids(Domain *domain, int id)real FC2;face_t f;Thread *t = Lookup_Thread(domain, id);14fprintf(fout,“thread id %dn“, id);begin_f_loop(f,t)F_CENTROID(FC,f,t);fprintf(
39、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_Centroids(domain, 4);fclose(fout); 6.5.2 Phase Domain Pointer Using t
40、he Phase Domain Index ( 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 的相指针。注意:DOMAIN_SUB_DOMAIN 在执行上和 THREAD_SUB_THREAD 宏相似。 (
41、在 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 的指针。 15当你用包含控制区自变量(e.g., DEFINE_ADJUST) and 的宏 DEFINE 时,自动通过 FLUENT 的求解器传递给你的 UDF 文件,你的 UDF 文件就
42、和混合物相关联了。否则,如果 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_domain_index 是自动通过 FLUENT 的求解器传递给你的 UDF,你
43、的 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 Phase Domain Index ( THREAD_SUB_THREAD) 6
44、.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_domain_index = 0; /* primar
45、y phase index is 0 */Thread *mixture_thread; /* mixture-level thread pointer */Thread *subthread = THREAD_SUB_THREAD(mixture_thread,phase_domain_index);mixture_thread 是一 mixture-level 线的指针。当你用包含控制区自变量(e.g., DEFINE_ PROFILE) and 的宏 DEFINE 时,自动通过 FLUENT 的求解器传递给你的 UDF 文件,你的 UDF 文件就和混合物相关联了。否则,如果混合物控制线指
46、针没有显式地传递给你的 UDF,你需要在调用 Lookup_Thread 宏之前,用另外一个宏工具来恢复(e.g., Get_Domain(1) 。参见 6.5.1 部分。 参考6.5.7 部分)。 16phase_domain_index 子区指针的索引号。它是一个整数初始相值为 0,以后每相依次加 1。当你要用包含相控制区索引号变量( DEFINE_EXCHANGE_PROPERTY, DEFINE_VECTOR_EXCHANGE_PROPERTY)的 DEFINE 宏时, phase_domain_index 通过 FLUENT 的求解器自动传递给你的 UDF,你的 UDF 就和具体的相
47、互作用相相互关联了。 (参考 UDF 的例子见 4.4.2 部分) 否则, 你需要用硬代码改变宏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 Using Mixture-Level Thread ( THREAD_SUB_TH
48、READS) 6.5.4 通过混合物等值线使用相线指针数组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 的求解器自动传递给你的 UDF,这个函数就和混合物有关了。否