FLUENT udf中文资料ch6.docx

上传人:b****4 文档编号:11945491 上传时间:2023-04-16 格式:DOCX 页数:32 大小:33.45KB
下载 相关 举报
FLUENT udf中文资料ch6.docx_第1页
第1页 / 共32页
FLUENT udf中文资料ch6.docx_第2页
第2页 / 共32页
FLUENT udf中文资料ch6.docx_第3页
第3页 / 共32页
FLUENT udf中文资料ch6.docx_第4页
第4页 / 共32页
FLUENT udf中文资料ch6.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

FLUENT udf中文资料ch6.docx

《FLUENT udf中文资料ch6.docx》由会员分享,可在线阅读,更多相关《FLUENT udf中文资料ch6.docx(32页珍藏版)》请在冰豆网上搜索。

FLUENT udf中文资料ch6.docx

FLUENTudf中文资料ch6

第六章.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

其他各种工具

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头文件中。

 

∙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;

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+=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;

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+=willcausealloftheface

temperaturestobeaddedtogether.*/

temp+=F_T(f,f_thread);

}

end_f_loop(f,f_thread)

6.2.5查询单元中的面

下面函数用以查询给定单元中所有面。

包含单独的查询说明,后面是所做的操作包含在{}。

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)

下面函数用以查询给定单元中所有节点。

包含单独的查询说明,后面是所做的操作包含在{}。

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)

∙查询混合物中的相线

∙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指针与进口区域相关,那么这个宏将提供给进口区域每个相面线指针。

intphase_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-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;

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.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-LevelThr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1