从vtk中提取细胞体积

时间:2017-10-22 20:07:11

标签: python numpy vtk post-processing

我有一些CFD结果来自现有的求解器(nektar ++)我希望在Python中进行一些后期处理。 我需要提取每个细胞的字段(u,v,p)和细胞体积。

我设法使用以下代码将字段提取为numpy数组:

import vtk
import vtk.util.numpy_support as VN
import numpy as np

filename = "t_2.vtk"

reader = vtk.vtkUnstructuredGridReader()
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.SetFileName(filename)
reader.Update()

num_points = reader.GetOutput().GetNumberOfPoints()

p = VN.vtk_to_numpy(reader.GetOutput().GetPointData().GetScalars('p'))
u = VN.vtk_to_numpy(reader.GetOutput().GetPointData().GetVectors('u'))
v = VN.vtk_to_numpy(reader.GetOutput().GetPointData().GetVectors('v'))

P = vtk_to_numpy(p)
U = vtk_to_numpy(u)
V = vtk_to_numpy(v)

但是我不明白是否有办法(可能是输出中的细胞体积信息)也不知道细胞体积的值。

我想正确的指令应该是这样的:

Vol = VN.vtk_to_numpy(reader.GetOutput().GetPointData().GetScalars('Volume'))

是否有人面临/正面临同样的问题?

非常感谢你的帮助。

干杯, 的Riccardo

2 个答案:

答案 0 :(得分:1)

您是否已在此问题上取得任何进展?我真的很惊讶,这个问题没有简单的解决方案。看起来真的很容易。但是,我没有做到这一点。

我正在使用OpenFOAM,并且找到了解决方法。它对您没有帮助,但希望使用OpenFOAM的其他人认为此答案有用。您可以使用后处理写出单元格体积。当将它们包含在“ foamToVTK”的字段部分中时,可以用读取压力的相同方式在python中读取它。

runApplication postProcess -func writeCellVolumes
runApplication foamToVTK -fields '(U p V)'

答案 1 :(得分:0)

您可以使用vtkMeshQuality。它支持多种体积单元格类型。参见here示例,了解如何使用它。在此示例中,您可以尝试使用SetTetQualityMeasureToVolume(或类似方式)代替SetTriangleQualityMeasureToArea()