ParaView热流图:如何计算单元格Cell的体积

Paraview热流图:flux与element关联

1.Python Calculator过滤器

表达式(expression):

volume(inputs[0])

Array Association:

Cell Data

在这里插入图片描述

2.vtkCellSizeFilter

  • @brief计算单元格大小。
  • 计算VTK中所有类型单元格的单元格大小。对于三角形、四边形、四角形和六角形,使用vtkMeshQuality中的静态方法。
  • 为了更高的准确性,这是通过Verdict来实现的。
  • 其他类型的Cell在可能的情况下单独进行分析,在不可能的情况下分解成三角形或四角形。当细胞分裂成三角形或四角形时,精确度可能会降低。默认情况下,会计算所有大小(但可以选择忽略):顶点计数、长度、面积和体积单元。每个请求的大小都使用单独的数组(例如,如果请求长度和体积,则将从该筛选器输出两个数组)。这4个数组可以单独命名,默认值为VertexCount、Length、Area和Volme。对于未计算大小的单元格尺寸,将给出0的值。
  • 对于应该计算大小但无法计算的单元格,过滤器将返回-1。
  • ComputeSum选项将对单元格大小(不包括重影单元格)求和,并将值放入以相应单元格数据数组名称命名的vtkFieldData数组中。对于复合数据集,所有数据块的总和也将添加到顶层数据块的字段数据中进行总和。

相关过滤器:vtkPCellSizeFilter

std::string inputname = "test.vtu";
	vtkSmartPointer<vtkXMLUnstructuredGridReader> inputReader = vtkSmartPointer<vtkXMLUnstructuredGridReader>::New();
	inputReader->SetFileName(inputname.c_str());
	inputReader->Update();
	
	vtkNew<vtkCellSizeFilter> filter;	
	filter->SetInputConnection(inputReader->GetOutputPort());
	//filter->ComputeSumOn();
	//filter->ComputeVolumeOn();
	filter->Update();
	vtkDoubleArray* vertexCount = vtkDoubleArray::SafeDownCast(
		vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("VertexCount"));
	vtkDoubleArray* length = vtkDoubleArray::SafeDownCast(
		vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Length"));
	vtkDoubleArray* area = vtkDoubleArray::SafeDownCast(
		vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Area"));
	vtkDoubleArray* volume = vtkDoubleArray::SafeDownCast(
		vtkUnstructuredGrid::SafeDownCast(filter->GetOutput())->GetCellData()->GetArray("Volume"));

	vtkSmartPointer<vtkUnstructuredGrid> unstructuredGrid= vtkUnstructuredGrid::SafeDownCast(filter->GetOutput());
	vtkCellData* cell = unstructuredGrid->GetCellData();
	vtkDoubleArray* volume = vtkDoubleArray::SafeDownCast(cell->GetArray("Volume"));

	vtkSmartPointer <vtkXMLUnstructuredGridWriter> polyWriter = vtkSmartPointer <vtkXMLUnstructuredGridWriter>::New();
	polyWriter->SetFileName("mycellsize.vtu");
	polyWriter->SetInputData(unstructuredGrid);
	polyWriter->SetDataModeToAscii();
	polyWriter->Write();

3. vtkMeshQuality

vtkMeshQuality
您可以尝试使用SettQualityMeasureToVolume(或类似函数)

@class vtkMeshQuality

@brief计算网格元素的质量函数

vtkMeshQuality为网格的每个二维和三维单元(三角形、四边形、四面体或六面体)计算一个或多个(几何)质量函数。

然后在整个网格上平均这些质量函数。每种类型单元的最小、平均、最大和无偏质量方差存储在输出网格的FieldData中。

FieldData阵列被命名为“网格三角形质量”、“网格四边形质量”、“网格四面体质量”和“网格六面体质量”每个数组都有一个包含5个组件的元组。前4个组成部分是上述质量统计数据;最终值是给定类型的单元格数。最后一个组件使分布式网格数据的统计数据聚合成为可能。

默认情况下,每个单元的质量将添加到网格的单元数据中,该数据位于名为“质量”的数组中不支持的单元格类型

此筛选器的条目为0。使用SaveCellQualityOff()仅存储最终统计信息。

菲利普·佩贝(Philippe Pebay)和大卫·汤普森(David Thompson)编写的这个版本的滤镜超过了罗巴特研究所成像研究实验室的莱拉·巴格达迪(Leila Baghdadi)、哈尼夫·拉达克(Hanif Ladak)和大卫·斯坦曼(David Steinman)编写的旧版本。

该版本只支持四面体半径比。请参阅CompatibilityModeOn()成员,了解如何使此筛选器的行为与之前的实现类似的信息。

有关此类三角形质量函数的更多信息,请参阅Pebay&Baker 2003,三角形质量度量分析,数学综合72:244。

有关此类四边形质量函数的更多信息,请参阅Pebay 2004,《平面四边形质量度量》,英文版20:2。

@警告

虽然比以前更一般,但这个类并没有处理许多单元类型,包括3D中的楔形和棱锥体,2D中的三角形带和扇形(等等)。

大多数四边形质量函数仅适用于平面四边形。

严格来说,最小角度不是一个质量函数,但它之所以被提供,是因为许多作者使用了它。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片