在Paraview中计算张量的转置。

问题描述 投票:0回答:1

我需要在Paraview中计算以下公式。

enter image description here

如何计算上述公式中的转置? 基本上我想知道如何在Paraview中计算矩阵的转置。

paraview
1个回答
2
投票

正如 @Nico Vuaille 所建议的,你应该在 ParaView 中使用 Numpy 支持。简单地对感兴趣的数据集应用一个可编程过滤器,并提供一个类似于下面的脚本。

import numpy as np
u = inputs[0].PointData['Velocity']
# Calculate gradient here, say uGrad
output.PointData.append(uGrad, 'Gradient')

编辑: 实际上,我已经尝试用我的一个数据集来生成你的计算结果,并意识到我的回答和评论没有什么帮助。因此,这是我现在的建议,它应该是可行的。

  • 在ParaView中加载你的数据集
  • 在你的数据集上应用一个非结构化数据集的梯度梯度过滤器,并选择速度场作为输入场(我使用的是 非结构化数据集的梯度你也可以直接计算出发散场和涡度场)。)
  • 对上一步得到的数据集应用可编程滤波滤波器,并提供以下代码。

脚本

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)
© www.soinside.com 2019 - 2024. All rights reserved.