使用 vtkGhostType 删除 .vtu 文件中的平行幽灵点

问题描述

我正在尝试编写和可视化非结构化网格 (.pvtu/.vtu),但我似乎无法理解这一点,并且单元格 vtkGhostType 已计算得出我的结果想要。

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

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

<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(注意Volume的slave节点5值不正确,不应该被渲染)

<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

<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. CellData:vtkGhostType 标记所有共享单元格 0,除了一个 .vtu 并设置为 0。这给了我以下结果:

enter image description here

当应用 domain 1 过滤器时,RemoveGhostInfomration 中的两个从顶点被移除。但是,您会注意到其中一个从属节点的音量设置为 5,它应该是 3。 IE。 domain 0 的奴隶仍然存在。

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

enter image description here

应用相同的过滤器,获得正确的顶点数据,并删除所有从属。但是现在所有的单元格都被移除了。从可视化的角度来看,这是不可取的。

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

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)