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.

February 25, 2008

Exercício para você

Ok, ok... É a última de hoje!

Calcule a função vorticidade do aparato demonstrado no vídeo em anexo.

video

Brincadeira! Mas o chafariz (se é que se pode dizer isso) ficou muito legal, não? Veja mais aqui.

Uma visão geral do pacote CFD OpenFOAM

Resolvi postar aqui a série de artigos que eu escrevi sobre o OpenFOAM e estavam sendo colocadas no CFD-Brasil.

Introdução
Sem dúvida alguma, os pacotes CFD facilitam a análise de uma ampla faixa de condições de escoamento. A importância dos pacotes CFD têm crescido muito nos últimos anos devido à confiabilidade e à rapidez dos resultados assim obtidos e à economia frente a testes experimentais. Este fato se deve aos avanços em termos de modelagem dos fenômenos físicos, das técnicas numéricas para solucionar o problema e da capacidade computacional. Como consequência, além da facilidade de uso, a atualização das técnicas presentes nos códigos CFD e o desenvolvimento de novas metodologias numéricas e modelos físicos devem sempre ser pontos cruciais em CFD. Desta forma, é interessante que o usuário possa interagir intimamente com o pacote, possibilitando a extensão do código para aprimorar a ferramenta ou mesmo implementar novas formas de solucionar um problema específico.

Devido ao fato de ser gratuito e distribuído com código aberto, o OpenFOAM surge como uma ótima opção à resolução de uma grande variedade de problemas CFD. Este artigo é o início de uma série que irá apresentar uma visão geral do OpenFOAM considerando os motivos para escolhê-lo como ferramenta CFD e detalhes de sua origem. Nos outros artigos, veremos detalhes e recursos de configuração de uma simulação no OpenFOAM.

Escolha do OpenFOAM
São várias as considerações que devem ser avaliadas ao escolher um pacote CFD como ferramenta, entre elas a facilidade de uso, a capacidade de montar a geometria e gerar malhas, a eficiência e robustez das técnicas numéricas implementadas e, por fim, a amplitude dos problemas físicos que o pacote pode resolver. Esses fatores dependem muito do grau de desenvolvimento e do investimento colocado no pacote. Sem dúvida alguma, atualmente os pacotes CFD mais desenvolvidos são os comerciais, como CFX, FLUENT e PHOENICS, justamente devido ao seu apelo comercial. Contudo, os preços dos pacotes comerciais somam uma quantia enorme ao usuário final - em média US $ 25000 para uma única licença em período de um ano - fato que limita seu uso. Existem muitos códigos CFD gratuitos disponíveis, contudo normalmente estes possuem uma área de aplicação limitada. O ideal é que exista uma ferramenta CFD que seja geral o suficiente para ser aplicada em diversas áreas, poderosa, robusta e gratuita.

Os pacotes CFD, pagos ou não, tipicamente requerem do usuário um grande esforço dedicado à compreensão e ao seu uso correto. Os códigos CFD irão fornecer uma resposta à maioria dos problemas quando estes forem apropriadamente colocados, porém é necessário paciência, prática e experiência para produzir resultados razoáveis. A interface de integração com o usuário oferecida pelos pacotes CFD é algo que sempre deve ser considerado ao escolher um software.

Além disso, os códigos para solução de problemas CFD necessitam de ferramentas de geração de malha e visualização científica (pré e pós-processamento) de modo a se tornarem úteis. A maioria dos códigos CFD livres não inclui estas duas ferramentas. Apesar disso, existem vários programas específicos para geração de malha e visualização de dados independentes, contudo o usuário deve despender de um grande esforço para interligar estes com o código CFD.

