fluent UDF第六章 工具Word下载.docx
- 文档编号:17184458
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:25
- 大小:33.47KB
fluent UDF第六章 工具Word下载.docx
《fluent UDF第六章 工具Word下载.docx》由会员分享,可在线阅读,更多相关《fluent UDF第六章 工具Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
从求解器中导入到你的UDFs中特殊的控制区和线性结构,依赖于你所使用的DEFINE宏和相关的控制区函数。
(通过图形用户界面和用户定义的源代码)
它或许也依赖于你所使用的多相流模型。
将控制区的结构传递给DEFINE_INIT和DEFINE_ADJUST函数,但是它与多相流模型是相互独立的。
这些函数始终被传递给与混合物有关的控制区结构。
DEFINE_ON_DEMANDUDFs没有被传递给任何控制区。
如果你的PDF没有显式地传给你的函数所需要的线性的或者控制区的结构,那么你可以利用本章提供的宏工具修复。
提供的许多宏使你的函数可以寻找到给定线和区的所有的网格点和面。
6.2一般目的的循环宏
下面这些循环的宏可以用于FLUENT单相和多相模型的UDFs中。
这些宏的定义包含再mem.h头文件中。
∙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部分。
Thread*f_thread;
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;
begin_c_loop(c,c_thread)/*loopsovercellsinacellthread*/
}
end_c_loop(c,c_thread)
例子:
/*Loopovercellsinathreadtogetinformationstoredincells.*/
begin_c_loop(c,c_thread)
/*C_Tgetscelltemperature.The+=willcauseallofthecell
temperaturestobeaddedtogether.*/
temp+=C_T(c,c_thread);
end_c_loop(c,c_thread)
}
6.2.4查询面线中的面
当你想要查找给定面线f_thread的所有的面时,你可以用begin_f_loopandend_f_loop。
它包含begin和endloop的说明,完成对面线中面单元所做的操作,定义包含在{}中。
当你想查找控制区面线的所有面时,应用的loop全嵌套在thread_loop_f中。
face_tf;
begin_f_loop(f,f_thread)/*loopsoverfacesinafacethread*/
end_f_loop(f,f_thread)
/*Loopoverfacesinafacethreadtogettheinformationstoredonfaces.*/
begin_f_loop(f,f_thread)
/*F_Tgetsfacetemperature.The+=willcausealloftheface
temp+=F_T(f,f_thread);
end_f_loop(f,f_thread)
6.2.5查询单元中的面
下面函数用以查询给定单元中所有面。
包含单独的查询说明,后面是所做的操作包含在{}。
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)
下面函数用以查询给定单元中所有节点。
Thread*t;
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)
∙查询混合物中的相线
∙6.3.3LoopingoverPhaseCellThreadsinaMixture(mp_thread_loop_c)
∙查询混合物中的相单元线
∙6.3.4LoopingoverPhaseFaceThreadsinaMixture(mp_thread_loop_f)
∙查询混合物中的相的面线
6.3.1LoopingoverPhaseDomainsinaMixture
6.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是初始相地索引号为0,混合物中其它相依次加1。
subdomain和phase_domain_index是在sub_domain_loop宏定义中初始化的。
下列被集成在UDF中的语句在求解过程中补充说明一个相的体积分数。
它在求解过程的开始执行。
这个函数建立一个中心在0.5,0.5,0.5,半径为0.25的球形体。
第二个相的体积分数1被补充说明到球形体内的单元中,但是第二个相在其他单元中的体积分数为0。
/*****************************************************************/
/*UDFforinitializingphasevolumefraction*/
#include"
udf.h"
/*domainpointerthatispassedbyINITfunctionismixturedomain*/
DEFINE_INIT(my_init_function,mixture_domain)
{
intphase_domain_index;
cell_tcell;
Thread*cell_thread;
Domain*subdomain;
realxc[ND_ND];
/*loopoverallsubdomains(phases)inthesuperdomain(mixture)*/
sub_domain_loop(subdomain,mixture_domain,phase_domain_index)
/*loopifsecondaryphase*/
if(DOMAIN_ID(subdomain)==2)
/*loopoverallcellthreadsinthesecondaryphasedomain*/
thread_loop_c(cell_thread,subdomain)
/*loopoverallcellsinsecondaryphasecellthreads*/
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)
/*setvolumefractionto1forcentroid*/
C_VOF(cell,cell_thread)=1.;
else
/*otherwiseinitializetozero*/
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指针与进口区域相关,那么这个宏将提供给进口区域每个相面线指针。
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-levelthread的指针。
当你用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;
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*face_threads;
mp_thread_loop_f(face_threads,mixture_domain,pt)
mp_thread_loop_f的自变量是face_threads,mixture_domain,和pt。
face_threads是面线的指针,是混合物等值线控制区的指针。
pt是包含相等值线的指针数组。
mp_thread_loop_f是典型的用于begin_f_loop中。
begin_f_loop查询网格线内的所有网格。
当begin_f_loop嵌套在mp_thread_loop_f中,你就可以查询混合物中相单元线的所有网格了。
6.4SettingFaceVariables(F_PROFILE)
6.4设置面变量
当你要设置面的变量的值时,应用F_PROFILE宏。
当你要生成边界条件的外形或存储新的变量值时,自动调用这一函数。
F_PROFILE全部宏定义参考mem.h文件。
.
宏:
F_PROFILE(f,t,n)
自变量:
face_tf
Thread*t
intn
函数返回值:
void
F_PROFILE的自变量是f,面的索引号是face_t;
t,面上线的指针,还有一个整数n。
这些变量通过FLUENT的求解器自动传递给你的UDF。
你不必给他们赋值。
整数n是要在边界上设定的变量标志符。
例如:
进口边界包含总压和总温,二者都在用户定义函数中定义。
进口边界的变量在FLUENT赋予整数0,其它赋予1。
当你在FLUENT的进口边界面板中定义边界条件时,这些整数值由求解器设定。
6.5访问没有赋值的自变量
针对单相和多相的模型(比如定义源项,性质和外形),大多数标准的UDF,你的函数所需要的变量(e.g.,domainorthreadpointers)在求解过程中通过求解器自动做为自变量直接传递给你的UDF。
例如,如果你的UDF定义了特殊边界区域(使用DEFINE_PROFILE)的外形,在FLUENT的边界条件面板中,你的UDF就和相和混合物相关联了,在执行时通过求解器,合适的相和混合物变量传递给你的函数。
然而,并非所有的UDF都直接把函数所需要的自变量传递给求解器。
回想一下,例如DEFINE_ADJUST和DEFINE_INITUDFs传递给混合物控制区变量,这里DEFINE_ON_DEMANDUDFs是没有被传递的自变量。
这部分提供了通过DEFINE函数访问没有被直接传递给UDF文件的工具。
∙6.5.1Get_Domain
∙获得控制区
∙6.5.2PhaseDomainPointerUsingthePhaseDomainIndex(DOMAIN_SUB_DOMAIN)
∙通过相控制区索引号使用相控制区指针
∙6.5.3Phase-Level
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fluent UDF第六章 工具 UDF 第六