正如 @Nico Vuaille 所建议的,你应该在 ParaView 中使用 Numpy 支持。简单地对感兴趣的数据集应用一个可编程过滤器,并提供一个类似于下面的脚本。
import numpy as np
u = inputs[0].PointData['Velocity']
# Calculate gradient here, say uGrad
output.PointData.append(uGrad, 'Gradient')
编辑: 实际上,我已经尝试用我的一个数据集来生成你的计算结果,并意识到我的回答和评论没有什么帮助。因此,这是我现在的建议,它应该是可行的。
脚本
import numpy as np
grad = inputs[0].PointData['Gradients']
omega = (grad - np.transpose(grad, axes=(0, 2, 1))) / 2
output.PointData.append(omega, 'Omega')
你应该最终在你的ParaView管道中找到另一个项目,它只包含预期的Omega。
编辑2: 输入文件使用XMDF格式。当加载到ParaView时,它被解释为一个多块数据集。因此,提供给可编程过滤器的脚本参数的代码片段必须更新为:
import paraview.vtk.numpy_interface.dataset_adapter as dsa
for i in range(inputs[0].GetNumberOfBlocks()):
data = dsa.WrapDataObject(inputs[0].GetBlock(i))
grad = data.PointData['Gradients']
omega = (grad - np.transpose(grad, axes=(0, 2, 1))) / 2
data.PointData.append(omega, 'Omega')
output.SetBlock(i, data.VTKObject)