四叉树和八叉树网格的可视化


10

对于需要自适应网格细化的应用,所谓的四叉树八叉树网格非常有吸引力。例如,它们在GerrisParamesh中使用。有谁知道这种网格的良好文件格式并支持可视化软件?另请参阅Gerris常见问题解答中的此答案。我目前知道的唯一潜在候选人是VTK HyperOctree类,但是似乎几乎没有文档。

作为网格的特定示例,考虑一个稀疏的八叉树网格,该网格由框组成,每个框包含元。我目前在Visit / Paraview中的策略是:1048×8×8=512

  1. 将网格写入为非结构化的VTK文件。对于较大的数据集,这是昂贵的,并且不会利用四叉树/八叉树的“结构化”。
  2. 将树中的相邻“框”收集到更大的块中,并编写一个块结构的网格。这涉及很多额外的代码,并且丢失了嵌入在四叉树/八叉树中的连接信息。

更新如果当前没有可行的格式可以直接编写和可视化octree网格,我将为可用于将octree编写为块结构网格的文件格式提出建议。理想情况下,此格式:

  1. 具有相对简单的定义/实现,理想情况下是开源的,并具有C / Fortran兼容性。
  2. 可以有效地处理大量的网格块(例如1000个或更多)。
  3. 允许轻松指定网格块的连通性,尤其是在细化边界处。

我目前正在为此目的使用Silo,但我正在寻找在上述三个方面得分更高的东西(更小,更快,更简单)。


1
为什么非结构化网格会创建太多数据?只有500万个单元。对于我来说,这是一个非常小的数据集,可以在Visit或Paraview中可视化。
Wolfgang Bangerth '16

因为坐标和连接性是每个单元格指定的,而不是每个框仅指定一次(例如包含512个单元格)。对于较大的数据集(例如,2000万个单元或更多),可视化变得比使用块结构的网格要慢得多,尤其是当网格的重要部分处于相同的细化级别时。
Jannis Teunissen '16

也许在访问支持的文件格式列表是这个问题很有用:visitusers.org/...
Jannis Teunissen

1
也许还要看看CHOMBO,SAMRAI等如何进行可视化?
Abhilash Reddy M 2016年

1
将BoxLib添加到列表中。他们开发了一个名为AMRVis的程序包以可视化AMR数据。该代码可从LBL网站获得。
Abhilash Reddy M 2016年

Answers:


2

在我进行多级优化时,我曾经分别在不同级别上编写网格文件。通常,级别0是保持不变的基本粗糙网格。对于1级及更高版本,我对不同的补丁使用了不同的文件。假设您在1级上有5个高级补丁,我的策略是在程序末尾编写5个不同的文件,例如Level_1_Patch_1,Level_1_Patch_2 ...,这些可以在C中动态完成(在Fortran中无法使用)。

        char filename1[64];
        sprintf(filename1, "Patch%d.dat", patch_number);

        FILE *file;
        file= fopen(filename1, "wb");

我应该在这里提到我使用了有限差分的结构化网格系统。

所以一旦我有了所有级别及其.PLT或.DAT文件。我将所有这些导入到TecPLOT中。例如,当我在第1级上编写带有两个精细补丁的两级代码时,您的网格在Tecplot中应该看起来像这样。

在此处输入图片说明

我对处理非结构化网格不是很熟悉,但是结构化的网格在Tecplot中处理得很好


阅读有关您的方法的有趣信息,但是对于大型八叉树而言,这似乎不可行,因此您必须编写和读取数千个文件,这通常相当慢。
Jannis Teunissen '16

1
@JannisTeunissen:如果您要使用块结构化解决方案,那么对于Tecplot,可以将所有块作为单独的“区域”(tecplot术语)写入同一文件中。它们不必是单独的文件。但是,并行I / O不存在。大型数据集将阻塞。可以将tecplot文件加载到ParaView中(Tecplot是专有的)。ascii格式非常简单。通过一些努力,您也可以直接以tecplot格式编写二进制文件。有一个名为TecIO的官方库,您可以链接您的代码以更轻松地创建文件。
Abhilash Reddy M

我认为这不会比我目前在Silo上使用的方法更好,后者是开源的。请注意,ASCII文件对于此问题并不是真正可行的。
Jannis Teunissen '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.