• Nenhum resultado encontrado

3.3 Pré-processamento

3.3.1 Geração da malha

O OpenFOAM sempre opera em um sistema de coordenadas cartesianas de três dimensões, sendo que todas as geometrias são geradas em 3D. Por padrão, ele resolve o caso em três dimensões, mas pode ser instruído para resolver em duas especificando-se uma condição de contorno especial “empty” para o contorno normal à dimensão na qual não é necessária nenhuma solução.

Para gerar a geometria, o OpenFOAM não apresenta um editor CAD. Porém, ele possui dois utilitários para gerar a malha, que são o blockMesh e o snappyHexMesh. Outra opção é a importação de malhas geradas em outros programas. Vale a pena comentar que, com o lançamento do OpenFOAM versão 2.3.0, foi lançado um novo utilitário para geração de malhas, o foamyHexMesh. Entretanto, ele não será comentado neste texto.

3.3.1.1 blockMesh

O blockMesh é um gerador de malha fornecido com o OpenFOAM, que tem a capacidade de gerar malhas estruturadas a partir das informações sobre a geometria e sobre os contornos do domínio contidas em um arquivo de configuração chamado

blockMeshDict, localizado no diretório constant/polyMesh.

O princípio por trás do blockMesh é decompor a geometria do domínio em um conjunto de um ou mais blocos hexaédricos tridimensionais. As arestas dos blocos podem ser linhas retas ou arcos e cada bloco é definido por oito vértices (um para cada canto do hexaedro). Os vértices são numerados e escritos em uma lista, formando pontos no espaço tridimensional. É possível gerar blocos com menos de oito vértices fazendo-se o colapso de um ou mais pares de vértices em outro.

Para ilustrar o uso do blockMesh, será analisado um tutorial do OpenFOAM chamado

cavity, disponível no diretório $FOAM_RUN/tutorials/incompressible/icoFoam/cavity.

A Figura 18 representa a geometria do problema. Todos os contornos são paredes, sendo que a parede superior move-se na direção x com uma velocidade de 1 m/s, enquanto as outras três são estacionárias. A Figura 19 representa a estrutura do bloco com a numeração dos vértices para a malha.

A Figura 20mostra o arquivo blockMeshDict para o caso cavity. A palavra-chave (keyword) convertToMeters especifica um fator de escala pelo qual todas as coordenadas dos vértices na descrição da malha são multiplicados, o significa que, para esse exemplo, as coordenadas estão em decímetros.

Figura 18 – Geometria do caso cavity Fonte:OpenFOAM User Guide (2012)

Figura 19 – Numeração do bloco para geração da malha do caso cavity Fonte:OpenFOAM User Guide (2012)

A palavra-chave vertices lista todos os vértices de todos os blocos por suas coordenadas cartesianas. A nomenclatura dos vértices é feita conforme a ordem em que são declarados, começando a partir do “0” conforme mostrado na Figura 19.

A palavra-chave blocks contém a definição dos blocos, que é feita por uma série de entradas. A primeira é o identificador do formato do bloco, que é sempre hex por ser sempre um hexaedro. Em seguida vem a declaração dos vértices que compõem o bloco e um vetor que indica o número de células em cada direção do plano cartesiano. Esse exemplo contém apenas um bloco com 20 células na direção x, 20 na direção y e uma na direção z. No OpenFOAM, problemas 2D são tratados como 3D, onde a dimensão que se deseja ignorar contém apenas uma célula de comprimento. A última entrada fornece a razão de expansão das células para cada direção do bloco, o que permite que a malha seja refinada em direções específicas. Essa razão representa o comprimento da última célula de uma aresta do bloco dividido pelo comprimento da primeira célula dessa aresta.

Figura 20 – blockMeshDict para o caso cavity Fonte: Tutorial cavity do OpenFOAM

A palavra-chave edges define as arestas dos blocos, que são consideradas retas por padrão. Contudo, é possível criar arestas curvas, por exemplo, utilizando-se a entrada arc para descrever um arco circular. A lista edges é requerida apenas se a geometria tiver arestas curvas, se não pode ser deixada sem entradas, como no exemplo.

