搜档网
当前位置:搜档网 › Tecplot中的公式用法

Tecplot中的公式用法

流体中文网论坛 -- 流体力学及相关领域学术问题交流论坛


前几天因为使用遇到问题,看了一下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 + J
V4 = 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 = 0
S = 1+ABS(S)
如果 Tecplot 图不存在使用的字母代码会有出错信息,如在非 3D 图形中使用 Z,字母代码引用的变量只对当前 Frame 有效。

公式中还可以使用辅助数据,如引用数据文件中的辅助数据从无量纲变量计算有量纲变量,公式中使用辅助数据语法如下:
AUXZONE[nnn]:Name
AUXDATASET:Name
AUXFRAME:Namel
例如辅助数据集中的常数 Pref 可以用 AUXDataSetref 引用,使用这个变量的公式如:zYyO=M
{P} = {P_NonDim} * AUXDataSetref0zhS
Frame 辅助数据常数 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,否则返回
ROUND: 舍入到最近整数
TRUNC: 去掉小数部分
LOG 和 ALOG 等价,LOG10 和 ALOG10 等价。
要调用内部函数,把它的参数放在小括号("(" 和 ")")里,如
V4 = ATAN(V1)

Tecplot 有一组完全的一、二阶导数和微分函数:
ddx ddy ddz dda ddr d2dx2 d2dy2 d2dz2 d2da2 d2dr2 d2dxy d2dyz d2dxz d2daR
ddi 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。如需修改为complex方法,可调整配置文件

配置文件中的下面参数控制使用的方法:
$!INTERFACE DATA {DERIVATIVEBOUNDARY=SIMPLE}
把 SIMPLE 改为 COMPLEX 使用 complex 边界条件。

对于 simple 边界条件,边界导数用边界的一阶导数计算,等价于一阶导数在边界上是常数(二阶导数等于0)。
complex 边界条件时,边界导数从相邻内点导数线性外插,等价于二阶导数在边界上时常数(一阶导数线性变化)。
二阶导数和微分(d2dx2, d2dy2, d2dz2, d2dxy, d2dyz, d2dxz, d2di2, d2dj2, d2dij, d2dk2, d2djk, and d2dik)
忽略这些边界条件,边界导数被设置成等于内部相邻的导数,等价于二阶导数在边界上是常数。
可以用序号范围和序号选项建立自己的导数边界条件。

指定 ZONE 号:变量后跟中括号可以指定变量值的 ZONEi
V3 = 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) ) / 2
U = 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 整数
Bit: 0或1

新变量的位置可以在 New Var Location 下拉列表中指定,缺省是 Auto,Tecplot 假设变量在节点上,即使公式中所有变量都是 cell-centered 的也一样。

修改公式使用范围
ZONE 和序号范围是可以修改的,要对单独的公式指定范围,可在公式末尾加冒号,再加下面的语句:
公式范围 = Comment
>= 限制zone
= 限制 I 的范围
= 限制 J 的范围
= 限制 K 的范围
>= 创建新变量时,设置左侧变量数据类型
例如,要把 ZONE 1,3,4,5 的 X 加 1
X=X+1:
下面的例子每隔一个序号 I 就对 X 加 1,注意,0 表示序号最大值。
X=X+1:
下面的例子创建一个新变量,同时赋予变量类型:
{NewV}=X-Y:
对话框中的 Remove 按钮可以删除这些限制。

公式例子
下面的公式中 V1 (数据文件中的第一个变量) 变成自己的 2.5 倍:
V1 = 2.5*V1
置变量 "Density" 等于 205,如果不存在这个变量就创建了一个新变量
{Density} = 205
变量 Y ( Y 轴变量) 用 X ( X 轴变量) 平方的相反数代替:
Y = -X**2
V3 用 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*V3,
V8 = 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 将变成
Y = Y - Y[1]

相关主题