首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用.vtu去除vtkGhostType文件中的并行鬼点

用.vtu去除vtkGhostType文件中的并行鬼点
EN

Stack Overflow用户
提问于 2021-04-15 10:28:28
回答 1查看 175关注 0票数 0

我正在尝试编写一个非结构化网格(.pvtu/.vtu)并将其可视化,但我似乎无法得到所需的点和单元格vtkGhostType来获得我想要的结果。

从我们的代码中,我们使用了一个单元格/元素重叠。因此,多个域包含相同的单元格,但重要的是没有一个域是这些共享单元的“主”。此外,我们解决了数据在顶点,这意味着我们也有重复的节点。然而,这里有一个‘奴隶-主人’关系与一个‘主人’和潜在的多个‘奴隶’。我想要的是删除重复(从)节点,但保留至少一个重复的单元格。

我的.pvtu文件包含以下内容:

代码语言:javascript
运行
复制
<VTKFile type="PUnstructuredGrid" version="1.0" byte_order="LittleEndian">
<PUnstructuredGrid>
<PPointData>
    <PDataArray NumberOfComponents="1" type="Float64" Name="Volume" format="ascii">
    </PDataArray>
    <PDataArray type="UInt8" Name="vtkGhostType" format="ascii">
    </PDataArray>
</PPointData>
<PCellData>
    <PDataArray type="UInt8" Name="vtkGhostType" format="ascii">
  </PDataArray> 
</PCellData>
<PPoints>
    <PDataArray NumberOfComponents="3" type="Float64" Name="Points" format="ascii">
    </PDataArray>
</PPoints>
<PCells>
    <PDataArray type="Int32" Name="connectivity" format="ascii">
    </PDataArray>
    <PDataArray type="Int32" Name="offsets" format="ascii">
    </PDataArray>
    <PDataArray type="Int32" Name="types" format="ascii">
    </PDataArray>
</PCells>
<Piece Source="paraview_1_domain_0.vtu"/>
<Piece Source="paraview_1_domain_1.vtu"/>
</PUnstructuredGrid>
</VTKFile>

和两个.vtu文件,paraview_1_domain_0.vtu (注意5的从节点Volume值不正确,不应该呈现)。

代码语言:javascript
运行
复制
<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian">
    <UnstructuredGrid>
        <Piece NumberOfPoints="6" NumberOfCells="2">
            <PointData>
                <DataArray type="Float64" NumberOfComponents="1" Name="Volume" format="ascii">
                    1.0000000000000000E-00
                    1.0000000000000000E-00
                    2.0000000000000000E-00
                    2.0000000000000000E-00
                    5.0000000000000000E-00
                    3.0000000000000000E-00
                </DataArray> 
                <DataArray type="UInt8" Name="vtkGhostType" format="ascii">
                0
                0
                0
                0
                3
                3
        </DataArray> 
            </PointData>
            <CellData>
                <DataArray type="UInt8" Name="vtkGhostType" format="ascii">
                0
                0
        </DataArray> 
            </CellData>
            <Points>
                <DataArray type="Float64" NumberOfComponents="3" Name="Points" format="ascii">
                    0.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    0.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                    1.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    1.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                    2.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    2.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                </DataArray>
            </Points>
            <Cells>
                <DataArray type="Int32" Name="connectivity" format="ascii">
                    0 2 3 1 3 5 4 2 
                </DataArray>
                <DataArray type="Int32" Name="offsets" format="ascii">
4 8  
                </DataArray>
                <DataArray type="Int32" Name="types" format="ascii">
9 9 
                </DataArray>
            </Cells>
        </Piece>
    </UnstructuredGrid>
</VTKFile>

paraview_1_domain_1.vtu

代码语言:javascript
运行
复制
<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian">
    <UnstructuredGrid>
        <Piece NumberOfPoints="6" NumberOfCells="2">
            <PointData>
                <DataArray type="Float64" NumberOfComponents="1" Name="Volume" format="ascii">
                    2.0000000000000000E-00
                    2.0000000000000000E-00
                    3.0000000000000000E-00
                    3.0000000000000000E-00
                    4.0000000000000000E-00
                    4.0000000000000000E-00
                </DataArray> 
                <DataArray type="UInt8" Name="vtkGhostType" format="ascii">
                3
                3
                0
                0
                0
                0
        </DataArray> 
            </PointData>
            <CellData>
                <DataArray type="UInt8" Name="vtkGhostType" format="ascii">
                1
                0
        </DataArray> 
            </CellData>
            <Points>
                <DataArray type="Float64" NumberOfComponents="3" Name="Points" format="ascii">
                    1.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    1.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                    2.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    2.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                    3.0000000000000000E-00  0.0000000000000000E-00  0.0000000000000000E+00
                    3.0000000000000000E-00  1.0000000000000000E-00  0.0000000000000000E+00
                </DataArray>
            </Points>
            <Cells>
                <DataArray type="Int32" Name="connectivity" format="ascii">
                    0 2 3 1 3 5 4 2 
                </DataArray>
                <DataArray type="Int32" Name="offsets" format="ascii">
4 8  
                </DataArray>
                <DataArray type="Int32" Name="types" format="ascii">
9 9 
                </DataArray>
            </Cells>
        </Piece>
    </UnstructuredGrid>
</VTKFile>

参考https://blog.kitware.com/ghost-and-blanking-visibility-changes/http://www.visitusers.org/index.php?title=Representing_ghost_data

我将从节点的vtkGhostType设置为3,因为我不希望在插值中使用它们。对于上述文件,我可以获得两种解决方案,这两种解决方案都不是最佳的:

  1. 标记所有与0共享的单元格CellData:vtkGhostType,但在一个.vtu中除外,并设置为0。这给了我以下结果:

当应用domain 1滤波器时,从RemoveGhostInfomration中移除两个从顶点。但是,正如您注意到的,其中一个从节点上的卷被设置为5,其中应该是3。也就是说,来自domain 0的奴隶仍然存在。

  1. 标记所有共享单元格CellData:vtkGhostType1 --给我以下结果:

应用相同的滤波器,得到正确的顶点数据,并删除所有从节点。然而,现在所有的细胞都被移除。从视觉的角度来看是不可取的。

正确的结果应该是8个节点(没有从节点)、3个单元(不重复)和一个从左到右线性变化从1到4的卷标量字段,如下图所示:

EN

回答 1

Stack Overflow用户

发布于 2022-04-04 19:32:14

我在试着理解这个问题。如果我出了什么问题,请纠正我。

中间的单元有两个版本:每个非结构化网格一个版本,每个单元格的每个版本都有部分好的点值。您想要的是通过从两个单元格中挑选樱桃来显示正确的点数。

在呈现时,不能在单元格之间混合和匹配点。您需要做的是找到一种方法,将所有正确的点值迁移到一个非结构化网格,并消除其余的点值。你可以用MPI做这个。

我应该补充一点,对非结构化网格的消隐不是在VTK中实现的。消隐只适用于结构化网格类型(vtkImageData、vtkUniformGrid、vtkRectilinearGrid和vtkStructuredGrid)。所以vtkDataSetAttributes::HIDDENCELL对非结构化网格不做任何操作。只有vtkDataSetAttributes::DUPLICATECELL在呈现时有效果。重复单元格假设映射到单元格/点的数据是有效的,可以由筛选器使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67106766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档