我有一些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
答案 0 :(得分:1)
您是否已在此问题上取得任何进展?我真的很惊讶,这个问题没有简单的解决方案。看起来真的很容易。但是,我没有做到这一点。
我正在使用OpenFOAM,并且找到了解决方法。它对您没有帮助,但希望使用OpenFOAM的其他人认为此答案有用。您可以使用后处理写出单元格体积。当将它们包含在“ foamToVTK”的字段部分中时,可以用读取压力的相同方式在python中读取它。
runApplication postProcess -func writeCellVolumes
runApplication foamToVTK -fields '(U p V)'
答案 1 :(得分:0)
您可以使用vtkMeshQuality
。它支持多种体积单元格类型。参见here示例,了解如何使用它。在此示例中,您可以尝试使用SetTetQualityMeasureToVolume
(或类似方式)代替SetTriangleQualityMeasureToArea()
。