可视化两组VTK文件的差异

计算科学 可视化 视界 VTK
2021-12-15 12:02:55

我有两组 300 个 VTK 文件,我想得到一个比较两组平均差异的图表。所有文件都有一个结构化网格,其中包含一个名为 phi 的标量值。最后,我需要一个图表来显示每个网格的每个网格的平均差异。

我已经使用带有以下代码的可编程过滤器计算了每个单元格的差异,来自上一个问题(此处):

phi0 = inputs[0].PointData['phi']
phi1 = inputs[1].PointData['phi']
output.PointData.append(phi1-phi0, 'difference')

但是,我不明白如何计算整个网格的平均值(将所有差异相加并除以单元格数),然后为我拥有的每个网格绘制它。

有什么建议?

1个回答

您的问题的答案是您可以将可编程过滤器输出类型更改为 vtkPolyData 并将脚本设置为:

phi0 = inputs[0].PointData['phi']
phi1 = inputs[1].PointData['phi']
dd = abs(phi1-phi0) #note absolute value here
ss = sum(dd)

points = vtk.vtkPoints()
points.InsertPoint(0, [0, 0, 0])
output.SetPoints(points)
globalsum = vtk.vtkDoubleArray()
globalsum.SetName("sum")
globalsum.InsertValue(0, ss/inputs[0].GetNumberOfPoints())
output.GetPointData().AddArray(globalsum)

不过,这可能不会并行工作。

不过,您可能需要考虑与网格尺寸无关的选项。为此,首先使用其中一个计算器过滤器创建一个处处值为 1 的点数据数组,然后使用 ParaView 中的 Integrate Variables 过滤器将差异和“1”数组结果整合到整个差异数据集。然后将差值结果除以 1 数组结果,得到与网格大小无关的值。