完整版Fluent流体UDF中文教程word板doc.docx

上传人:b****8 文档编号:10127127 上传时间:2023-05-23 格式:DOCX 页数:142 大小:145.39KB
下载 相关 举报
完整版Fluent流体UDF中文教程word板doc.docx_第1页
第1页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第2页
第2页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第3页
第3页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第4页
第4页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第5页
第5页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第6页
第6页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第7页
第7页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第8页
第8页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第9页
第9页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第10页
第10页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第11页
第11页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第12页
第12页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第13页
第13页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第14页
第14页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第15页
第15页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第16页
第16页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第17页
第17页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第18页
第18页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第19页
第19页 / 共142页
完整版Fluent流体UDF中文教程word板doc.docx_第20页
第20页 / 共142页
亲,该文档总共142页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整版Fluent流体UDF中文教程word板doc.docx

《完整版Fluent流体UDF中文教程word板doc.docx》由会员分享,可在线阅读,更多相关《完整版Fluent流体UDF中文教程word板doc.docx(142页珍藏版)》请在冰点文库上搜索。

完整版Fluent流体UDF中文教程word板doc.docx

完整版Fluent流体UDF中文教程word板doc

第四章DEFINE宏

本章介绍了Fluent公司所提供的预定义宏,我们需要用这些预定义宏来定义UDF。

在这里这些宏就是指DEFINE宏。

本章由如下几节组成:

∙4.1概述

∙4.2通用解算器DEFINE宏

∙4.3模型指定DEFINE宏

∙4.4多相DEFINE宏

∙4.5离散相模型DEFINE宏

4.1概述

DEFINE宏一般分为如下四类:

∙通用解算器

∙模型指定

∙多相

∙离散相模型(DPM)

对于本章所列出的每一个DEFINE宏,本章都提供了使用该宏的源代码的例子。

很多例子广泛的使用了其它章节讨论的宏,如解算器读取(第五章)和utilities(Chapter 6)。

需要注意的是,并不是本章所有的例子都是可以在FLUENT中执行的完整的函数。

这些例子只是演示一下如何使用宏。

除了离散相模型DEFINE宏之外的所有宏的定义都包含在udf.h文件中。

离散相模型DEFINE宏的定义包含在dpm.h文件中。

为了方便大家,所有的定义都列于附录A中。

其实udf.h头文件已经包含了dpm.h文件,所以在你的UDF源代码中就不必包含dpm.h文件了。

注意:

在你的源代码中,DEFINE宏的所有参变量必须在同一行,如果将DEFINE声明分为几行就会导致编译错误。

4.2通用解算器DEFINE宏

本节所介绍的DEFINE宏执行了FLUENT中模型相关的通用解算器函数。

表4.2.1提供了FLUENT中DEFINE宏,以及这些宏定义的功能和激活这些宏的面板的快速参考向导。

每一个DEFINE宏的定义都在udf.h头文件中,具体可以参考附录A。

∙DEFINE_ADJUST(4.2.1节)

∙DEFINE_INIT(4.2.2节)

∙DEFINE_ON_DEMAND(4.2.3节)

∙DEFINE_RW_FILE(4.2.4节)

表4.2.1:

通用解算器DEFINE宏的快速参考向导

功能

DEFINE宏

激活该宏的面板

处理变量

DEFINE_ADJUST

User-DefinedFunctionHooks

初始化变量

DEFINE_INIT

User-DefinedFunctionHooks

异步执行

DEFINE_ON_DEMAND

ExecuteOnDemand

读写变量到……

DEFINE_RW_FILE

User-DefinedFunctionHooks

Case和data文件

 

 

∙4.2.1DEFINE_ADJUST

∙4.2.2DEFINE_INIT

∙4.2.3DEFINE_ON_DEMAND

∙4.2.4DEFINE_RW_FILE

4.2.1DEFINE_ADJUST

功能和使用方法的介绍

DEFINE_ADJUST是一个用于调节和修改FLUENT变量的通用宏。

例如,你可以用DEFINE_ADJUST来修改流动变量(如:

速度,压力)并计算积分。

你可以用它来对某一标量在整个流场上积分,然后在该结果的基础上调节边界条件。

在每一步迭代中都可以执行用DEFINE_ADJUST定义的宏,并在解输运方程之前的每一步迭代中调用它。

参考图3.3.1和3.3.2for可以大致了解一下当DEFINE_ADJUST被调用时FLUENT解的过程

DEFINE_ADJUST(name,d)

参变量类型

Domain*d

返回的功能

void

DEFINE_ADJUST有两个参变量:

name和d。

name是你所指定的UDF的名字。

当你的UDF编译并连接时,你的FLUENT图形用户界面就会显示这个名字,此时你就可以选择它了。

d是FLUENT解算器传给你的UDF的变量。

D是一个指向区域的指针,调节函数被应用于这个区域上。

区域变量提供了存取网格中所有单元和表面的线程。

对于多相流,由解算器传给函数的区域指针是混合层区域指针。

DEFINE_ADJUST函数不返回任何值给解算器。

例子1

下面的UDF名字是adjust,它使用DEFINE_ADJUST对湍流耗散在整个区域上积分。

然后这个值会打印在控制台窗口中。

每一步迭代都会调用这个UDF。

它可以作为解释程序或者编译后的UDF在FLUENT中执行。

/*******************************************************************/

/*积分湍流耗散并将其打印到控制台窗口的UDF*/

/********************************************************************/

#include"udf.h"

DEFINE_ADJUST(my_adjust,d)

{

Thread*t;

/*Integratedissipation.*/

realsum_diss=0.;

cell_tc;

thread_loop_c(t,d)

{

begin_c_loop(c,t)

sum_diss+=C_D(c,t)*

C_VOLUME(c,t);

end_c_loop(c,t)

}

printf("Volumeintegralofturbulentdissipation:

%g\n",sum_diss);

}

例子:

2

下面UDF的名字是adjust_fcn,它用DEFINE_ADJUST指定了某一自定义标量是另一自定义标量的梯度的函数。

该函数在每一次迭代中都会被调用。

它可以作为编译后的UDF在FLUENT中执行。

/********************************************************************/

/*UDFfordefininguser-definedscalarsandtheirgradients*/

/********************************************************************/

#include"udf.h"

DEFINE_ADJUST(adjust_fcn,d)

{

Thread*t;

cell_tc;

realK_EL=1.0;

/*Donothingifgradientisn'tallocatedyet.*/

if(!

Data_Valid_P())

return;

thread_loop_c(t,d)

{

if(FLUID_THREAD_P(t))

{

begin_c_loop_all(c,t)

{

C_UDSI(c,t,1)+=K_EL*NV_MAG2(C_UDSI_G(c,t,0))*C_VOLUME(c,t);

}

end_c_loop_all(c,t)

}

}

}

ActivatinganAdjustUDFinFLUENT

在为adjustUDF的源代码进行编译和连接之后,你可以在FLUENT中的User-DefinedFunctionHooks面板激活这个函数。

更详细的内容请参阅8.1.1节。

4.2.2DEFINE_INIT

功能和使用方法的介绍

你可以用DEFINE_INIT宏来定义一组解的初始值。

DEFINE_INIT完成和修补一样的功能,只是它以另一种方式——UDF来完成。

每一次初始化时DEFINE_INIT函数都会被执行一次,并在解算器完成默认的初始化之后立即被调用。

因为它是在流场初始化之后被调用的,所以它最常用于设定流动变量的初值。

参考图3.3.1和3.3.2关于FLUENT解过程的介绍可以看出什么时候调用DEFINE_INIT函数。

Macro:

DEFINE_INIT(name,d)

Argumenttypes:

Domain*d

Functionreturns:

void

DEFINE_INIT有两个参变量:

name和d。

name是你所指定的UDF的名字。

当你的UDF编译并连接时,你的FLUENT图形用户界面就会显示这个名字,此时你就可以选择它了。

d是FLUENT解算器传给你的UDF的变量。

disapointertothedomainoverwhichtheinitializationfunctionistobeapplied.Thedomainargumentprovidesaccesstoallcellandfacethreadsinthemesh.Formultiphaseflows,thedomainpointerthatispassedtothefunctionbythesolveristhemixture-leveldomainpointer.ADEFINE_INITfunctiondoesnotreturnavaluetothesolver.

例子

下面的UDF名字是my_init_func,它在某一个解中初始化了流动变量。

在解过程开始时它被执行了一次。

它可以作为解释程序或者编译后的UDF在FLUENT中执行。

/*******************************************************************/

/*UDFforinitializingflowfieldvariables*/

/***********************************************************************/

#include"udf.h"

DEFINE_INIT(my_init_function,domain)

{

cell_tc;

Thread*t;

realxc[ND_ND];

/*loopoverallcellthreadsinthedomain*/

thread_loop_c(t,domain)

{

/*loopoverallcells*/

begin_c_loop_all(c,t)

{

C_CENTROID(xc,c,t);

if(sqrt(ND_SUM(pow(xc[0]-0.5,2.),

pow(xc[1]-0.5,2.),

pow(xc[2]-0.5,2.)))<0.25)

C_T(c,t)=400.;

else

C_T(c,t)=300.;

}

end_c_loop_all(c,t)

}

}

ThemacroND_SUM(a,b,c)thatisusedintheUDFcomputesthesumofthefirsttwoarguments(2D)orallthreearguments(3D).Itisusefulforwritingfunctionsinvolvingvectoroperationssothatthesamefunctioncanbeusedfor2Dand3D.Fora2Dcase,thethirdargumentisignored.SeeChapter 5foradescriptionofpredefinedsolveraccessmacros(e.g.,C_CENTROID)andChapter 6forutilitymacros(e.g.,ND_SUM).

ActivatinganInitializationUDFinFLUENT

编译并连接UDF源代码之后。

youcanactivatethefunctionintheUser-DefinedFunctionHookspanelinFLUENT.SeeSection 8.1.2formoredetails.

4.2.3DEFINE_ON_DEMAND

功能和使用方法的介绍

你可以使用DEFINE_ON_DEMANDmacrotodefineaUDFtoexecuteondemandinFLUENT,ratherthanhavingFLUENTcallitautomaticallyduringthecalculation.YourUDFwillbeexecutedimmediately,onceitisactivated,butitisnotaccessiblewhilethesolverisiterating.NotethatthedomainpointerdisnotexplicitlypassedasanargumenttoDEFINE_ON_DEMAND.Therefore,ifyouwanttousethedomainvariableinyouron-demandfunction,youwillneedtofirstretrieveitusingtheGet_DomainutilityprovidedbyFluent(shownin例子:

below).SeeSection 6.5.1fordetailsonGet_Domain.

Macro:

DEFINE_ON_DEMAND(name)

Argumenttypes:

none

Functionreturns:

void

ThereisonlyoneargumenttoDEFINE_ON_DEMAND:

name.nameisthenameoftheUDF,specifiedbyyou.当你的UDF编译和连接时,你为函数所选择的名字会在FLUENT图形用户界面中变得可见,且可被选择。

ADEFINE_ON_DEMANDfunctiondoesnotreturnavaluetothesolver.

例子:

下面的UDF名字为demand_calc,计算并打印出当前数据场的最小、最大和平均温度。

Itthencomputesatemperaturefunction

andstoresitinuser-definedmemorylocation0(whichisallocatedasdescribedinSection 6.7).OnceyouexecutetheUDF(asdescribedinSection 8.1.3),thefieldvaluesforf(T)willbeavailableinthedrop-downlistsinpostprocessingpanelsinFLUENT.Youcanselectthisfieldbychoosingudm-0intheUserDefinedMemory...category.IfyouwriteadatafileafterexecutingtheUDF,theuser-definedmemoryfieldwillbesavedtothedatafile.TheUDFcanbeexecutedasaninterpretedorcompiledUDFinFLUENT.

/**********************************************************************/

/*UDFtocalculatetemperaturefieldfunctionandstorein*/

/*user-definedmemory.Alsoprintmin,max,avgtemperatures.*/

/**********************************************************************/

#include"udf.h"

DEFINE_ON_DEMAND(on_demand_calc)

Domain*d;/*declaredomainpointersinceitisnotpasseda*/

/*argumenttoDEFINEmacro*/

{

realtavg=0.;

realtmax=0.;

realtmin=0.;

realtemp,volume,vol_tot;

Thread*t;

cell_tc;

d=Get_Domain

(1);/*GetthedomainusingFluentutility*/

/*Loopoverallcellthreadsinthedomain*/

thread_loop_c(t,d)

{

/*Computemax,min,volume-averagedtemperature*/

/*Loopoverallcells*/

begin_c_loop(c,t)

{

volume=C_VOLUME(c,t);/*getcellvolume*/

temp=C_T(c,t);/*getcelltemperature*/

if(temp

if(temp>tmax||tmax==0.)tmax=temp;

vol_tot+=volume;

tavg+=temp*volume;

}

end_c_loop(c,t)

tavg/=vol_tot;

printf("\nTmin=%gTmax=%gTavg=%g\n",tmin,tmax,tavg);

/*Computetemperaturefunctionandstoreinuser-definedmemory*/

/*(locationindex0)*/

begin_c_loop(c,t)

{

temp=C_T(c,t);

C_UDMI(c,t,0)=(temp-tmin)/(tmax-tmin);

}

end_c_loop(c,t)

}

}

Get_Domainisamacrothatretrievesthepointertoadomain.ItisnecessarytogetthedomainpointerusingthismacrosinceitisnotexplicitlypassedasanargumenttoDEFINE_ON_DEMAND.Thefunction,namedon_demand_calc,doesnottakeanyexplicitarguments.Withinthefunctionbody,thevariablesthataretobeusedbythefunctionaredefinedandinitializedfirst.Followingthevariabledeclarations,aloopingmacroisusedtoloopovereachcellthreadinthedomain.Withinthatloopanotherloopisusedtoloopoverallthecells.Withintheinnerloop,thetotalvolumeandtheminimum,maximum,andvolume-averagedtemperaturearecomputed.ThesecomputedvaluesareprintedtotheFLUENTconsole.Thenasecondloopovereachcellisusedtocomputethefunctionf(T)andstoreitinuser-definedmemorylocation0.RefertoChapter 5foradescriptionofpredefinedsolveraccessmacros(e.g.,C_T)andChapter 6forutilitymacros(e.g.,begin_c_loop).

ActivatinganOn-DemandUDFinFLUENT

Afteryouhavecompiledandlinkedthesourcecodeforyouron-demandUDF,youcanactivatethefunctionintheExecuteOnDemandpanelinFLUENT.SeeSection 8.1.3formoredetails.

4.2.4DEFINE_RW_FILE

功能和使用方法的介绍

你可以使用DEFINE_RW_FILEmacrotodefinecustomizedinformationthatyouwanttobewrittentoacaseordatafile,orreadfromacaseordatafile.Youcansaveandrestorecustomvariablesofanydatatypes(e.g.,integer,real,Boolean,structure)usingDEFINE_RW_FILE.Itisoftenusefultosavedynamicinformation(e.g.,numberofoccurrencesinconditionalsampling)whileyoursolutionisbeingcalculated,whichisanotheruseofthisfunction.Notethatthereadorderandthewriteordermustbethesamewhenyouusethisfunction.

Macro:

DEFINE_RW_FILE(na

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

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2