Tendo colocado as considerações acima, pode-se colocar os pontos para basear a escolha do OpenFOAM como ferramenta CFD. Os fatores da escolha estão listados abaixo com alguns comentários. Maiores detalhes sobre os tópicos serão colocados posteriormente quando aplicável.

  • Código aberto e escrito em C++; A praticidade de ter o código em mãos é indescritível. A grande maioria dos manuais dos pacotes CFD comerciais contém dados incompletos sobre a modelagem e implementação numérica. Ao analisar código, o usuário é capaz de obter todas estas informações. E mais, ele pode alterar o código existente (ou criar um novo) para atender as necessidades do problema.
  • Simplicidade no uso como uma ferramenta CFD; Apesar de não ter uma interface gráfica tão avançada quanto a dos softwares comerciais, o uso e operação do OpenFOAM é realizada de modo semelhante.
  • Ferramentas gratuitas de geração de malha e visualização de dados incorporados ao pacote;
  • Generalidade da malha (estruturada ou não-estruturada), inclusive com a possibilidade de importar malhas de outros programas (gratuitos e comerciais);
  • Possibilidade de interação direta com os desenvolvedores do pacote; Os desenvolvedores do OpenFOAM participam intensivamente de uma lista de discussão em inglês sobre o pacote, respondendo perguntas sobre o uso e implementação, dando dicas, etc.
  • Ampla faixa de aplicações na engenharia, incluindo escoamentos turbulentos, com troca de calor, multifásico, etc;
  • Multi-plataforma (Linux, Solaris, MacOS, Linux 64 bits, etc); Já existe uma versão adaptada para Windows.
  • Possibilidade de executar simulações de grande porte em um cluster de computadores; Implementações cada vez mais eficientes de paralelismo estão sendo incorporadas ao OpenFOAM.
  • Ferramentas de exportação de resultados para visualização em outros programas gráficos; Facilita a obtenção dos resultados utilizando o software que mais agrade ou se encaixe nas necessidades do usuário.
  • Desenvolvimento tende a ser realizado pelo meio acadêmico. A tecnologia mais avançada em termos de modelagem CFD, técnicas numéricas (geração de malha, métodos de discretização, solução de sistemas lineares, etc) e computação científica (visualização e paralelismo) provêm do meio acadêmico. Que bom que o OpenFOAM é implementado por eles, não?
Origem do OpenFOAM
Quando um projeto de construção de um código CFD é iniciado, é interessante estruturá-lo de forma que se torne geral o suficiente para que outras pessoas possam usá-lo no futuro como uma ferramenta confiável, eficiente e de fácil manipulação. Esta preocupação envolveu os pensamentos dos então alunos de doutorado do Imperial College, Henry Weller e Hrvoje Jasak quando, em 1993, combinaram esforços para desenvolver o código do FOAM (Field Operation And Manipulation) para operar e manipular campos tensoriais visando a sua aplicação à fluidodinâmica computacional. A tecnologia do FOAM é baseada em um conjunto eficiente e flexível de módulos escritos em C++ que são usados com o intuito de construir: (i) 'solvers' para resolver problemas específicos de engenharia que envolvam campos vetoriais, (ii) utilitários para realizar tarefas de pré e pós-processamento, que vão de uma simples manipulação de dados à visualização e construção e processamento de malhas, e (iii) bibliotecas de expansão usadas pelos 'solvers' e utilitários, tal como uma biblioteca de modelos físicos.

Ao longo dos últimos anos, o FOAM vinha sendo desenvolvido em uma linha comercial pela empresa inglesa Nabla, com a idéia de fornecer ao usuário final uma ferramenta para simulações CFD de processos fisicamente complexos e oferecendo serviços de consultoria sobre o uso do software e implementação de novos solvers com modelagem complexa. Contudo, os desenvolvedores chegaram a conclusão de que a abordagem comercial não era a ideal. Assim, em 12 de dezembro de 2004 o código do FOAM se tornou de domínio público sobre a GPL (Gnu Public License) e o programa passou a ser chamado de OpenFOAM (referente ao código ser aberto). Segundo os desenvolvedores, esta nova fase de desenvolvimento do código começa com o fim de sua abordagem comercial, reconhecendo que o OpenFOAM que o futuro do código só pode ser garantido através de colaborações e interações com o meio acadêmico.

