Visualização de grades quadtree e octree

10

As chamadas grades quadtree e octree são bastante atraentes para aplicações que requerem refinamento de malha adaptável. Eles são usados, por exemplo, em Gerris e Paramesh . Alguém conhece um bom formato de arquivo para essas grades e oferece suporte a software de visualização? Veja também esta resposta no FAQ da Gerris. O único candidato em potencial que eu conheço atualmente é a classe VTK HyperOctree , mas parece não haver quase nenhuma documentação.

Como exemplo específico de uma malha, considere uma grade octree escassamente refinada, consistindo em caixas, cada uma contendo células. Minhas estratégias atuais em Visit / Paraview são:1048×8×8=512

  1. Escreva a grade como um arquivo VTK não estruturado. Isso é caro para conjuntos de dados maiores e não explora a 'estrutura' do quad / octree.
  2. Colete 'caixas' vizinhas na árvore em blocos maiores e escreva uma grade estruturada em blocos. Isso envolve bastante código extra e perde as informações de conectividade incorporadas no quad / octree.

Atualização Se atualmente não houver um formato viável para escrever e visualizar diretamente uma grade octree, eu gostaria de receber sugestões para um formato de arquivo que possa ser usado para gravar a octree como uma grade estruturada em bloco. Idealmente, este formato:

  1. Possui uma definição / implementação relativamente simples, idealmente de código aberto e com compatibilidade com C / Fortran.
  2. Pode lidar com eficiência com um grande número de blocos de grade (por exemplo, 1000 ou mais).
  3. Permite especificar facilmente a conectividade de blocos de grade, em particular nos limites de refinamento.

Atualmente, estou usando o Silo para essa finalidade, mas estou procurando algo que tenha uma melhor pontuação nos três pontos acima (menor, mais rápido, mais simples).

Jannis Teunissen
fonte
11
Por que a malha não estruturada cria muitos dados? Seria apenas 5 milhões de células. Esse é um conjunto de dados bem pequeno para eu visualizar no Visit ou no Paraview.
Wolfgang Bangerth
Como as coordenadas e a conectividade são especificadas por célula, em vez de apenas uma vez por caixa (contendo, por exemplo, 512 células). Para conjuntos de dados maiores (por exemplo, 20 milhões de células ou mais), a visualização se torna muito mais lenta do que com uma malha estruturada em bloco, especialmente se partes significativas da grade estão no mesmo nível de refinamento.
Jannis Teunissen
Talvez a lista de formatos de arquivos suportados em Visita é útil para esta pergunta: visitusers.org/...
Jannis Teunissen
11
Talvez também veja o que CHOMBO, SAMRAI etc faz para visualização?
Abhilash Reddy M
11
Adicione BoxLib à lista. Eles desenvolveram um pacote chamado AMRVis para visualizar dados de AMR. O código está disponível no site da LBL.
Abhilash Reddy M

Respostas:

2

No meu caso, quando eu fazia o refinamento multinível, costumava escrever arquivos de grade em diferentes níveis separadamente. Normalmente, o nível 0 é uma malha grossa básica que permanece fixa. E para o nível 1 e superior, usei arquivos diferentes para diferentes patches. Digamos que se você tiver 5 correções no nível 1, minha estratégia era gravar cinco arquivos diferentes no final do meu programa, algo como Level_1_Patch_1, Level_1_Patch_2 ... o que poderia ser feito dinamicamente em C (nunca funcionou no Fortran).

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

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

Devo mencionar aqui que usei uma diferença finita, sistema de grade estruturada.

Então, uma vez que eu tinha todos os níveis e seus arquivos .PLT ou .DAT. Eu importo todos eles no TecPLOT. Por exemplo, quando eu estava escrevendo meu código de dois níveis com algumas correções no nível 1, sua malha deve ficar assim no Tecplot.

insira a descrição da imagem aqui

Não estou familiarizado com o manuseio de grades não estruturadas, mas as estruturadas são bem tratadas no Tecplot

Tanmay Agrawal
fonte
É interessante ler sobre sua abordagem, mas isso não parece viável para uma grande octree, então você teria que escrever e ler milhares de arquivos, o que geralmente é bastante lento.
Jannis Teunissen
11
@JannisTeunissen: Se você está buscando uma solução estruturada em bloco, para o Tecplot, todos os blocos podem ser gravados no mesmo arquivo que as "Zonas" separadas (terminologia do tecplot). Eles não precisam ser arquivos separados. No entanto, a E / S paralela não existe. Conjuntos de dados grandes serão bloqueados. Os arquivos tecplot podem ser carregados no ParaView (o Tecplot é proprietário). O formato ascii é muito simples. Com algum esforço, você também pode gravar diretamente arquivos binários no formato tecplot. Existe uma biblioteca oficial chamada TecIO, na qual você pode vincular seu código para criar os arquivos mais facilmente.
Abhilash Reddy M
Eu não acho que isso funcionaria melhor do que minha abordagem atual com o Silo, que (importante) é de código aberto. Observe que os arquivos ASCII não são realmente viáveis ​​para esse problema.
Jannis Teunissen