?
查询混合物中的相的面线
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_loop宏是相似的,参考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)
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求解器自动传递给你的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中的语句在求解过程中补充说明一个相的体积分数。它在求解过程的开始执行。这个函数建立一个中心在0.5, 0.5, 0.5,半径为0.25的球形体。第二个相的体积分数1被补充说明到球形体内的单元中,但是第二个相在其他单元中的体积分数为0。 /*****************************************************************/ /* UDF for initializing phase volume fraction */ /*****************************************************************/
#include \
/* 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 xc[ND_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 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(ND_SUM(pow(xc[0] - 0.5,2.), pow(xc[1] - 0.5,2.),
pow(xc[2] - 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宏查询所有与混合物等值线相的等值线。这个宏查找并返回每个子区和相关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。 subthread 是相线的指针, mixture_thread 是 mixture-level thread的指针。当你用DEFINE宏(包含一个线自变量)时,通过FLUENT的求解器 mixture_thread自动传递给你的UDF,你的UDF就和混合物相关了。如果 mixture_thread 没有显式地传递给你的UDF,你需要在调用sub_thread_loop之前,调用工具宏恢复它。phase_domain_index 是子区指针索引号,可以用宏PHASE_DOMAIN_INDEX恢复。(详情参考 6.5.9部分) 初始相的索引号为0,混合物中其它相依次加一。注意: 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相的指针是pt[i],这里i是相控制区索引号phase_domain_index。pt[i] 可以用做宏的自变量。需要相等值线的指针。相控制区索引号 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 是mixture-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中。 begin_c_loop 查询网格线内的所有网格。当begin_c_loop 嵌套在 mp_thread_loop_c中,你就可以查询混合物中相单元线的所有网格了。
6.3.4查询混合物中所有的相面线( mp_thread_loop_f)
宏mp_thread_loop_f 查询混合物控制区内所有混合物等值线的面线并且给每个与混合物等值线有关的相等值线指针。在混合物控制区内这和宏thread_loop_f几乎是等价的。区别是:除了查找每一个面线,这个宏还返回一个指针数组pt,它与相等值线相互关联。 指向第i相的面线指针是 pt[i], 这里是 phase_domain_index。 当需要相等值线指针时,pt[i] 可以作为宏的自变量。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 是包含相等值线的指针数组。
当你要用包含控制区变量(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_loop 嵌套在 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 f Thread *t int n
函数返回值: void
F_PROFILE的自变量是f, 面的索引号是face_t; t, 面上线的指针,还有一个整数 n。 这些变量通过FLUENT的求解器自动传递给你的UDF。你不必给他们赋值。 整数n是要在边界上设定的变量标志符。例如:进口边界包含总压和总温,二者都在用户定义函数中定义。 进口边界的变量在FLUENT赋予整数0,其它赋予1。当你在FLUENT的进口边界面板中定义边界条件时,这些整数值由求解器设定。
6.5访问没有赋值的自变量
针对单相和多相的模型(比如定义源项,性质和外形),大多数标准的UDF,你的函数所需要的变量(e.g., domain or thread pointers)在求解过程中通过求解器自动做为自变量直接传递给你的UDF。例如,如果你的UDF定义了特殊边界区域(使用 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 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 Pointer 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 ( 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宏恢复控制区指针。