第10章应用举例第10章应用举例本章包含了FLUENT中UDFs的应用例子。10.1边界条件10.2源项10.3物理属性10.4反应速率(ReactingRates)10.5用户定义标量(User_DefinedScalars)10.1边界条件这部分包含了边界条件UDFs的两个应用。两个在FLUENT中都是作为解释式UDFs被执行的。10.1.1涡轮叶片的抛物线速度入口分布要考虑的涡轮叶片显示在Figure10.1.1中。非结构化网格用于模拟叶片周围的流场。区域从底部周期性边界延伸到顶部周期性边界,左边是速度入口,右边是压力出口。Figure10.1.1:TheGridfortheTurbineVaneExample常数x速度应用于入口的流场与抛物线x速度应用于入口的流场作了比较。当采用分段第10章应用举例线性分布的型线的应用是有效的对边界型线选择,多项式的详细说明只能通过用户定义函数来完成。常数速度应用于流场入口的结果显示在Figure10.1.2和Figure10.1.3中。当流动移动到涡轮叶片周围时初始常速度场被扭曲。Figure10.1.2:VelocityMagnitudeContoursforaConstantInletxVelocityFigure10.1.3:VelocityVectorsforaConstantInletxVelocity现在入口x速度将用以下型线描述:第10章应用举例这里变量在人口中心是0.0,在顶部和底部其值分别延伸到y0745.0±。这样x速度在入口中心为20m/sec,在边缘为0。UDF用于传入入口上的这个抛物线分布。C源代码(vprofile.c)显示如下。函数使用了Section5.3中描述的Fluent提供的求解器函数。/***********************************************************************//*vprofile.c*//*UDFforspecifyingsteady-statevelocityprofileboundarycondition*//***********************************************************************/#includeudf.hDEFINE_PROFILE(inlet_x_velocity,thread,position){realx[ND_ND];/*thiswillholdthepositionvector*/realy;face_tf;begin_f_loop(f,thread){F_CENTROID(x,f,thread);y=x[1];F_PROFILE(f,thread,position)=20.-y*y/(.0745*.0745)*20.;}end_f_loop(f,thread)}函数,被命名为inlet_x_velocity,使用了DEFINE_PROFILE定义并且有两个自变量:thread和position。Thread是一个指向面的thread的指针,position是一个整数,它是每个循环(loop)内为变量设置的数值标签。第10章应用举例函数通过声名变量f作为face_t的数据类型。一维数组x和变量y被定义为real数据类型。循环宏用于循环区域内每个面来创建型线,或数据数组。每个循环内,F_CENTROIDS为带指标f的面输出面质心(数组x)的值,指标f在被thread指向的线(thread)上。存储在x[1]中的y坐标用于为变量y赋值,然后用于计算x速度。这个值接着被分配到F_PROFILE,使用整数position(在你从VelocityInlet面板中选择的UDF作为x速度的边界条件的基础上通过求解器传递给它)来设置内存中x速度面值。为了在FLUENT中使用这个解释式UDF,你必须首先编译它。DefineUser-DefinedFunctionsInterpreted...在InterpretedUDFs面板中,在SourceFileName区域命名你的函数。如果必要,在CPPCommandName区域输入你的C预处理程序类型和在StackSize下输入堆栈大小。打开DisplayAssemblyListing在你的控制台窗口中能看到汇编列表,当函数编译时。点击Compile然后Close面板。为了选择这个用户定义函数作为所选区域的速度边界条件,打开VelocityInlet面板。第10章应用举例在X-Velocity下拉列表下,选择udfinlet_x_velocity,这个名字在上面已经命名给函数。这个函数将被使用,而不是出现在X-Velocity区域的0值(在这个例子中)。点OK接受这个新边界条件并关闭面板。在求解运行到收敛之后,获得了一个修正的速度场如Figure10.1.4and10.1.5所示。速度场在入口中心显示了最大值,到边缘上降为0。Figure10.1.4:VelocityMagnitudeContoursforaParabolicInletxVelocity第10章应用举例Figure10.1.5:VelocityVectorsforaParabolicInletxVelocity10.1.2管内流动的瞬态速度入口分布这个例子中,瞬时的周期性的速度边界条件使用UDF应用于管子的入口。速度形式为:(10.1.1)管子长1m,半径为0.2m。假设充满密度为1kg/m3和粘度为kg/m-s的空气。空气速度关于平衡值v的波动振幅为5m/s,频率为10rad/s。5102−×sm/200=速度分布UDF(unsteady.c)的源代码显示如下。/**********************************************************************//*unsteady.c*//*UDFforspecifyingatransientvelocityprofileboundarycondition*//**********************************************************************/#includeudf.hDEFINE_PROFILE(unsteady_velocity,thread,position)第10章应用举例{face_tf;begin_f_loop(f,thread){realt=RP_Get_Real(flow-time);F_PROFILE(f,thread,position)=20.+5.0*sin(10.*t);}end_f_loop(f,thread)}函数,被命名为unsteady_velocity,使用DEFINE_PROFILEmacro定义。TheutilityRP_Get_Real(flow-time)用于访问real流动时间,它被分配给变量t。(RP_Get_Real的详细内容见Section6.9)。在你编译这个UDF之前,你必须在Solver面板中指定为非稳态流动计算。DefineModelsSolver...接下来你将打开InterpretedUDFs面板。在SourceFileName下面的文本框内输入函数的名字,如果必要,还有你的C预处理程序的名字。打开DisplayAssemblyListing。点击Compile然后关闭面板。DefineUser-DefinedFunctionsInterpreted...由UDF定义的正弦速度边界条件现在可选为入口区域的X-Velocity。在第10章应用举例X-Velocity面板中,在X-Velocity区域右边的下拉列表中选择udfunsteady_velocity,并点击OK。时间步参数在Iterate面板中设置。SolveIterate...在这个例子中,使用了0.0314的TimeStepSize,因此在入口速度一个完整的震第10章应用举例荡周期内将完成20个时间步。在每个时间步内执行的迭代次数被限制为20。在求解的早期阶段这个迭代次数不足以获得收敛的流场,但是在通过几个时间步之后,很可能导致收敛的时间步。UDFProfileUpdateInterval被设置为1因此每次迭代速度都被更新。在完成了60个时间步之后(或3个周期),你可以检查跨越压力出口由振荡入口条件引起速度数量级。为了在计算阶段收集这个信息,在开始迭代之前打开SurfaceMonitors面板。SolveMonitorsSurface...增加SurfaceMonitors的指标到1。这将使你定义monitor-1(如果需要,你可重命名,在Name下的文本输入框内)的参数。选择Plot,所以所选的数量将作为计算的收益被画出来。选择Print在控制台窗口来看所选数的变化值。选择Write,因而信息将被写入文件,它将被给一个名字为monitor-1.out。(如果你改变了monitor的名字,这个名字将用作输出文件的前缀)。在Every下面,你可选择Iteration,TimeStep,orFlowTime。为了监视每个时间步的结果,你应选择TimeStep选项。通过点击Define...你可在DefineSurfaceMonitor面板中指定被监视的数量。第10章应用举例在这个例子中,在ReportOf下的下拉列表中选择Velocity...andVelocityMagnitude。报告的区域是pressure-outlet-5,,在Surfaces列表中选择它。Area-WeightedAverage在ReportType的下拉列表中选择,FlowTime在XAxis的下拉列表中选择。一旦完成了你要求的迭代次数,监视器应出现在所选绘图窗口中。作为选择,你可通过打开FileXYPlot面板读入文件。PlotFile...你可通过在Files下面的文本框中输入它的名字来读取输出文件和选择这个文件并点击Add....,然后点击Plot,你可获得Figure10.1.6的图形显示。第10章应用举例Figure10.1.6:AverageVelocityMagnitudeatthePressureOutlet这个图精细地显示了速度以期望的振幅值5m/s围绕平衡值20m/s上下振荡。10.2源项这部分包含了源项UDF的应用。在FLUENT中它是作为解释式UDF被执行的。10.2.1给管道流动添加动量源项(AddingaMomentumSourcetoaDuctFlow)当使用UDF模拟源项时,理解函数调用的内容是很重要的。当你增加了一个源项,它在单元上执行全局的循环时,FLUENT将调用你的函数。你的函数应只计算源项并返回它到求解器。在这个例子中,动量源项将被添加到2D笛卡儿管道流动中。管道长4m,宽2m,使用通过中心线的对称边界条件来模拟。液体金属(其属性列举在表10.2.1中)在290K温度下从左边以1mm/s的速度进入管道。在金属沿着管道前进了0.5m之后,它受到了冷壁面的冷却,壁面温度保持在280K。为了模拟金属的凝固,只要它的温度一降到288K以下,动量源项就应用于金属。动量源项是与速度的x分量v成比例的,并有相反的符号:xSx=-Cvx(10.2.1)这里C是常数。当液体凝固时,它的运动将减小到0,模拟的是固体的形成。(在这个例子中,能量方程不能用来解决凝固潜热。速度场只能作为凝固区域指第10章应用举例示来使用)。为了提高求解的稳定性和收敛性,求解器应线性化源项。为了能使求解器做到这点,你必须在你的UDF中以导数的形式指定源项和求解变量之间的依赖关系。源项S只依赖于求解变量v。它关于v的导数为:xxx(10.2.2)下面的UDF指定了源项和它的导数:Table10.2.1:PropertiesoftheLiquidMetalPropertyValueDensity8000kg/m3Viscosity5.5k