February 27, 2008

OpenFOAM como Ferramenta CFD

Para resolver um problema CFD é necessário passar pelas seguintes etapas: a geração de geometria e malha, um pré-processamento (organiza as informações do problema), a solução numérica que resolve as equações e o pós-processamento para mostrar os resultados simulados em forma gráfica. A seqüência aborda as capacidades básicas do OpenFOAM como uma ferramenta CFD. Maiores detalhes podem ser encontrados no guia de usuário (User's Guide) e no guia do programador (Programmer's Guide) que acompanham o software (presentes no diretório OpenFOAM-versao/doc/Guides-a4).

Estrutura de Arquivos da Simulação
Cada caso a ser simulado no OpenFOAM segue uma estrutura de diretórios que contém os arquivos que configuram o mesmo. Estes arquivos possuem as informações necessárias para simular o caso, como a descrição da geometria, detalhes da malha e condições de contorno, parâmetros sobre os métodos numéricos, assim como as propriedades físicas do problema. A estrutura de diretórios pode ser vista na Figura abaixo, representada para um caso genérico (definido como nome do caso).

O diretório principal nome do caso é a "raiz" do caso analisado e dentro deste estão incluídos os outros diretórios e arquivos de configuração. Uma breve descrição sobre o conteúdo destes diretórios é colocada na seqüência.
  • Dir. de tempo - contém os arquivos individuais de dados para os campos das variáveis tratadas no caso (por exemplo, campo de velocidade, temperatura, etc.). Estes dados podem ser os valores iniciais e as condições de contorno que o usuário deve especificar para definir o problema (referente ao instante inicial da simulação) ou os resultados transientes da simulação, escritos em arquivo pelo OpenFOAM. Note que em todos os casos, o OpenFOAM necessita que o usuário forneça os campos iniciais das variáveis da simulação (mesmo para casos estacionários). O nome assumido por Dir. de tempo refere-se ao instante simulado em que os dados são escritos. Por exemplo, ao escrever os dados referentes ao instante t = 1.5 s de uma simulação qualquer, o OpenFOAM cria um diretório intitulado 1.5 e escreve os resultados pertinentes ao caso dentro deste diretório.

  • system - os arquivos contidos neste diretório estão associados com o procedimento de solução do caso. Pelo menos 3 arquivos devem estar contidos em system: [a.] controlDict, onde se define os parâmetros de controle da simulação, como o tempo de início e término da simulação, passo de tempo, controle de escrita de dados, etc. [b.] fvSolution, que seleciona os métodos para resolver o sistema de equações lineares e suas tolerâncias, assim como outros parâmetros de controle do algoritmo de solução. [c.] fvSchemes seleciona as aproximações de discretização por volumes finitos usados na solução do problema.

  • constant - deve conter os arquivos de propriedades físicas pertinentes ao caso, por exemplo, transportProperties, turbulenceProperties, etc. A descrição completa da geometria e da malha deve ser incluída no diretório polyMesh, nos arquivos blockMeshDict e boundary.
O usuário pode alterar diretamente os arquivos de configuração usando um editor de texto qualquer ou pode usar a ferramenta gráfica FoamX para tal tarefa. O FoamX acessa os arquivos de configuração alterando-os e organizando as informações pertinentes ao caso. Fica a cargo do usuário a escolha pelo uso do FoamX ou o acesso direto dos arquivos. A Figura abaixo mostra a janela do FoamX com o caso bubbleFoam aberto.
Há muito tempo eu não uso mais o FoamX, preferindo editar diretamente os arquivos texto para configurar o caso. Uma coisa boa do FoamX é que ele mostra as opções a serem escolhidas e, para o usuário iniciante, isso é muito importante.

Geração de Geometria e Malha
O OpenFOAM não possui um editor CAD para construção da geometria do problema, que é armazenada no arquivo de configuração blockMeshDict. O princípio por trás da construção da geometria no OpenFOAM é a decomposição do domínio computacional 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 hexágono). Os vértices são numerados e escritos em uma lista, formando pontos no espaço tridimensional. Geometrias mais complexas podem ser geradas pela combinação de mais blocos ou pelo colapso de um ou mais pares de vértices em outro. A construção da geometria é realizada através do conjunto das coordenadas dos vértices (ou arcos) de blocos colocadas no arquivo blockMeshDict.

O OpenFOAM tem a capacidade de gerar malhas estruturadas a partir das informações sobre a geometria e condições de contorno do problema contidas nos arquivos de configuração blockMeshDict e boundary (presentes no subdiretório constant/polyMesh). Além de incluir os dados de geometria do problema, o arquivo blockMeshDict ainda contém as informações da malha como o número de células na discretização em cada eixo coordenado, a razão de expansão das células na malha (permite o alterar o gradeamento da malha) e os patches presentes na geometria.

O comando blockMesh gera arquivos a partir do blockMeshDict e do boundary, estruturando os dados da malha em pontos, faces e conectividade entre as células (arquivos points, faces, owner e neighbour). Com estas informações, o solver é capaz de entender os dados de geometria e malha.

