Fluent流体UDF中文教程word板88页.docx
- 文档编号:23933964
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:126
- 大小:120.98KB
Fluent流体UDF中文教程word板88页.docx
《Fluent流体UDF中文教程word板88页.docx》由会员分享,可在线阅读,更多相关《Fluent流体UDF中文教程word板88页.docx(126页珍藏版)》请在冰豆网上搜索。
Fluent流体UDF中文教程word板88页
第四章DEFINE宏
我国古代的读书人,从上学之日起,就日诵不辍,一般在几年内就能识记几千个汉字,熟记几百篇文章,写出的诗文也是字斟句酌,琅琅上口,成为满腹经纶的文人。
为什么在现代化教学的今天,我们念了十几年书的高中毕业生甚至大学生,竟提起作文就头疼,写不出像样的文章呢?
吕叔湘先生早在1978年就尖锐地提出:
“中小学语文教学效果差,中学语文毕业生语文水平低,……十几年上课总时数是9160课时,语文是2749课时,恰好是30%,十年的时间,二千七百多课时,用来学本国语文,却是大多数不过关,岂非咄咄怪事!
”寻根究底,其主要原因就是腹中无物。
特别是写议论文,初中水平以上的学生都知道议论文的“三要素”是论点、论据、论证,也通晓议论文的基本结构:
提出问题――分析问题――解决问题,但真正动起笔来就犯难了。
知道“是这样”,就是讲不出“为什么”。
根本原因还是无“米”下“锅”。
于是便翻开作文集锦之类的书大段抄起来,抄人家的名言警句,抄人家的事例,不参考作文书就很难写出像样的文章。
所以,词汇贫乏、内容空洞、千篇一律便成了中学生作文的通病。
要解决这个问题,不能单在布局谋篇等写作技方面下功夫,必须认识到“死记硬背”的重要性,让学生积累足够的“米”。
本章介绍了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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fluent 流体 UDF 中文 教程 word 88