您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > CFX之CEL语言介绍讲解
在CFX中,CFX表达式语言(CFXExpressionLanguage:CEL)作为一种解释性和说明性的语言嵌入到CFX中。利用CEL,用户可以提高分析模拟的功能,而不需要使用外部分离的Fortran子程序。在ANSYS的CFX程序中,只要是可以输入值的地方就可以使用CEL表达式进行输入。CEL的适用范围:通过变量定义材料属性;设定复杂的边界条件;对于求解方程增加求解项。用户也可以使用监测点功能,在求解过程中对于某个CEL表达式进行监测。注意:有些CEL表达式只能在ANSYS的CFX中使用,而不能使用在CFD的后处理中。任何在CFX前处理器中创建的CEL表达式并作为设计浏览器(DesignExploration)中的输出参数,在设计浏览器运行的过程中可能导致致命的错误;所以,若用户需要进行设计浏览,则需要在CFD-Post(后处理)中创建所需所有的设计变量。本读本包含如下内容:1、CEL基础。2、CEL操作符,常量和表达式。3、CEL的例子。4、CEL技术细节。1、CEL基础值和表达式利用CEL可以创建值变量和表达式。值变量可以是带量纲的,也可以是不带量纲的。例如下面这个最简单的不带量纲的变量:b=3.743用户也可以创建具有量纲的变量,如下:g=9.81[ms^-2]在CFD计算过程中,变量的量纲是具有意义的,它们表征了质量,长度,时间,温度或者角度的信息。量纲也是理解值和表达式的基础概念之一。在CEL中,值可以直接指定,也可以作为表达式的一部分。例如,用户可以使用两个值变量求和形成一个表达式:Expr_1=Value_1+Value_2在本例中,用户可能希望将Value_1和Value_2相加并赋值给Expr_1,若只是两个无量纲的变量进行相加用户不需要考虑量纲的问题;但是这两个变量具有量纲则需要考虑量纲的问题了。表达式可以由之前已定义的表达式进行定义,例如:Expr_2=Expr_1+Value_3在CFX中进行表达式求值往往需要进行单位装换,在缺省状态下使用公制单位制(SI单位制),这样用户就可以使用任何自己的单位制了。若某个表达式未设定自己的单位字符串,但是引用的变量中有的是具有单位的,则结果表达式的单位由引用的变量或表达式计算后的量纲所决定。例如:某个表达式引用了x坐标平方的倒数,则隐式的使用了长度的-2次方单位。在表达式中使用定位符在CFX模拟过程中,具有物理面和网格面的概念:物理面:在CFX中表征物理边界条件的面称之为物理面;网格面:在CFX中在几何拓扑结构中划分网格的面称之为网格面。在模拟过程中,这两种类型的面可能占据完全不同的几何区域;然而,并不需要将物理面和网格面的名称完全区分开,这样只会在表达式使用过程中造成混淆。为了避免混淆,在CFX使用“@locator”进行物理面和网格面的区分。若在面名称中找到了“@locator”定位符则表示是一个物理面;若未找到则在网格面的列表中进行查找。例如:“in1”既是一个物理面的名称,可能也是一个网格面的名称,则“@locator”表示使用的是一个物理面。在CFX中,用户可以使用@REGION参数表示某个命名的面是网格面。例如,为了表示网格面in1,可以使用如下表达式:@REGION:in1注意:若定位符不是作为物理面或者网格面的表达式而出现,则该表达式无效。CEL语句CEL语言是一种说明性的语言。用户使用表达式语句进行表达式的申明和定义,并和Fortran以及C语言进行表达式定义的相一致:语句中必须包含如下内容:Thestatementmustconsistofthefollowing:一个数,量纲可选,用于定义一个常量。对于数学表达式,可能需要引用一个或者多个数学常量,变量,系统变量或者用户自定义的变量,并由+,-,*,/和^运算符进行连接,并用()定义运算的优先级,这些规则和传统的数学运算规则一致。对于关系表达式则包含关系运算符,一个或者多个数学常量或者从数学表示计算的结果,并由=,,==,!=,.=连接而成,并可以由可选的()设定运算优先级。对于逻辑表达式包含逻辑操作符,一个或者多个逻辑常量或者关系运算的结果,并通过!,&&,||连接而成,并可以由可选的()设定运算优先级。使用常量在表达式中使用常量并不需要预先定义,例如:可以使用x+5[m]进行表达式计算;或者用户也可以先定义一个常量b=5[m],再创建一个表达式x+b。逻辑常量值为false和true。逻辑表达式的计算结果为0或者1,分别对应false和TRUE。推荐用户使用常量进行表达式的定义,因为可能有多个表达式同时引用一个常量的情况,这样只需要修改常量表达式即可。表达式参数在CEL语言中,所有的数值均作为实数进行处理;并遵循如下从高到低的计算优先级顺序。指数运算:x^y。单操作数的取负运算:-x。乘除运算具有相同的优先级:x*y/z。加减运算:x+y-z。逻辑运算和关系运算遵循如下从高到低的计算优先级顺序:非运算:!x。关系运算(=,,and=):x=y。关系运算(==and!=):x!=y。逻辑与运算:x&&y。逻辑或运算:x||y。多行表达式多行表达式有时是十分有用的,尤其是对于复杂的表达式,可以使用多行创建用户需要的表达式。在CFX中可以创建多行表达式,每行需要用合适的分隔符进行分隔。例如:用户需要表达式A+B/C,其中A,B和C都是复杂的表达式。在这种情况下,可以使用三行进行表达式的书写:A+B/C注意:第一行表达式A书写完成后用+结束,表达式B写在单独的一行上,而表达式C用/开头。一旦表达式书写完成,他将出现在表达式定义的列表中CEL中的操作符,常量和表达式操作符在CFX中提供了一定范围的数学,逻辑以及操作性的操作符,并以内建函数的形式帮助用户创建复杂的表达式。下表中列出了CEL表达式中所使用的操作符的详细信息。OperatorFirstOperand'sDimensions[x]SecondOperand'sDimensions[y]Operands'Values(Approx)Result'sDimensions-xAnyAny[x]x+yAny[x]Any[x]x-yAny[x]Any[x]x*yAnyAnyAny[x]*[y]x/yAnyAny0[x]/[y]x^y(ifyisasimple,constant,integerexpression)AnyDimensionlessAny[a][x]^yx^y(ifyisanysimple,constant,expression)AnyDimensionlessx0[x]^yx^y(ifyisnotsimple&constant)DimensionlessDimensionlessx0Dimensionless!xDimensionless0or1Dimensionlessx=yAny[x]0or1DimensionlessxyAny[x]0or1DimensionlessxyAny[x]0or1Dimensionlessx=yAny[x]0or1Dimensionlessx==yAny[x]0or1Dimensionlessx!=yAny[x]0or1Dimensionlessx&&yDimensionlessDimensionless0or1Dimensionlessx||yDimensionlessDimensionless0or1Dimensionless[a]Fory0,xmustbenon-zero.if条件语句CELsupportstheconditionalifstatementusingthefollowingsyntax:在12版的CFX中提供了if条件语句,而在以往的CFX中是使用step函数实现的条件判断功能。if语句的使用格式如下:if(cond_expr,true_expr,false_expr)其中:cond_expr:用于进行测试的逻辑表达式。true_expr:当逻辑表达式为真时所执行的数学运算表达式。false_expr:当逻辑表达式为假时所执行的数学运算表达式。注意:true_exp以及false_expr表达式无论逻辑表达式是真还是假时均单独运算。其结果是条件表达式在这样的表达式if(x0,1/x,1.0)中不能避免除零错误,当x=0时,而无论x0的条件是否满足表达式1/x也会执行。CEL常量在表达式列表的详细视图中右击鼠标可以访问CEL常量,列表如下:ConstantUnitsDescriptionRJK^-1mol^-1UniversalGasConstant:8.314472avogadromol^-16.02214199E+23boltzmannJK^-11.3806503E-23clightms^-12.99792458E+08eDimensionlessConstant:2.7182817echargeAsConstant:1.60217653E-19epspermo1./(clight*clight*mupermo)gms^-2Accelerationduetogravity:9.8066502mupermoNA^-24*pi*1.E-07piDimensionlessConstant:3.141592654planckJs6.62606876E-34stefanWm^-2K^-45.670400E-08表达式的使用CEL表达式的使用分为两个阶段:定义CEL表达式引用CEL表达式CEL表达式的定义阶段是指使用值集以及合法的参数创建表达式的过程,利用表达式详细视图可以帮助用户创建表达式。使用温度的偏移量在表达式中使用温度值的时候,一般较安全的方式均采用[K]作为温度单位。设想一下若需要将[K]的温度单位进行偏移并转变成[C]单位,这样的装换是在内部进行的,例如:下面的四个语句等价:Temperature=30[C]Temperature=303.15[K]Temperature=0[C]+30[K]Temperature=273.15[K]+30[K]因为在CFX程序内部[C]单位和[K]是兼容的并在内部做了单位转化,但是下面的语句和上面的效果不同:Temperature=0[C]+30[C]上面的语句等价于将Temperature设定为576.3[K],这是因为在CFX内部首先将0[C]和30[C]分别转化为273.15[K]和303.15[K],之后再进行相加操作;所以和用户设想的结果产生了偏差。但是下面的两个语句等价:SpecificHeat=4200[Jkg^-1C^-1]SpecificHeat=4200[Jkg^-1K^-1]例子1:基于粘度的雷诺数在本例中,我们假定某种流体的动力学粘度未知,但是雷诺数和入口速度以及长度比已知,流体为可压缩流即密度可变。根据上述信息,可以通过下面的公式计算流体粘度:其中:Re:雷诺数ρ:流体密度U:入口速度L:长度比μ:流体粘度与上述公式等价的CCL语言如下:LIBRARY:CEL:EXPRESSIONS:Re=4.29E6[]Vel=60[ms^-1]L=1.044[m]Visc=areaAve(density)@in*Vel*L/ReENDENDMATERIAL:AirIdealGasOption=PureSubstancePROPERTIES:Option=IdealGasMolarMass=2.896E1[kgkmol^-1]DynamicViscosity=ViscSpecificHeatCapacity=1.E3[Jkg^-1K^-1]ThermalConductivity=2.52E-2[Wm^-1K^-1]ENDENDEND这里共创建了4个CEL表达式,前3个表达式分别用于创建Re,Vel以及L,并在第四个表达式引用前3个表达式用于创建表达式Visc,其中areaAve(density)@
本文标题:CFX之CEL语言介绍讲解
链接地址:https://www.777doc.com/doc-7918551 .html