quarta-feira, 1 de setembro de 2010

Malhas estruturadas e não-estruturadas vs. malhas tetraédricas e hexaédricas

Um erro muito corriqueiro, mas muito mesmo, em artigos, apresentações, relatórios, etc., é se referir a malhas hexaédricas (ou quadriláteras) como "malhas estruturadas". Quando se trata de ANSYS FLUENT ou ANSYS CFX esse erro é ainda mais evidente. Já explico o porquê. Primeiro vamos ver a definição de malha estruturada e malha não estruturada. 
Para explicar o conceito, peguei duas figuras emprestadas do livro do prof. Maliska:


Imaginando que se deseja simular a transferência de calor, ou o escoamento ao redor de um tubo (por exemplo), pode-se utilizar qualquer uma das malhas abaixo:


A primeira malha é "usualmente" dita estruturada e a segunda é dita não estruturada. Quanto a segunda ser não estruturada, tudo bem, ela realmente é, mas isso é uma das características dela, é uma malha composta por volumes (ou elementos) triangulares não estruturada.
Quanto a primeira ser estruturada, daí depende. A única coisa que se pode dizer ao certo, apenas de olhar, é que é uma malha composta por volumes (ou elementos) quadriláteros, nada mais!
Para essa malha ser estruturada, a numeração dos volumes (ou elementos) deve seguir uma "estrutura fixa" de forma que o número de cada volume seja consecutivo ao seu vizinho. Um exemplo disso está na figura abaixo (analisando um quarto da primeira malha).


Como se pode observar, a primeira camada de volumes está numerada consecutivamente e assim por diante para as camadas (na direção radial) mais internas. Dessa forma todos os vizinhos de cada volume são conhecidos e obtidos de uma forma bem simples, uma conta algébrica trivial. 
Por exemplo, para o volume 17: o vizinho radial externo é 17-15=2; o vizinho de um lado é 17-1=16; do outro é 17+1=18 e; o vizinho radial interno é o 17+15=32. E isso vale para qualquer outro elemento da malha. O fato de "conhecer seus vizinhos" através de expressões simples traz um número enorme de vantagens na hora de programar um código. Facilita o cálculo dos balanços, diminui o número de acessos à memória, diminui a própria quantidade de memória necessária, e assim vai. A malha acima é dita então estruturada composta por elementos quadriláteros.
Agora, quem disse que essa malha é numerada assim? Ela pode ter sido gerada (por algum motivo qualquer, dependendo do software e do método utilizado na geração) assim:


Se os volumes estiverem numerados dessa forma, já era a malha estruturada. Claramente não há mais como conhecer os vizinhos de qualquer elemento da malha por simples conta algébrica. Dessa forma a "mesma" malha (com volumes e nós exatamente nas mesmas posições da anterior) deixa de ser estruturada. Agora é necessário se ter na memória, matrizes (ou vetores) de "conectividade". Essas matrizes são listas dizendo, para cada volume, quem são seus vizinhos. Isso é então uma malha não estruturada composta de elementos quadriláteros.
O uso da malha não estruturada faz com que o código a ser programado seja mais complexo. Também impõe que se tenha que acessar a matriz de conectividade várias vezes, aumentando o número de operações na máquina em relação à malha estruturada. Essas são algumas desvantagens. Além dessas, geralmente o uso de malhas não estruturadas gera vizinhos "muito distantes" (em termos da numeração deles, como o 5 que é vizinho do 92 acima), isso também prejudica questões de alocação de memória (principalmente).
A vantagem da malha não estruturada é que, em geometrias complexas, consegue-se gerar uma malha com relativa facilidade. Fazer uma malha estruturada não é tão simples e, em casos bastante complicados, chega a ser impossível.
Dessa forma fica evidente que uma malha composta por volumes quadriláteros (ou hexaédricos) não é necessariamente uma malha estruturada. Da mesma forma uma malha composta por elementos triangulares ou tetraédricos pode ser uma malha estruturada. Imagine simplesmente se dividir em 2 triângulos cada volume quadrilátero da malha estruturada acima, ainda assim poderemos saber quem são os vizinhos de cada volume através de expressões algébricas bastante simples. Assim teríamos uma malha estruturada composta por elementos triangulares.
No início do post eu falei que quando se trabalha com ANSYS FLUENT ou ANSYS CFX o "erro" de se chamar malhas hexaédricas de estruturadas é ainda mais evidente. Isso é porque nenhum dos dois códigos é escrito para trabalhar com malhas estruturadas! Isso quer dizer que, mesmo que a numeração dos volumes esteja sequencial, eles vão precisar de matrizes de conectividade. Tratando a "malha estruturada" como não estruturada. 
De qualquer forma, muitas malhas hexaédricas feitas, por exemplo, no ICEM, não são estruturadas (independendo do solver a ser utilizado). Quando se usa uma abordagem de blocos no ICEM para gerar uma malha hexaédrica, na maioria das vezes, por questões de complexidade geométrica, a malha não fica "estruturada", mas sim "estruturada por blocos" (dentro de cada bloco a numeração é sequencial). Na hora de transformar o pre-mesh do ICEM em malha (para CFX ou FLUENT) qual a opção usada? "Convert to unstructured mesh"! Fica claro não?
As malhas hexaédricas são trabalhosas de serem feitas, mas tem uma série de vantagens sobre as tetraédricas (mesmo com camadas de prismas) quando se tratam problemas de fluidodinâmica computacional. Porém, em muitos casos, não a de serem "estruturadas". Particularmente eu acho relaxante fazer malhas usando o blocking do ICEM, mas para a fluidodinâmica computacional esse fato é desprezível.
Bom, por hoje era isso então. 
Saudações.

8 comentários:

  1. Bom, para começar, pro inferno que fazer malha hexa é relaxante! rs
    Em segundo lugar, muito legal este post. Realmente essa confusão é bem comum.

    ResponderExcluir
  2. E aí filhão. Tu sabes que não entendo nada de engenharia, e menos ainda (se ainda for possível a minha ignorância) de malha hexa, mas tenho entendimento o bastante para saber que 99% dos brasileiros também não dominam o tema, agora, como pai, sou 100% alegria e felicidade em te ver discutindo estes assuntos na rede. Saber já é uma vitória, discutir publicamente o assunto e sujeitar-se a eventuais críticas é afirmação. Tenho a sublime honra de ser o teu pai.

    ResponderExcluir
  3. Gostei muito do post. Grata pelas informações!

    ResponderExcluir
  4. Amei o post, eu gero a malha estruturada pelo Gmsh e eu também acho relaxante ahahahahahha

    ResponderExcluir
  5. ótimo post.Ajudou no meu projeto de dinamica dos fuidos

    ResponderExcluir