前几天因为使用遇到问题,看了一下Tecplot中如何用公式修改数据,把相关帮助随便翻译了一下,希望对大家有帮助。Data->Alter->Specify Equations 可以使用公式Tecplot 公式形式如下:Lvalue = f(Rvalue1, Rvalue2, Rvalue3, ...)f() 类似 FORTRAN 表达式,参考下面的内容。Lvalue 是对一个存在或不存在的变量的引用,RvalueN 是对值的引用(如常数、变量值或序号)。公式中可以有空格,但是在内部函数名称和变量名称中不能有空格。如果 Lvalue 指定的变量在当前 Frame 的数据集中存在,公式将修改变量的值;如果不存在就建立一个新变量。如果公式包含语法错误,在一个错误对话框中显示公式,告知错误的大概位置。每个公式占一行,可以使用多个公式,单击 Compute 生效,每个公式按顺序用于所有指定的 ZONE 和数据。 公式变量和值变量可以用3种方法指定:根据数据文件中的顺序,名称或字母代码。可以用数据文件中变量的顺序引用变量,V1 是数据文件中的第一个变量,V2 是第二个,依此类推。如,要设置数据文件中第一个变量等于第二个变量和第三个变量的和,用V1 = V2 + V3用这个方法创建新变量必须指定下一个变量的序号,假设数据文件中有5个变量,可以创建一个新变量等于第四个变量的一半:V6 = V4 / 2不能跳过中间的数字指定变量,否则 Tecplot 弹出错误信息对话框指出变量名无效。变量也可以用名称指定,方法为用大括号(\"{\"和\包含变量名,如要设置 V3 等于变量 R/RFR 的值用:V3 = {R/RFR}变量名大小写不敏感,前后的空格也忽略,因此下面的公式是相同的:v3 = {R/rfr} V3 = { r/rfr }变量名中的空格有意义,因此下面的公式和上面的公式不同:V3 = {R / rfr}如果有两个或多个变量名字相同,Tecplot 使用第一个变量,即如果 V5 和 V9 都叫 R/rfr,用变量名时使用的是 V5。大括号也可以用于公式左侧,此时如果该变量不存在就创建一个新变量,这在公式文件中很重要,如,下面的公式设置变量 T/R 等于变量 T 除以变量 R,如果不存在变量 T/R,将创建一个新变量。{T/R} = {T} / {R}变量也可以用字母代码表示,有效的字母代码为:I: 数据的 I 序号J: 数据的 J 序号 (有限元 ZONE 为 1)K: 数据的 K 序号 (有限元 ZONE 为 1)X: X轴变量(在 XY Line 图形中,所有图形必须有相同的 X 变量名称)Y: Y轴变量(在 XY Line 图形中,所有图形必须有相同的 Y 变量名称)Z: Z轴变量(如果存在)A: Polar 图的 Theta 轴,如果
这个变量有效,图形必须是 Polar Line,且所有图形必须有相同的 Theta 变量名称R: Polar 图的 R 轴,图形必须是 Polar Line,且所有图形必须有相同的 Theta 变量名称U: 向量的 X 分量(如果存在)V: 向量的 Y 分量(如果存在)W: 向量的 Z 分量(如果存在)B: value-blanking variable (if set).Plot->Blanking->value-Blanking里设置C: 等值线变量(如果存在)S: 散点大小变量(如果存在)字母代码可以用于公式右侧任意位置,不要加大括号,例如:V3 = I + JV4 = cos(X) * cos(Y) * cos(Z){Dist} = sqrt(U*U + V*V + W*W){temp} = min(B,1)代表变量的字母代码,除I, J, K外,都可以用在公式左侧,如:Z = X*X/(1+Y*Y)W = 0S = 1+ABS(S)如果 Tecplot 图不存在使用的字母代码会有出错信息,如在非 3D 图形中使用 Z,字母代码引用的变量只对当前 Frame 有效。公式中还可以使用辅助数据,如引用数据文件中的辅助数据从无量纲变量计算有量纲变量,公式中使用辅助数据语法如下:AUXZONE[nnn]:NameAUXDATASET:NameAUXFRAME:Name例如辅助数据集中的常数 Pref 可以用 AUXDataSet{P} = {P_NonDim} * AUXDataSet
ref 引用,使用这个变量的公式如:
refFrame 辅助数据常数 Mach 可以用
AUXFrame:Mach 引用。ZONE 辅助数据常数有2种方法引用:AUXZone:Name 对当前 ZONE 使用 Name,AUXZone[nnn]:Name 对 ZONE 号为 nnn 的 ZONE 使用 Name。如果正在对 ZONE 1-3 操作,对 ZONE 1 操作时,AUXZone:Reynolds 引用 ZONE 1 中的辅助数据 Reynolds,对 ZONE 2 操作时,AUXZone:Reynolds 引用 ZONE 2 中的辅助数据 Reynolds,依此类推。而 AUXZone[2]:Reynolds 对所有操作 ZONE 引用 ZONE 2 中的辅助数据常数 Reynolds。公式操作符和函数操作符:+ 加- 减* 乘/ 除** 指数优先级为:** 高*,/ +,- 低可用函数(除非注明,所有函数使用一个参数):SIN: Sine (用弧度)COS: Cosine (用弧度)TAN: Tangent (用弧度)ABS: 绝对值ASIN: Arcsine (结果是弧度)ACOS: Arccosine (结果是弧度)ATAN: Arctangent (结果是弧度)ATAN2(A,B): Arctangent of A/B (结果是弧度)SQRT: 开平方LOG: 自然对数(底是e)ALOG: 自然对数(底是e)LOG10: 以10为底的对数ALOG10: 以10为底的对数EXP: 指数(底是e); EXP(V1)=e**(V1).MIN(A,B): A 和 B 的最小值MAX(A,B): A 和 B 的
最大值SIGN: 参数为负时返回 -1,否则返回 +1ROUND: 舍入到最近整数TRUNC: 去掉小数部分LOG 和 ALOG 等价,LOG10 和 ALOG10 等价。要调用内部函数,把它的参数放在小括号(\"(\" 和 \")\")里,如:V4 = ATAN(V1)Tecplot 有一组完全的一、二阶导数和微分函数:ddx ddy ddz dda ddr d2dx2 d2dy2 d2dz2 d2da2 d2dr2 d2dxy d2dyz d2dxz d2darddi ddj ddk d2di2 d2dj2 d2dk2 d2dij d2djk d2dik导数和微分函数可以象内部函数一样使用,如:V4 = ddx(V3)V6 = d2dx2(v5){dC/dx} = ddx(C)V8 = ddj(X){Vt12} = ddy({Vt11}(i+1)) + ddy({Vt11}(i-1))Z = d2dj2(sin(v5*v6))V9 = ddj(ddx({R/T}))C = d2dij(C[1]-C){NEWVAR} = ddi(X)+ddj(Y)+ddk(Z)导数和微分函数如下:IJK-ordered ZONE 的导数和微分用全 3D 体积计算。如果在选定 ZONE 的所有数据点上存在导数没有定义的点,那么在所有点都不进行计算。导数计算使用当前 Frame 的坐标轴定义,如果有多个 Frame 且对相同的数据集有不同的变量指定时需要注意。所有导数和微分都在数据点中心或网格中心(如果导数变量是网格中心变量)。2个 ZONE 边界上的导数可能不同,因为 Tecplot 每次只计算一个 ZONE 。导数和微分函的边界条件对于 ordered ZONE ,一阶导数和微分的边界值(ddx, ddy, ddz, ddi, ddj, and ddk)用simple 或 complex 方法计算,缺省是 simple。配置文件中的下面参数控制使用的方法:$!INTERFACE DATA {DERIVATIVEBOUNDARY=SIMPLE}把 SIMPLE 改为 COMPLEX 使用 complex 边界条件。对于 simple 边界条件,边界导数用边界的一阶导数计算,等价于一阶导数在边界上是常数(二阶导数等于0)。complex 边界条件时,边界导数从相邻内点导数线性外插,等价于二阶导数在边界上时常数(一阶导数线性变化)。二阶导数和微分(d2dx2, d2dy2, d2dz2, d2dxy, d2dyz, d2dxz, d2di2, d2dj2, d2dij, d2dk2, d2djk, and d2dik)忽略这些边界条件,边界导数被设置成等于内部相邻的导数,等价于二阶导数在边界上是常数。可以用序号范围和序号选项建立自己的导数边界条件。指定 ZONE 号:变量后跟中括号可以指定变量值的 ZONEV3 = V3 - V3[1]X = ( X[1] + X[2] + X[3] ) / 3{TempAdj} = {Temp}[7] - {Adj}V8 = V1[19] - 2*C[21] +
{R/T}[18]ZONE 号必须是小于等于 ZONE 数的正整常数。指定的 ZONE 必须和当前区
域有相同的结构(I-, IJ-, 或 IJK-ordered 或 有限元) 和维数(即 IMax, 节点数等),不指定时使用当前 ZONE。ZONE 指定只在公式右侧起作用,所有公式右侧的值在修改前都不变。要在公式左侧指定 ZONE,在指定公式对话框中 ZONE 内指定。指定数据序号用小括号(\"(\" 和 \")\")可以指定序号,可以是绝对位置或相对当前的位置,如:V2 = ( V2(i+1) + V2(i-1) ) / 2U = U(i+1,j) - U(i-1,j) + V(i+2,1) + 3*W(i-1){NTQ} = {TQ} +
{TQ}(i-3,j+7,k-1) - {TQ}(3,j+1,k+8}S = S(i+1,j) - V3(2) + {RFR/T}(J+2)用 I,J,K 可以指定序号相对当前位置的偏移,必须使用整数偏移量,如果超过 ZONE 末尾,使用边界值,如当 I=IMax-1 和 I=IMax 时,V3(i+2) 使用 V3(imax);I=1 或 2 时,V3(i-2) 使用 V3(1)。用一个正整数指定绝对位置,如 V3(2) 引用 V3 的第二个值。序号顺序必须是 I, J, K 顺序的,如果数据是 I-ordered 忽略 J,如果数据不是 IJK-ordered 忽略 K,在有限元数据中不可以使用序号。序号指定只在公式右侧起作用,如果不指定则使用当前序号,要在公式左侧使用序号,在指定公式对话框中Index Ranges 内指定。序号可以和 ZONE 共同使用,先用 ZONE,如:V3 = V3 - V3[1](i+1)Y = Y[1] - Y[2](1) + Y(1,j+3) + Y 新变量的数据类型可以在 New Var Data Type 下拉列表中指定,缺省是 Auto,Tecplot 自动指定合适的类型。也可以手动指定。可用数据类型为:Single: 4byte 浮点数Double: 8byte 浮点数Long Int: 4byte 整数Short Int: 2byte 整数Byte: 1byte 整数(0-255)Bit: 0或1 新变量的位置可以在 New Var Location 下拉列表中指定,缺省是 Auto,Tecplot 假设变量在节点上,即使公式中所有变量都是 cell-centered 的也一样。修改公式使用范围ZONE 和序号范围是可以修改的,要对单独的公式指定范围,在公式末尾加冒号(再加下面的语句: 公式范围 = Comments<Z=<set>> =
ZONE<I=start[,end[,skip]]> = I 的范围<J=start[,end[,skip]]> = J 的范围<K=start[,end[,skip]]> = K 的范围
<D=<datatype>> = 创建新变量时,设置左侧变量数据类型例如,要把 ZONE 1,3,4,5 的 X 加 1:X=X+1:<Z=[1,3-5]>下面的例子每隔一个序号 I 就对 X 加 1,注意,0 表示序号最大值。X=X+1:<I=1,0,2>下面的例子创建一个新变量,
,
同时赋予变量类型:{NewV}=X-Y:<D=Byte>对话框中的 Remove 按钮可以删除这些。 公式例子下面的公式中 V1 (数据文件中的第一个变量) 变成自己的 2.5 倍:V1 = 2.5*V1设置变量 \"Density\" 等于 205,如果不存在这个变量就创建了一个新变量。{Density} = 205变量 Y ( Y 轴变量) 用 X ( X 轴变量) 平方的相反数代替:Y = -X**2V3 用 V2 四舍五入的结果代替,如果数据集中只有2个变量,就会创建新的变量。V3 = round(V2)数据集中的第四个变量用第三个变量的对数代替V4 = ALOG10(V3)假设第3、4个变量是速度的 X、Y 向分量,并且总共有 5 个变量,下面创建第 6 个变量 V6 是速度的大小V6 = (V3*V3+V4*V4)**0.5或V6 = sqrt(V3**2+V4**2)上面的操作也可以用下面的公式代替(假设当前窗口已经设置了矢量图):{Mag} = sqrt(U*U + V*V)公式中也可以引用 I, J, K 序号,例如,如果想把 ZONE 中一部分值用 value-blanking 排除,可以创建一个以 I, J 为函数的新变量(IJ-ordered 数据),然后用 value-blanking 可以剔除特定单元的数据,如果 value-blanking变量的值小于等于 value-blanking 分离值。下面的公式设置变量 \"diff\" 的值为变量 \"depth\" 及其本身舍入值的差值:{diff} = {depth} - trunc({depth})下面的公式把等值线变量 C 设置为散点大小变量 S 的绝对值C = abs(S)用已知变量创建新的变量V8 = SQRT((V1*V1+V2*V2+V3*V3)/(287.0*V4*V6))上面的操作也可以分 2 步进行:V8 = V1*V1+V2*V2+V3*V3V8 = SQRT(V8/(287.0*V4*V6))用内部函数的例子:V8 = 55.0*SIN(V3*3.14/180.0) + ALOG(V4**3/(v1+1.0))把当前 ZONE 所有 Y 用和 ZONE 1 的 Y 的差值代替,如果当前 ZONE 是 1,Y 将变成 0Y = Y - Y[1]