Fluent UDF中的Domain与Thread |
您所在的位置:网站首页 › 多相流是什么专业呀 › Fluent UDF中的Domain与Thread |
在Fluent UDF中,Domain与Thread是两个非常重要的数据类型,它们通常以指针的形式出现,在实际应用中可以通过Domain指针及Thread指针获取指定对象的数据。 1 DomainUDF中的Domain不同于常规意义上讲的计算域,因此不能简单的认为流体域和固体域是两个不同的Domain。 在UDF中,Domain是最顶级的数据结构,可以通过Domain指针去索引其他的数据类型,例如可以通过Domain找到某边界面的Thread,再通过遍历循环找到Thread上的所有网格面以及网格节点信息。 Domain指针的获取有两种方式:利用相的ID通过Get_Domain获取,或者利用DOMAIN_SUB_DOMAIN宏通过其他相获取。 1.1 通过Get_Domain获取在单相流模型中,只有一个唯一的Domain,可以使用Get_Domain宏直接获取指针,如下面的语句: Domain *domain = Get_Domain(1);在多相流中,每一相相当于一个Domain,如利用VOF模型计算油气水三相流,则计算模型中包含有4个Domain:混合相、油相、气相和水相。在获取每一相的Domain时可以采用下面的语句: Domain *mixture_domain = Get_Domain(1); //获取混合相的DomainDomain *oil_domain = Get_Domain(2); //获取ID为2的相的DomainDomain *gas_domain = Get_Domain(3); //获取ID为3的相的DomainDomain *water_domain = Get_Domain(5); //获取ID为5的相Domain相的ID可以通过Multiphase Model对话框得到,如下图所示的主相ID为2。 ![]() 注意:混合相的ID始终为1,主相和次相的ID号不一定连续。 ”若已有相的Domain指针,也可以通过Domain_ID宏获取其ID。如: int oil_id = Domain_ID(oil_domain);不过获取相ID好像没多大用处。 1.2 通过DOMAIN_SUB_DOMAIN获取一些DEFINE宏的参数中包含有Domain指针,当在多相流模型中使用这些宏时,Fluent传递给宏的是混合相的Domain指针,此时可以使用DOMAIN_SUB_DOMAIN宏获取主相或次相的Domain指针。 如下面的语句可以得到主相的Domain指针: int phase_domain_index = 0; /* 主相的索引为0 */ Domain *mixture_domain; Domain *subdomain = DOMAIN_SUB_DOMAIN(mixture_domain,phase_domain_index);DOMAIN_SUB_DOMAIN宏需要两个参数:混合相的domain指针及相索引。 混合相的domain指针由Fluent内核传递进来,相索引需要手工指定。 对于主相,其相索引为0,而次相的索引则按照Multiphase Model对话框中各相的排列顺序依次累加。如下图所示,oil为主相,其相索引为0,gas相的索引为1,water相的索引为2。 ![]() 鉴于相的数量不会太多,因此相索引可以手工指定。 注意:相索引不同于相ID。 ”在UDF中,若已知各相的Domain指针,也可以通过宏DOMAIN_SUPER_DOMAIN获取混合相的指针。如: Domain *subdomain; Domain *mixture_domain = DOMAIN_SUPER_DOMAIN(subdomain);不过这个宏似乎用处不大。 2 Thread在UDF中,Thread是使用最为频繁的数据结构,其通常以指针的形式出现。 Thread中包含有计算模型的所有信息,包括网格与物理模型等参数。与Domain类似,Thread指针的获取也有两种方式:利用Lookup_Thread宏及利用THREAD_SUB_THREAD获取。 2.1 利用Lookup_Thread宏当知道计算区域的ID时,可以利用Lookup_Thread宏获取该区域对应的Thread指针。这里的计算区域可以是Cell Zone,也可以是边界,也可以是网格面或网格节点。如下面的程序: int zone_ID = 2;Thread *t = Lookup_Thread(domain,zone_ID);此宏需要传入一个Domain指针以及区域的ID号。Domain的指针可以通过前面所述的方式获取,而区域指针则可以在GUI界面中查找,如下图所示边界bottomwall的ID为3。 ![]() 也可以使用TUI命令/define/boundary-conditions/list-zones查看ID。 ![]() 得到Thread指针后,就可以采用各种遍历循环进行信息获取了。 2.2 利用THREAD_SUB_THREAD获取在多相流问题中,传入到DEFINE宏的Thread是混合相的Thread指针。此时可以通过THREAD_SUB_THREAD得到主相及次相的Thread指针。 如下面的程序: int phase_domain_index = 0; /* 主相的索引 */ Thread *mixture_thread; /* 混合相的指针 */ Thread *subthread = THREAD_SUB_THREAD(mixture_thread,phase_domain_index); //得到主相的Thread指针与Domain类似,主相的索引始终为0,次相索引按对话框中相索引依次递加。 若已知主相和次相的Thread指针,也可以通过THREAD_SUPER_THREAD获取混合相的Thread指针。如下面的代码: Thread *subthread; Thread *mixture_thread = THREAD_SUPER_THREAD(subthread);得到了Thread指针后,即可采用各种循环遍历宏进行数据获取了。 3 Domain与Thread的差异可以把Domain想象成网格系统,单相流只有一套网格系统,因此只有一个Domain。多相流中,每一相拥有一套网格系统,因此存在多个Domain。 每一套网格系统拥有一个Thread,同时计算区域、边界、网格面、网格节点都可以拥有Thread,如果想要找到某个网格,则需要先通过Domain得到Thread,然后在Thread上进行循环遍历。对于单相流来说只有一个Domain,因此省去了通过Domain找Thread的操作,而多相流则需要在Domain上循环遍历。 可以认为Thread是Domain的下一层级,再下面就是Cell,Face以及Node。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |