您好,欢迎访问三七文档
用户自定义函数FLUENT入门培训简介•什么是用户自定义函数(UDF)?–用户自定义函数,或UDF,是用户自编的程序,它可以动态的连接到Fluent求解器上来提高求解器性能。•标准C语言的库函数–Trigonometric,exponential,controlblocks,do-loops,filei/o等。•预定义宏–通过这些预定义宏,可以获得Fluent求解器得到的数据。•为什么要使用UDF?–标准界面及功能并不能满足每个用户的需要。•定制边界条件,定义材料属性,定义表面和体积反应率,定义FLUENT输运方程中的源项,用户自定义标量输运方程(UDS)中的源项扩散率函数等等。•在每次迭代的基础上调节计算值•(需要时)UDF的异步执行•方案的初始化。(s)SolveSpeciesSolveEnergyInitializeBeginLoopDBCSSolveOtherTransportEquationsasrequiredSolver?SolveMassContinuity;UpdateVelocitySolveU-MomentumSolveV-MomentumSolveW-MomentumSolveMass&MomentumSolveMass,Momentum,Energy,SpeciesUser-definedADJUSTSourcetermsSourcetermsSourcetermsSourceterms基础•单元和单元面被组合为一些区域(zones),这些区域规定了计算域(例如,边界条件、源项)–在UDF中,域(zones)用线(threads)来联系。–循环宏(loopingmacro)对线上的所有单元进行操作。•例如:用面循环宏访问面域3(zone3)(入口)上的563个面。–每个面的位置都通过对空间上的设置来计算表示•在用户操作界面中,可以自动调用UDF中定义的求解器变量•所有的求解器变量,都使用SI单位。•在FLUENT中运行UDF基础步骤如下:1.创建包涵UDF源代码的文件2.打开fluent,读入case/data文件3.解释或者编译UDF4.在FLUENT中激活UDF5.在计算平台(Iteratepanel)中设置UDF的更新频率6.开始计算例题-抛物线入流速度条件•二维弯管中,我们来定义一个抛物线入流速度条件•x方向上的速度用下面公式定义⎥⎥⎦⎤⎢⎢⎣⎡⎟⎠⎞⎜⎝⎛−=20745.0120)(yyu0=y)(yu第一步--准备源代码•函数inlet_x_velocity通过DEFINE_PROFILE宏来定义–所有UDF中的宏都使用DEFINE_开头。–inlet_x_velocity将会在用户操作界面中选择定义。–在DEFINE_PROFILE中,通过thread和nv分别对域和变量定义。–宏begin_f_loop能循环指向线上所有的面f•F_CENTROID宏表示单元x[]方向的向量•F_PROFILE宏代表面f上的速度分量#includeudf.h“DEFINE_PROFILE(inlet_x_velocity,thread,nv){floatx[3];/*Positionvector*/floaty;face_tf;begin_f_loop(f,thread){F_CENTROID(x,f,thread);y=x[1];F_PROFILE(f,thread,nv)=20.*(1.-y*y/(.0745*.0745));}end_f_loop(f,thread)}第三步--解释或编译UDF•解释UDF•把UDF源代码文件输入SourceFileName列表中。•点击Interpret。•FLUENT控制面板中将会显示汇编语言代码。•编译UDF•把UDF源代码文件输入SourceFiles列表中。•点击Build,创建UDF库函数。•点击Load,读取UDF库函数。•如果需要还能清除(unload)库函数DefineUser-DefinedFunctionsInterpreted…DefineUser-DefinedFunctionsCompiled…DefineUser-DefinedFunctionsManage…•既可以运行时通过读入和解释来调用函数,也可以通过使用FLUENT中的编译器把函数编译到一个公共的函数库。•比较解释和编译代码–解释•解释的程序只是保存在电脑内存中。•按“一个接一个”的基本顺序运行代码。•优势--不需要第三方编译器。•劣势--运行慢,占内存。–编译(详细内容请参阅FLUENT用户手册中的介绍)•UDF代码被一次性编译成机器语言(目标文件).•高效地运行UDFs。•创建能被求解器链接的函数库。•具备很多解释没有的功能,例如并行算法(mixedmodearithmetic)、结构申明(structurereferences)等。第四步--激活UDF•选择要使用UDF的窗口,例子中,我们打开边界条件设置窗口。•点击X-Velocity右边的下拉菜单,把Constant换成UDF函数。第五步和第六步--运行计算•在Iterate对话框中,可以改变UDFProfileUpdateInterval的值(默认值为1).–这个值用来控制UDF更新速度(如果是非定常,还可以是计算步数和计算步长)。•运行计算。例中的数值解•右图显示的是二维弯管中的速度场。•下图显示的是入口的速度矢量,注意使用的抛物线函数。宏•宏是FLUENT定义的函数。–UDF通过DEFINE_宏定义函数。–变量宏可以调用域上变量和单元信息。–工具宏具有循环功能,线指示器,向量和数值函数。•宏都被定义在头文件中(headerfile)–udf.h的头文件必须包涵在源代码中。#include“udf.h”–头文件必须在有效的工作路径中。•一般保存在Fluent.Inc/src/路径下•UDF用户手册中列出了所有经常使用的宏。HelpMoreDocumentation…宏•任何UDF都必须以DEFINE_宏开始:–18个通用解算器宏和13个离散相模型宏和多项宏(未列出):DEFINE_ADJUST(name,domain);通用目标UDF,每个计算步都被调用DEFINE_INIT(name,domain);初始化计算域变量DEFINE_ON_DEMAND(name);定义“根据需要运行”的函数DEFINE_RW_FILE(name,fp);用户读写case/data文件DEFINE_PROFILE(name,thread,index);definesboundaryprofiles定义边界条件DEFINE_SOURCE(name,cell,thread,dS,index);definessourceterms定义源项DEFINE_HEAT_FLUX(name,face,thread,c0,t0,cid,cir);definesheatflux定义热流通量DEFINE_PROPERTY(name,cell,thread);definesmaterialproperties定义材料属性DEFINE_DIFFUSIVITY(name,cell,thread,index);定义UDS和特殊的差分格式DEFINE_UDS_FLUX(name,face,thread,index);定义UDS通量项DEFINE_UDS_UNSTEADY(name,cell,thread,index,apu,su);定义UDS衰减项DEFINE_SR_RATE(name,face,thread,r,mw,yi,rr);定义面反应系数DEFINE_VR_RATE(name,cell,thread,r,mw,yi,rr,rr_t);定义vol反应系数DEFINE_SCAT_PHASE_FUNC(name,cell,face);definesscatteringphasefunctionforDOM定义DOM中相散射函数DEFINE_DELTAT(name,domain);定义非定常问题中的时间步长变量DEFINE_TURBULENT_VISCOSITY(name,cell,thread);定义湍流粘性计算方式DEFINE_TURB_PREMIX_SOURCE(name,cell,thread,turbflamespeed,source);定义湍动火焰速度DEFINE_NOX_RATE(name,cell,thread,nox);定义NOx中的产生和消失系数定义c为单元线(cellthread)face_tf;定义f为面线(facethread)Thread*t;t定义t为线指针Domain*d;d定义d为所有线指针thread_loop_c(t,d){}循环访问域d中单元线t上的所有单元thread_loop_f(t,d){}循环访问域d中面线t上的所有面begin_c_loop(c,ct){}end_c_loop(c,ct)循环访问单元线ct上的所有c单元begin_f_loop(f,ft){}end_f_loop(f,ft)循环访问面线ft上的所有f面c_face_loop(c,t,n){}循环访问线t上的所有面单元cThread
本文标题:用户自定义函数
链接地址:https://www.777doc.com/doc-5897958 .html