Desde que seu código foi liberado, a comunidade científica têm tratado o OpenFOAM com muito interesse testando-o para casos benchmark, utilizando em projetos de pesquisa e propondo inúmeras colaborações para o desenvolvimento do código. Foi criado um grupo de discussão na internet sobre o OpenFOAM para discutir aspectos de uso, implementação de código e análise numérica do software aberto. Um comentário do Prof. Jasak em especial reflete a situação atual do OpenFOAM: "É incrível a popularidade que o OpenFOAM está recebendo da comunidade científica. O código está se espalhando como um poderoso vírus na internet''. É certo que se o objetivo de usar o código em um ambiente de colaborações for alcançado, o OpenFOAM terá grandes chances de crescer e se tornar uma das maiores plataformas de CFD em código aberto da próxima geração.

Conclusões
Bem, o primeiro contato já foi feito e espero ter aguçado a sua curiosidade sobre o OpenFOAM. São inúmeras vantagens em se utilizar um pacote CFD com código livre e, na minha opinião, a compreensão da implementação do modelo é a principal delas. Já presenciei ocasiões em que o uso de pacotes CFD comerciais ficava limitado pela falta de detalhes e flexibilidade sobre a implementação do código (e da modelagem também). Nestas horas, a sua formação e o seu conhecimento de CFD irão fazer a diferença somente se você puder usá-los livremente. Ou seja, com o código CFD em mãos.

Estudante barrada. Que vergonha!

Fiquei indignado com a notícia sobre a estudante de física, Patrícia Magalhães, que, a caminho de um congresso científico em Lisboa, fez conexão na Espanha mas ficou retida no aeroporto de Madri durante três dias. Isso impossibilitou sua participação no congresso além disso ser uma vergonha!

Não tenho dúvidas de que as autoridades acharam que ela era mais uma imigrante ilegal tentando entrar no país. Analisando friamente, sabe-se que a Espanha é um local de recepção de prostitutas. Mas e os trabalhos da garota? Nunca soube de nenhuma prostituta carregando trabalhos de física avançada debaixo do braço. E se um dia você vir isso, provavelmente a quenga vai cobrar mais caro devido aos "atributos" a mais (a presença do cérebro!).

E o consulado brasileiro nessa hora? Deveria ter tomado uma atitude mais enérgica! É uma estudante representando a comunidade acadêmica brasileira no exterior. O nome do nosso país é manchado com uma notícia dessas.

Além disso, os contatos profissionais e as oportunidades que aparecem nesses congressos são muito interessantes para o aluno. Sei muito bem disso pois tive a oportunidade de participar recentemente da 1st OpenFOAM International Conference, que ocorreu na Inglaterra. Tive a oportunidade de conhecer pessoalmente os desenvolvedores originais e atuais mantenedores do OpenFOAM (Henry Weller e o time da OpenCFD), tive contato com o diretor e funcionários de empresas CFD (propostas de emprego também!), professores e alunos. Inclusive, tive um ótimo papo com o Prof. Hrvoje Jasak. Ele é um dos idealizadores do OpenFOAM (programa que usei durante toda a minha tese) e é um cara muito competente, ótimas idéias e extremamente acessível. Só isso já valeu a viagem! Por fim, a apresentação do meu trabalho na conferência, que repercutiu bastante e acertou em cheio os anseios dos pesquisadores lá presentes.

O que me deixou mais chateado nessa história toda é que eu sei das oportunidades e experiências que eu tive nessa conferência. E, realmente, isso não tem preço. Gostaria muito que tudo tivesse corrido bem com a Patrícia, assim como aconteceu comigo.

Veja a notícia publicada sobre o acontecimento com a Patrícia aqui, aqui e aqui.