在 Paraview 中计算张量的转置
Calculating transpose of a tensor in Paraview
我需要在 Paraview 中计算以下内容:
如何计算上述公式中使用的转置?基本上我想知道如何在 Paraview 中计算矩阵的转置。
正如@Nico Vuaille 所建议的,您应该在 ParaView 中使用 Numpy 支持。只需将可编程过滤器应用于感兴趣的数据集,并提供类似于以下内容的脚本。
import numpy as np
u = inputs[0].PointData['Velocity']
# Calculate gradient here, say uGrad
output.PointData.append(uGrad, 'Gradient')
编辑:实际上,我已经尝试用我的一个数据集生成您的计算,并意识到我的回答和评论并没有太大帮助。因此,这就是我现在的建议,它应该有效:
- 在 ParaView 中加载您的数据集
- 在您的数据集上应用梯度/非结构化数据集梯度过滤器,select 速度场作为输入场(我使用了 Gradient Of Unstructured Dataset,您也可以从中直接计算出发散场和涡度场)。
- 将 Programmable Filter 过滤器应用于您从上一步获得的结果数据集,并提供以下代码。
脚本
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 中时,它被解释为块的多块数据集。因此,提供给 Programmable Filter 的 Script 参数的代码片段必须更新为:
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)
我需要在 Paraview 中计算以下内容:
如何计算上述公式中使用的转置?基本上我想知道如何在 Paraview 中计算矩阵的转置。
正如@Nico Vuaille 所建议的,您应该在 ParaView 中使用 Numpy 支持。只需将可编程过滤器应用于感兴趣的数据集,并提供类似于以下内容的脚本。
import numpy as np
u = inputs[0].PointData['Velocity']
# Calculate gradient here, say uGrad
output.PointData.append(uGrad, 'Gradient')
编辑:实际上,我已经尝试用我的一个数据集生成您的计算,并意识到我的回答和评论并没有太大帮助。因此,这就是我现在的建议,它应该有效:
- 在 ParaView 中加载您的数据集
- 在您的数据集上应用梯度/非结构化数据集梯度过滤器,select 速度场作为输入场(我使用了 Gradient Of Unstructured Dataset,您也可以从中直接计算出发散场和涡度场)。
- 将 Programmable Filter 过滤器应用于您从上一步获得的结果数据集,并提供以下代码。
脚本
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 中时,它被解释为块的多块数据集。因此,提供给 Programmable Filter 的 Script 参数的代码片段必须更新为:
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)