插值和区分表值

使用表达式可以对导入的表值进行插值和区分来构建标量或矢量场。

要从表达式访问表数据,在工具 > 节点下导入相关表。有关信息,请参见
从表达式访问表数据时,不要在列名称中包含任何单位指定。

将列值作为另一列的函数进行插值和区分

表通常包含列值,这些列值是另一列值的函数。使用 interpolateTable 表达式,可以将相关值作为独立值的函数进行插值来构建连续场。该表达式返回使用附加表达式定义的值处的插值字段。

differentiateTable 表达式将表的因数值作为独立值的函数进行插值,然后返回使用其他表达式定义的值处的插值场的导数。

如果表包含矢量的每个分量的值列,则可以同时对所有分量列进行插值和区分来构建矢量场。

一般语法为:

  • 对于输出标量场:
    interpolateTable(@Table("<tablename>"), "<x-column>", {LINEAR | STEP | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression>)
    differentiateTable(@Table("<tablename>"), "<x-column>", {LINEAR | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression>)

    interpolateTable 表达式通过将 <phi-column> 中的值作为 <x-column> 中值的函数进行插值来生成标量场,并在由 <scalar_expression> 指定的值处计算标量场。

    differentiateTable 表达式通过区分插值标量场生成标量场。返回值是由 <scalar_expression> 指定的值处的段的斜率。如果此值与一个表值完全对应,则会返回相邻段斜率的平均值。

  • 同样,对于输出矢量场:
    interpolateTable(@Table("<tablename>"), "<x-column>", {LINEAR | STEP}, "<phi_0-column>", "<phi_1-column>", "<phi_2-column>", <scalar_expression>)
    differentiateTable(@Table("<tablename>"), "<x-column>", "<phi_0-column>", "<phi_1-column>", "<phi_2-column>", <scalar_expression>)

    表达式返回矢量。

其中:

  • <tablename>工具 > 节点下的表的名称。
  • <x-column> 是表列的名称,用作供插值的自变量。在上述示例中,<x-column>Time
  • <scalar_expression> 是给出 x 变量的表达式。在上述示例中,<scalar_expression> 将给出时间场函数 ${Time}
  • 对于标量:
    • <phi-column> 是要作为 x 的函数进行插值的标量 y 值的列。
  • 对于矢量值:
    • <phi_0-column> 是要作为 x 的函数进行插值的分量 [0] 值的表列。
    • <phi_1-column> 是要作为 x 的函数进行插值的分量 [1] 值的表列。
    • <phi_2-column> 是要作为 x 的函数进行插值的分量 [2] 值的表列。
  • 支持以下插值方法:
    • LINEAR(线性) -- 在 y 表值之间使用分段线性插值。
    • STEP(步) -- 使用小于 $scalar_expression 的值的最大 x 表值处的 y 表值。

      differentiateTable 表达式不支持此方法。

    • SPLINE(样条曲线) -- 在 y 表值之间使用 B 样条曲线插值(仅限标量表达式)。

    • CUBIC_AKIMA -- 使用 Akima 三次法。请参见三次和样条插值方法

示例:考虑一个名为 "RotationData" 的表具有 "Time" 列和 "RotationAngle" 列。以下表达式:

interpolateTable(@Table("RotationData"), "Time", LINEAR, "RotationAngle", $Time)

线性插值 "RotationAngle""Time" 的函数,用于返回由时间场函数 ($Time) 给出的时间处的插值。

定期将列值作为另一列的函数进行插值和区分

对于包含某列的值是另一列值的函数的表,可以创建输出标量或矢量场,以定期重复已插值相关值一定期间。同样,可以创建定期重复某一时段的导数的输出标量或矢量场。

一般语法为:

  • 对于周期长度比表格输入分布长的标量场:
    interpolateTablePeriodic(@Table("<tablename>"), "<x-column>", {LINEAR | STEP | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression_1>,<scalar_expression_2>)
    differentiateTablePeriodic(@Table("<tablename>"), "<x-column>", {LINEAR | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression_1>,<scalar_expression_2>)
  • 对于周期长度比表格输入分布短的标量场:
    interpolateTablePeriodic(@Table("<tablename>"), "<x-column>", {LINEAR | STEP | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression_1>,<scalar_expression_2>,<scalar_expression_3>)
    differentiateTablePeriodic(@Table("<tablename>"), "<x-column>", {LINEAR | SPLINE | CUBIC_AKIMA}, "<phi-column>", <scalar_expression_1>,<scalar_expression_2>,<scalar_expression_3>)

其中:

  • <scalar_expression_1> 是给出 x 变量(如 ${时间})的表达式。
  • <scalar_expression_2> 为期间长度,如某个时间间隔的长度。
  • <scalar_expression_3> 是期间的起点,如时间点。

还可以从表中周期性地插值矢量。一般情况下写入以下内容:

interpolateTablePeriodic(@Table("TableName"), "Independent Variable Column", VECTOR_INTERPOLATION_METHOD, "X Component Column", "Y Component Column", "Z Component Column", independentVariableValue, period, periodStart)

VECTOR_INTERPOLATION_METHOD 可以是步进插值的 STEP,也可以是线性插值的 LINEAR;这些方法的工作原理与标量完全相同。

为区分周期插值矢量,应写入以下内容:

differentiateTablePeriodic(@Table("TableName"), "Independent Variable Column", "X Component Column", "Y Component Column", "Z Component Column", independentVariableValue, period, periodStart)

不需要插值法,因为 Simcenter STAR-CCM+ 始终将线性插值与表中的矢量插值区分开来。

示例:例如,考虑一个名为 "MassFlowData" 的表,它包含 "Time""MassFlowRate" 列,可提供一分钟内每一秒的质量流率如下:



此外,考虑以下场函数:

interpolateTablePeriodic(@Table("MassFlowData"), "Time", LINEAR, "MassFlowRate", $Time, 15, 10)

此表达式将 "MassFlowRate" 作为 "Time" 的函数进行线性插补,并在 Time 场函数给定的时间内定期在 10s 和 25s 之间返回插值,如下所示:



插值位置值

可以使用表达式对位置表数据进行插值,从而生成位置相关场。用于生成标量场的函数为:

interpolatePositionTable(@Table("<tablename>"), "<phi-column>")

或者,使用坐标系:

interpolatePositionTable(@Table("<tablename>"), @CoordinateSystem("<coordinatesystem>"), "<phi-column>")

或者,使用嵌套坐标系:

interpolatePositionTable(@Table("<tablename>"), @CoordinateSystem("<coordinatesystem>.<coordinatesystem>.<coordinatesystem>"), "<phi-column>")

用于生成位置相关矢量场的函数为:

interpolatePositionTable(@Table("<tablename>"), "<phi_0-column>","<phi_1-column>","<phi_2-column>")

或者,使用坐标系:

interpolatePositionTable(@Table("<tablename>"), @CoordinateSystem("<coordinatesystem>"), "<phi_0-column>","<phi_1-column>","<phi_2-column>")

或者,使用嵌套坐标系:

interpolatePositionTable(@Table("<tablename>"), @CoordinateSystem("<coordinatesystem>.<coordinatesystem>.<coordinatesystem>"), "<phi_0-column>","<phi_1-column>","<phi_2-column>")

其中:

  • <coordinatesystem>工具 > 坐标系节点中的坐标系的名称。此名称的多个实例(由点分隔)表示嵌套的层。如果未指定坐标系,则使用基准坐标系并假设为笛卡尔坐标系。
  • <tablename>工具 > 节点中的表。表列包含指定 <coordinatesystem> 中的坐标值。列名称必须是坐标系规定的名称,即,笛卡尔坐标系 ("X", "Y", "Z"),圆柱坐标系 ("r", "theta", "z") 或者球坐标系 ("r", "theta", "phi")。
  • 对于标量函数:
    • <phi-column> 是使用最近邻进行空间插值的表列,对应于位置坐标列。
  • 对于矢量函数:
    • <phi_0-column><phi_1-column><phi_2-column> 表示 <coordinatesystem> 中的位置矢量的三个分量值的列名称。

使用最近邻(最近的点)插值,根据表的每行中的坐标值。表中的数据点无需遵循特定的空间排序(点数据被认为是分散的)。