A palavra-chave boundary lista os contornos da malha, que são declarados com os nomes movingWall, fixedWalls e frontAndBack no exemplo. Para cada contorno, é especificado seu tipo como patch, wall, ou empty, e também as faces que o compõe. Cada face é definida por uma lista de 4 vértices. Deve-se tomar bastante cuidado ao declarar esses vértices. A ordem com que eles devem ser declarados deve ser tal que o vetor área aponte para fora da superfície, o que pode ser verificado aplicando-se a “regra da mão direita”. Em outras palavras, olhando a superfície da face pelo lado de fora, a ordem dos vértices deve seguir um sentido anti-horário.

Com todos os parâmetros do dicionário blockMeshDict definidos, para se criar a malha basta executar o comando blockMesh em um terminal a partir do diretório raiz do caso. O blockMesh lê esse dicionário, gera a malha e escreve seus dados em uma série de arquivos como points, faces, cells, boundaries, neighbour, owner, localizados no diretório

constant/polyMesh do caso.

3.3.1.2 snappyHexMesh

O snappyHexMesh difere do jeito tradicional de gerar a malha em CFD. Este método utiliza um procedimento automático para criar uma malha ortogonal hexaédrica ao redor ou dentro de determinada superfície geométrica. A superfície é dada em formato STL e pode ser gerada por um sistema CAD ou por uma outra ferramenta de pré-processamento. Este método permite rápida e robusta geração de malha de geometrias complexas.

Existem vários parâmetros para o ajuste da criação da malha. A densidade inicial da malha é definida através da criação de um bloco que cobre todo o domínio, sendo essa a malha de refinamento nível 0. O nível de refinamento para a área da superfície pode ser tanto para todo o modelo quanto para diferentes componentes da superfície separadamente. A adaptação da espessura da camada de superfície e a máxima não- ortogonalidade permitida das células da superfície podem ser definidos, entre muitos outros parâmetros. O processo de geração da malha é iterativo e, portanto, os parâmetros computacionais também precisam ser definidos.

A definição dos parâmetros e o processo de geração da malha são descritos em detalhes no OpenFOAM User Guide (2012), capítulo 5.4.

Kortelainen (2009) fez um interessante trabalho onde compara o snappyHexMesh do OpenFOAM com outros dois softwares de geração de malha gratuitos, o SALOME e o Gmsh.

3.3.1.3 Importação de malhas

Muitas vezes nos deparamos com casos que apresentam malhas complexas e não estruturadas. O OpenFOAM permite importar malhas (estruturadas ou não) geradas em

outros softwares, comerciais ou gratuitos, convertendo-as para o formato utilizado por ele. Para tal, deve-se executar um comando específico no terminal no diretório raiz do caso. Alguns dos utilitários conversores de malha são:

• fluentMeshToFoam: converte um arquivo .msh do Fluent;

• star4ToFoam: converte arquivos de malha do STAR-CD/PROSTAR; • gambitToFoam: converte arquivos de malha do GAMBIT;

• ideasUnvToFoam: converte arquivos de malha no formato I-Deas unv; • gmshToFoam: converte um arquivo de malha .msh escrito pelo Gmsh.

Uma tabela com todos os utilitários conversores de malha do OpenFOAM está disponível no capítulo 3.6 do OpenFOAM User Guide (2012), e mais informações em seu capítulo 5.5.

3.3.1.4 checkMesh

Um utilitário de grande importância é o checkMesh. Ele faz um diagnóstico da sua malha, relatando diversos aspectos das propriedades topológicas e geométricas, como ortogonalidade, assimetria, orientação ou número de regiões.

É altamente aconselhável que o usuário execute o checkMesh sempre que importar malhas de outros softwares para a detecção de possíveis erros oriundos da geração da malha ou de seu processo de conversão.

Ele é executado no terminal a partir do comando checkMesh dentro do diretório raiz do caso.