第六章Utilities(工具)第六章Utilities(工具)本章提供了针对FLUENT变量性能计算的FLUENT公司提供的预处理工具列表。•6.1Introduction简要•6.2General-PurposeLoopingMacros•一般目的的宏•6.3Multiphase-SpecificLoopingMacros•多项组分的宏•6.4SettingFaceVariables(F_PROFILE)设置面变量•6.5AccessingVariablesThatAreNotPassedasArguments•访问没有作为Argument传递的变量•6.6AccessingNeighboringCellandThreadVariables访问邻近单元(网格点和线)上的变量•6.7User-DefinedMemoryforCells(C_UDMI)用户为网格定义内存(C-UDMI)•6.8VectorUtilities矢量工具•6.9MacrosforTime-DependentSimulations与时间相关的数值模拟宏•6.10MiscellaneousUtilities其他各种工具1第六章Utilities(工具)6.1简要FluentInc.提供了针对Fluent变量操作的一系列工具。这些工具中大部分可以作为宏直接执行。许多宏可以用于单相和多相模型的UDFs中,但是有些是只针对多相流的。回想一下当你为多相流模型写UDFs时,你将记住FLUENT的结构的层次。(详细参考3.11.1)。从求解器中导入到你的UDFs中特殊的控制区和线性结构,依赖于你所使用的DEFINE宏和相关的控制区函数。(通过图形用户界面和用户定义的源代码)它或许也依赖于你所使用的多相流模型。将控制区的结构传递给DEFINE_INIT和DEFINE_ADJUST函数,但是它与多相流模型是相互独立的。这些函数始终被传递给与混合物有关的控制区结构。DEFINE_ON_DEMANDUDFs没有被传递给任何控制区。如果你的PDF没有显式地传给你的函数所需要的线性的或者控制区的结构,那么你可以利用本章提供的宏工具修复。提供的许多宏使你的函数可以寻找到给定线和区的所有的网格点和面。6.2一般目的的循环宏下面这些循环的宏可以用于FLUENT单相和多相模型的UDFs中。这些宏的定义包含再mem.h头文件中。2第六章Utilities(工具)•6.2.1LoopingoverCellThreadsinaDomain(thread_loop_c)•查询控制区的单元线•6.2.2LoopingoverFaceThreadsinaDomain(thread_loop_f)•查询控制区的面•6.2.3LoopingoverCellsinaCellThread(begin...end_c_loop)•查询单元线中的单元•6.2.4LoopingoverFacesinaFaceThread(begin...end_f_loop)•查询面单元中的面•6.2.5LoopingoverFacesonaCell(c_face_loop)•查询单元面•6.2.6LoopingoverNodesofaCell(c_node_loop)•查询单元节点6.2.1查询控制区的单元线当你想查询给定控制区的单元线时,你可以用thread_loop_c。它包含单独的说明,后面是对控制区的单元线所做操作,正如下面显示的包含在{}中。注意:thread_loop_c在执行上和thread_loop_f相似,参考6.2.2部分。Domain*domain;Thread*c_thread;thread_loop_c(c_thread,domain)/*loopsoverallcellthreadsindomain*/{}6.2.2查询控制区的面当你想要查询给定控制区的面时,你可以应用thread_loop_f。它包含单独的说明,后面是对控制区的面单元所做操作,正如下面显示的包含在{}中。注意:thread_loop_f在执行上和thread_loop_c相似,参考6.2.1部分。3第六章Utilities(工具)Thread*f_thread;Domain*domain;thread_loop_f(f_thread,domain)/*loopsoverallfacethreadsinadomain*/{}6.2.3查询单元线中的单元当你想要查询给定单元线c_thread上所有的单元时,你可以应用begin_c_loop和end_c_loop。它包含begin和endloop的说明,完成对单元线中单元所做的操作,定义包含在{}中。当你想查找控制区单元线的单元时,应用的loop全嵌套在thread_loop_c中。cell_tc;Thread*c_thread;begin_c_loop(c,c_thread)/*loopsovercellsinacellthread*/{}end_c_loop(c,c_thread)例子:/*Loopovercellsinathreadtogetinformationstoredincells.*/begin_c_loop(c,c_thread){/*C_Tgetscelltemperature.The+=willcauseallofthecelltemperaturestobeaddedtogether.*/temp+=C_T(c,c_thread);}4第六章Utilities(工具)end_c_loop(c,c_thread)}6.2.4查询面线中的面当你想要查找给定面线f_thread的所有的面时,你可以用begin_f_loopandend_f_loop。它包含begin和endloop的说明,完成对面线中面单元所做的操作,定义包含在{}中。当你想查找控制区面线的所有面时,应用的loop全嵌套在thread_loop_f中。face_tf;Thread*f_thread;begin_f_loop(f,f_thread)/*loopsoverfacesinafacethread*/{}end_f_loop(f,f_thread)例子:/*Loopoverfacesinafacethreadtogettheinformationstoredonfaces.*/begin_f_loop(f,f_thread){/*F_Tgetsfacetemperature.The+=willcauseallofthefacetemperaturestobeaddedtogether.*/temp+=F_T(f,f_thread);}end_f_loop(f,f_thread)6.2.5查询单元中的面5第六章Utilities(工具)下面函数用以查询给定单元中所有面。包含单独的查询说明,后面是所做的操作包含在{}。face_tf;Thread*tf;intn;c_face_loop(c,t,n)/*loopsoverallfacesonacell*/{...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查询单元节点(c_node_loop)下面函数用以查询给定单元中所有节点。包含单独的查询说明,后面是所做的操作包含在{}。6第六章Utilities(工具)cell_tc;Thread*t;intn;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.1LoopingoverPhaseDomainsinaMixture(sub_domain_loop)•查询混合物中的相控制区•6.3.2LoopingoverPhaseThreadsinaMixture(sub_thread_loop)•查询混合物中的相线7第六章Utilities(工具)•6.3.3LoopingoverPhaseCellThreadsinaMixture(mp_thread_loop_c)•查询混合物中的相单元线•6.3.4LoopingoverPhaseFaceThreadsinaMixture(mp_thread_loop_f)•查询混合物中的相的面线6.3.1LoopingoverPhaseDomainsinaMixture6.3.1查询混合物中相的控制区(sub_domain_loop)sub_domain_loop宏用于查询混合物控制区的所有相的子区。这个宏查询并在混合物控制区给每个相区定义指针以及相关的phase_domain_index。正如3.11部分所讨论的,控制区需要指针,在每个相中都有权访问部分数据。注意:sub_domain_loop宏在执行中和sub_thread_loop宏是相似的,参考6.3.2部分。intphase_domain_index;*/indexofsubdomainpointers*/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-leveldomain的指针,mixture_domain是mixture-leveldomain的指针。当你想用DEFINE宏时,mixture_domain(包含控制区变量e.g.,DEFINE_ADJUST)通过FLUENT求解器自动传递给你的UDF,混合物就和你的UDF相关了。如果mixture_domain没有显式地传递给你的UDF,你应用另外一个宏来恢复它(e.g.,Get_Domain(1)beforecallingsub_domain_loop(参考6.5.1部分)。phase_domain_index是子区指针所引号,phase_domain_index是初始相地索8第六章Utilities(工具)引号为0,混合物中其它相依次加1。注意:subdomain和phase_domain_index是在sub_domain_loop宏定义中初始化的。例子:下列被集成在UDF中的语句在求解过程中补充说明一个相的体积分数。它在求解过程的开始执行。这个函数建立一个中心在0.5,0.5,0.5,半径为0.25的球形体。第二个相的体积分数1被补充说明到球形体内的单元中,但是第二个相在其他单元中的体积分数为0。/*****************************************************************//*UDFforinitializingphasevolumefraction*//*****************************************************************/#includeudf.h/*domainpointerthatispassedbyINITfunctionismixturedomain*/DEFINE_INIT(my_init_function,mixt