Contudo, sabe-se que na maioria dos casos práticos é conveniente fazer uso de malhas não estruturadas. O OpenFOAM pode importar geometrias e malhas (estruturadas ou não estruturadas) geradas em outros softwares, comerciais como CFX, GAMBIT, FLUENT ou livres como NETGEN, TETGEN, GMSH, etc., convertendo-as ao formato usado pelo OpenFOAM.

Pré-processamento
O pré-processamento no OpenFOAM consiste na definição dos arquivos contendo o controle das condições de simulação e as propriedades físicas e modelos adicionais do problema. Como já foi citado, as informações inclusas no arquivo controlDict permitem controlar o tempo de simulação, passo de tempo, etc. Porém, outros arquivos de controle de simulação podem ser colocados no diretório system. Um deles é o controle das simulações em paralelo é feito pelo arquivo decomposeParDict. O OpenFOAM usa a biblioteca de domínio público MPI (Message Passage Interface) para a comunicação entre os computadores e a decomposição do domínio pode ser feita por quatro métodos diferentes, onde o METIS se destaca devido à grande eficiência no particionamento da malha.

Os métodos numéricos para a discretização dos termos derivativos das equações são definidos no arquivo de configuração fvSchemes. É imperativo que cada termo da equação esteja vinculado à uma aproximação numérica. O método de discretização padrão adotado pelo OpenFOAM é a integração de Gauss para volumes finitos. A integração de Gauss é baseada na soma dos fluxos das variáveis nas faces do volume, que devem ser interpolados a partir do centro dos volumes. O usuário pode escolher livremente o tipo de método de interpolação a ser usado. Dentre estes, pode-se citar as abordagens de interpolação linear (diferenças centrais), upwind, QUICK, MUSCL, TVD (Total Variation Diminishing) e NV (Gamma Normalised Variable). Para a integração no tempo, o OpenFOAM dispõe dos métodos de Euler explícito e Crank-Nicholson implementados em seu código.

Nesta etapa também devem ser definidos os métodos de solução de equações lineares e suas respectivas tolerâncias, assim como alguns parâmetros para o algoritmo de solução do campo de escoamento (correção pressão-velocidade e ortogonalidade da malha). Estas informações estão alocadas no arquivo de configuração fvSolution. Os métodos de solução de matrizes esparsas implementados no OpenFOAM são iterativos e portanto baseam-se em reduzir o resíduo das equações até um valor pré-estabelecido. Entre os algoritmos implementados no OpenFOAM, pode-se citar os métodos de Gauss-Seidel, Multigrid algébrico e variantes do gradiente conjugado. O método de solução é interrompido quando o resíduo se torna menor que a tolerância especificada (tol) e a razão entre os resíduos da iteração atual e inicial for menor que a tolerância relativa (relTol).

Os algoritmos PISO (pressure-implicit split-operator) e SIMPLE (semi-implicit method for pressure-linked equations) estão implementados no OpenFOAM para resolver o acoplamento pressão-velocidade presente nas equações de escoamento de fluidos. Os dois algoritmos são baseados em procedimentos iterativos, avaliando a solução em dado instante de tempo e, então, corrigindo-a. O OpenFOAM utiliza o SIMPLE para simular casos estacionários e o PISO para transientes.

Por fim, deve-se definir as propriedades físicas e os modelos adicionais usados na simulação em arquivos específicos para cada caso.

Solução Numérica
As simulações no OpenFOAM são realizadas por arquivos executáveis chamados solvers que lêem as informações referentes ao caso (malha e condições de simulação) e resolvem problemas específicos de mecânica do contínuo. Na essência, os solvers são resultado da compilação dos arquivos fonte e a solução numérica depende de como as bibliotecas do OpenFOAM são usadas para montar o algoritmo de solução. São vários solvers que já vem compilados no OpenFOAM e prontos para serem usados. Verifique-os no Guia do Usuário ou veja diretamente seus códigos-fonte no diretório applications/solvers.

Na essência, os solvers lêem as informações da simulação (fornecidas nas etapas descritas anteriormente), resolvem as equações através de metodologias de solução específicas para cada caso e geram arquivos de resultados para pós-processamento. O OpenFOAM permite que o usuário acompanhe os resíduos das equações com a saída dos valores em tela ou em arquivo. O tempo computacional do cálculo também é retornado ao usuário.

Pós-processamento
O OpenFOAM possui uma ferramenta para o pós-processamento dos resultados que é denominada de ParaFoam, adaptada do software ParaView para visualização científica de código aberto. Este, por sua vez, é baseado no VTK que é um software livre para o processamento de dados e renderização de imagens.

As ferramentas básicas para visualização de resultados CFD estão incluídas no paraFoam, como a criação de gráficos de contorno, vetores e linhas de fluxo. Ainda é possível criar animações para analisar o transiente dos resultados. Contudo, muitos usuários ainda sentem a necessidade de usar outros softwares de visualização devido aos recursos mais avançados que este dispõe ou mesmo por comodidade. É possível converter os resultados fornecidos pelo OpenFOAM para formatos lidos por outros softwares como FLUENT, Fieldview, Ensight, Tecplot e GMV, utilizando ferramentas fornecidas junto com o OpenFOAM. Existe ainda uma ferramenta de conversão dos resultados do OpenFOAM para o formato VTK possibilitando a leitura dos dados em qualquer visualizador que use VTK.

1 comment: