FieldFunction培训教程CDAJ-China技术部FieldFunction介绍FieldFunction实例什么是FieldFunction?FieldFunction提供了在STAR-CCM+中存取求解器中的单元/边界数据的一种机制。FieldFunction在STAR-CCM+中有着十分广泛的应用。它可以实现绝大多数其它CFD软件中需要使用用户子程序才能实现的功能,而且不需要安装特别的编译器,有着虽使用简便但功能强大的特点。FieldFunction有什么用处?FieldFunction最常见的用处就是用来显示计算结果。例如想要显示某个壁面上的压力分布云图,这里,“压力”(Pressure)就是一个FieldFunction。FieldFunction更进一步的用处还可以用来定义边界和区域上的值、或者定义初始条件。此时一般需要用户事先编写好一个FieldFunction,然后把它应用到边界、区域或初始条件的设定中去。例如想要将一个速度入口边界的速度大小值赋成随着Y坐标呈抛物线规律变化,就需要先写一个满足这个规律的FieldFunction,然后将其应用到速度入口边界的设定中。FieldFunction的分类(1)从FieldFunction的生成方式来看,可分为SystemFieldFunction和UserFieldFunction两类。SystemFieldFunction是软件根据所选择的物理模型自动生成的。UserFieldFunction是用户基于已有的FieldFunction,再结合运算法则编写而成。UserFieldFunction图标(绿色的笔)SystemFieldFunction图标(黄色的笔)FieldFunction的分类(2)从FieldFunction的类型来看,可分为ScalarFieldFunction、VectorFieldFunction、ArrayFieldFunction和PositionFieldFunction四类。SystemFieldFunction的类型是自动生成时即已固定的;UserFieldFunction的类型需要用户具体指定。ScalarFieldFunctionScalarFieldFunction对应于一个具体的数值,可以是正数、负数或者零。温度、压力等标量值是ScalarFieldFunction。12413①函数名,在ScalarScene标尺栏上的名称。②函数类型。③量纲。④可以参考FunctionName,通过$Temperature取得温度值。VectorFieldFunctionVectorFieldFunction定义的是一个可以在不同坐标系下转换的矢量。速度、单元质心坐标等是VectorFieldFunction。①函数名,在VectorScene标尺栏上的名称。②函数类型。③量纲。④可以参考FunctionName,通过$$Velocity取得速度的三个分量。12413X分量$$Velocity[0]Y分量$$Velocity[1]Z分量$$Velocity[2]VectorFieldFunction当VectorFieldFunction在Scalar标尺栏出现可选的时候,其值的大小及各个分量可以选择成如下形式:MagnitudeCartesianorLaboratory:ijkCylindrical:RadialTangentialAxialSpherical:RadialPolarAzimuthalArrayFieldFunctionArrayFieldFunction定义的是一个三维数组,它不具有坐标系转换的功能。当ArrayFieldFunction在Scalar标尺栏出现可选的时候,其值的大小及各个分量可以选择成如下形式:Magnitude[X-componentvalue][Y-componentvalue][Z-componentvalue]PositionFieldFunctionPositionFieldFunction定义的是一个可以在不同坐标系下转换的位置。当PositionFieldFunction在Scalar标尺栏出现可选的时候,其值的大小及各个分量可以选择成如下形式:MagnitudeCartesianorLaboratory:XYZCylindrical:rthetazSpherical:rthetaphi变量的参照方法(1)使用已有的FieldFunction作为参照变量定义新的UserFieldFunction时,针对不同的已有FieldFunction类型,需要使用不同的参照方法。具体为参照ScalarFieldFunction类型时,需要在其FunctionName前添加一个美元符号;VectorFieldFunction类型前添加两个美元符号。Scalar值:$SCALARVector值:$$VECTOR[0],$$VECTOR[1],$$VECTOR[2]如果需要参照的变量名称中含有字符-、*等,则会被运算法则自动误识别为减号、乘号等。为了避免这种误识别,需要将这样的变量名称放在大括号内。例如变量名称为test-Temperature,则写成如下格式:${test-Temperature}变量的参照方法(2)使用已有Vector/PositionFieldFunction在不同坐标系下的分量作为参照变量,定义新的UserFieldFunction时,可以使用以下方法(这里以单元质心坐标Centroid为例):$$Centroid(“CoordinateSystem1”)其中,CoordinateSystem1代表的是不同坐标系的名称。例如:在Cartesian坐标系下,$$Centroid(“CartesianSystem”)[0]、$$Centroid(“CartesianSystem”)[1]、$$Centroid(“CartesianSystem”)[2]分别代表了单元质心坐标矢量在CartesianSystem这个坐标系下的三个分量。同理,在Cylindrical或Spherical坐标系下的三个分量也可以使用类似的方法。定义UserFieldFunction(1)在鼠标右键点击ToolsFieldFunctions,选择New新建了一个UserFieldFunction之后,需要正确修改其名称、类型、量纲、FunctionName,并正确书写其Definition内容。定义UserFieldFunction(2)书写Definition时用到的语法是C语言的一个子集。如果书写的内容不符合语法要求,会在Output窗口中出现如下的错误提示信息,需要仔细检查修改直至错误提示信息不再出现。定义UserFieldFunction(3)在UserFieldFunction的属性中,有一个选项IgnoringBoundaryValues。通常FieldFunction在存取边界上的数据时,如果边界上存储有需要的数据,则直接使用;如果边界上没有存储需要的数据,则取用临近边界的第一层体网格单元中的数据。但在某些特定场合,即使边界上已经存储有数据,我们仍希望只得到临近边界的第一层体网格单元中的数据,此时就可以选中IgnoringBoundaryValues选项来实现这个功能。例如,定义UserFieldFunction内容为$$Velocity.mag(),代表了速度矢量值的大小,并想在ScalarScene中的WallBoundary上显示这个UserFieldFunction。但由于壁面边界上已经存储有速度值为0的数据,因此需要选中IgnoringBoundaryValues选项来实现云图的显示。FieldFunction运算法则(1)四则运算逻辑运算三角函数FieldFunction运算法则(2)矢量函数FieldFunction运算法则(3)杂项函数FieldFunction运算法则(4)条件表达式FieldFunction调用Report(1)每个新建的Report都会自动产生一个SystemFieldFunction,用户在编写UserFieldFunction时即可加以引用。引用格式为:$SystemFieldFunction的FunctionName由于在编写Report时亦可使用System/UserFieldFunction,因此FieldFunction和Report可以互相嵌套编写,以实现更加复杂的功能。FieldFunction调用Report(2)例如,建立一个统计入口平均速度的Report,名称为Inlet_Velocity。建立完毕后,即可在FieldFunctions节点下看到自动生成的SystemFieldFunction,名为Report:InletVelocity。在UserFieldFunction中引用这个Report数据时,使用的定义式是:$Inlet_VelocityReportFieldFunction调用Table(1)Table作为一种离散数据的输入方式,在边界条件等设定中有着特殊的作用。FieldFunction可以调用Table中的离散数据,通过插值产生新的Scalar或Vector表达式。插值方式有Linear(线性)、Step(阶跃)和Spline(贝塞尔曲线)三种,其中Spline仅限于产生Scalar表达式。产生Scalar表达式的语法:interpolateTable(@Table(tablename),x-column,{LINEAR|STEP|SPLINE},phi-column,scalar_expression)产生Vector表达式的语法:interpolateTable(@Table(tablename),x-column,{LINEAR|STEP},phi_0-column,phi_1-column,phi_2-column,scalar_expression)FieldFunction调用Table(2)例如,已有一个定义速度大小随时间变化的Table,Table的内容如右图所示。在Tables节点下读入此Table文件。新建UserFieldFunction,其Definition为:interpolateTable(@Table(table),time,LINEAR,Velocity,$Time)FieldFunction调用Table(3)将入口边界速度大小的设定方式改为FieldFunction,指向新建的UserFieldFunction1。计算模型设定为瞬态,物理时间步长为0.1秒,计算总时间为5秒。定义一个统计入口平均速度的Report,并基于此Report产生Monitor和Plot。FieldFunction调用Table(4)计算结束后,可以看到使用不同的插值方式,入口速度随时间呈现不同的变化规律。LinearStepSpline临时存储的SystemFieldFunction打开Solvers节点下求解器属性中的TemporaryStorageRetained选项,会在计算迭代过程中临时存储一些额外的SystemFieldFunction以供用户使用。这些SystemFieldFunction包括:Apcoefficients、residuals、corrections、reconstructiongradients、cellgradients等。FieldFunction和Expression(1)在STAR-CCM+软件未提供FieldFunction接口的某些参数设定中,也可以通过Expression的形式来实现输入非定常数值的功能。Ex