Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Conclusões Bem, o primeiro contato já foi feito e espero ter aguçad, Notas de estudo de Física

pfd com introduç

Tipologia: Notas de estudo

2011

Compartilhado em 24/02/2011

paulo-victor-soares-e-silva-3
paulo-victor-soares-e-silva-3 🇧🇷

1 documento

Pré-visualização parcial do texto

Baixe Conclusões Bem, o primeiro contato já foi feito e espero ter aguçad e outras Notas de estudo em PDF para Física, somente na Docsity! Uma visão geral do pacote CFD OpenFOAM Luiz Fernando Lopes Rodrigues Silva Eng. Químico, M.Sc. Programa de Engenharia Química, COPPE, Universidade Federal do Rio de Janeiro Av. Horácio de Macedo, 2030, Rio de Janeiro/RJ, C.P 68502, 21941-972, Brasil Aula 1 CFD-Brasil Um site dedicado à Fluidodinâmica Computacional RIO DE JANEIRO, RJ - BRASIL 2007 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 se 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íveis1, 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- 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. 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-<ver>/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 Fig. 1, representada para um caso genérico (definido como nome do caso ). Figura 1: Estrutura de diretórios que contém os arquivos de configuração da simulação. 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 de uma simulação qualquer, o OpenFOAM cria um diretório intitulado 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 Fig. 2 mostra a janela do FoamX com o caso bubbleFoam aberto. 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çãoblockMeshDict. 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 patches1 presentes na geometria. simpleFoam escoamento turbulento incompressível estacionário (RANS) de fluidos não Newtonianos turbFoam escoamento turbulento incompressível transiente usando RANS Escoamento compressível rhopSonicFoam escoamento compressível baseado na pressão usando variáveis com peso na densidade rhoSonicFoam escoamento compressível baseado na densidade sonicFoam escoamento laminar transiente trans-sônico/supersônico de um gás compressível sonicFoamAutoMotion escoamento laminar transiente trans-sônico/supersônico de um gás compressível com malha móvel sonicLiquidFoam escoamento laminar transiente trans-sônico/supersônico de um líquido compressível sonicTurbFoam escoamento turbulento transiente trans-sônico/supersônico de um gás compressível Direct Numerical Simulation (DNS) e Large Eddy Simulation (LES) channelOodles LES incompressível para escoamento em um canal dnsFoam DNS para caixas de turbulência isotrópica oodles LES incompressível Escoamento multifásico bubbleFoam sistema com 2 fases fluidas incompressíveis, com uma fase dispersa interFoam 2 fluidos incompressíveis, com acompanhamento da interface e opção para malha móvel lesInterFoam 2 fluidos incompressíveis com captura da interface, usando um modelo LES incompressível selecionável em tempo de execução rasInterFoam 2 fluidos incompressíveis com captura da interface, usando um modelo RANS incompressível selecionável em tempo de execução settlingFoam 2 fluidos incompressíveis para simular o assentamento da fase dispersa twoPhaseEulerFoam 2 fluidos incompressíveis Euler-Euler, com uma fase dispersa Combustão coldEngineFoam escoamento sem reação no interior de máquina de combustão dieselEngineFoam escoamento spray de diesel com combustão XiFoam combustão compressível com pré-mistura ou pré-mistura parcial com modelagem de turbulência Xoodles combustão compressível com pré-mistura ou pré-mistura parcial com modelagem de turbulência LES Transferência de Calor buoyantFoam escoamento compressível turbulento transiente com convecção natural para ventilação e troca de calor buoyantSimpleFoam escoamento compressível turbulento estacionário com convecção natural para ventilação e troca de calor Eletromagnetismo electrostaticFoam resolve problemas de eletrostática mhdFoam escoamento laminar incompressível de um fluido condutor sobre influência de um campo magnético Análise de tensão em sólidos contactStressFoam deformação transiente/estacionária por contato de corpos sólidos com pouco peso e elasticidade linear stressedFoam deformação transiente/estacionária por contato de corpos sólidos com pouco peso e elasticidade linear resolvida com volumes finitos segregado e opção de difusão e/ou tensão térmica stressFemFoam deformação estacionária por contato de corpos sólidos com pouco peso e elasticidade linear resolvida com elementos finitos segregado Finanças financialFoam resolve a equação de Black-Scholes para preço de commodities 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. Detalhes sobre a programação dos arquivos fonte serão colocadas mais adiante neste trabalho. A linha de comando para a execução serial de um solver em um caso qualquer está descrita na seqüência. <solver> <diretório do caso> <nome do caso> 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 4para visualização científica de código aberto. Este, por sua vez, é baseado no VTK 5 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. Linguagem de Programação no OpenFOAM Uma das dificuldades inerentes deste artigo é passar ao leitor os conceitos e a sintaxe básica de programação no OpenFOAM, seja ele leigo em programação ou não. Uma boa fonte para o leitor interessado é estudar C++ pelo livro de Yang [2001]. Atualmente, as únicas fontes sobre programação no OpenFOAM estão em seus manuais (User's Guide e Programmer's Guide). Porém, ao meu ver, estes não são suficientes para que o usuário iniciante seja capaz de escrever seu próprio solver, sendo necessário um certo esforço para estudar os códigos existentes, a estrutura e o funcionamento dos algoritmos implementados. Este artigo tenta passar ao leitor os conceitos básicos sobre orientação a objetos (com ênfase em C++) e a minha experiência no aprendizado da linguagem do OpenFOAM, evitando entrar em detalhes sobre sintaxe do código neste primeiro momento. Orientação a Objetos e C++ A maior vantagem na abordagem aplicada à orientação a objetos é remover algumas das falhas encontradas na abordagem seqüencial ou contínua. Na abordagem orientada a objetos, os dados são tratados como elementos críticos do programa e não é permitido alterá-los livremente. Os dados são associados a funções que os acessam e operam, protegendo-os de modificações por uso de funções externas. A orientação a objetos permite a decomposição do problema em entidades chamadas objetos, com a construção de dados e funções para operar sobre esses objetos. Uma grande vantagem na abordagem de orientação a objetos é a reusabilidade do código. Para melhor entendimento da linguagem orientada a objetos, os conceitos de objetos, classes, abstração de dados e encapsulamento, herança e polimorfismo estão colocados na seqüência. Objetos são as entidades básicas de um sistema orientado a objeto. A programação é analisada em termos de objetos e na forma de comunicação entre eles. Quando um programa é executado, os objetos interagem uns com os outros por envio de mensagens, mesmo sem que estes tenham conhecimento sobre detalhes dos dados ou código. As classes formam uma coleção de objetos similares entre si. A abstração se refere ao ato de representar aspectos essenciais do programa sem incluir detalhes ou explicações básicas de programação. Classes usam o conceito de abstração e são definidas como uma lista de atributos abstratos. O armazenamento de dados e funções em uma única unidade (classe) é chamado encapsulamento. Com isso, os dados não podem ser acessados diretamente e somente as funções encapsuladas na classe podem acessá-los. (1) é representada pelo código em C++ solve ( fvm::ddt(rho,U) + fvm::div(phi,U) - fvm::laplacian(mu,U) == - fvc::grad(p) ); Os códigos dos solvers são seqüenciais já que representam um algoritmo de solução e suas equações, que são seqüenciais por natureza. Os usuários não necessitam de um grande conhecimento de programação orientada a objetos e C++ para escrever um solver, mas devem conhecer os princípios por trás da orientação a objetos e ter um conhecimento básico da sintaxe de C++. O conhecimento das equações, modelos, métodos de discretização, solução e algoritmos é definitivamente muito mais importante. Com esse ponto de vista, recomendo fortemente que o leitor interessado em estudar a fundo o OpenFOAM leia o trabalho de Jasak [1996]. O trabalho explica com detalhes vários aspectos sobre a formulação numérica (discretização por volumes finitos, funções de interpolação, condições de contorno, etc.) e a teoria dos algoritmos implementados (acoplamento pressão-velocidade, correção dos fluxos em malhas não estruturadas, etc.) no OpenFOAM. Toda a implementação do código é baseada na teoria apresentada nesta tese. Existem mais duas fontes na literatura (Jasak et al. [2004] e Weller et al. [1998]) contendo detalhes sobre o código e aplicaçõespráticas do OpenFOAM. Estrutura das Bibliotecas no OpenFOAM Como já foi mencionado, com base na programação orientada a objetos, as classes e templates1 podem encapsular tipos e operações sobre variáveis. Os arquivos que contém as classes são chamados de bibliotecas (ou headers) com extensão .H. As classes devem ser declaradas no início do código para que seja possível usar e acessar os comandos presentes na mesma. A principal biblioteca do OpenFOAM é a fvCFD.H, usada para acessar várias outras bibliotecas importantes para o funcionamento do código. Sendo assim, qualquer solver do OpenFOAM possui esta biblioteca declarada no início de seu código. A estrutura básica desta biblioteca está representada na Fig. 1, indicando a declaração de algumas das principais bibliotecas do pacote CFD. Figura 1: Estrutura da biblioteca fvCFD.H. A biblioteca fvMesh.H é responsável por alocar os dados necessários para a discretização do domínio por volumes finitos, incluindo informações topológicas e geométricas da malha. Além disso, fvMesh.H (classe fvMesh) mantém esses dados atualizados durante a simulação, tendo liberdade para apagar informações sobre as células (volume, área da faces, posição do centro da célula/face, etc.) e recalculá-las quando for necessário. Assim, com esta biblioteca é possível apagar ou modificar dados referentes a mudanças topológicas (refinamento de malha) ou geométricas (malhas poliédricas móveis). O OpenFOAM usa o método dos volumes finitos (Versteeg e Malalasekera [1995], Jasak [1996] e Maliska [2004]) para discretizar os campos geométricos nas equações simuladas e as bibliotecas fvm.H e fvc.H são responsáveis pelo processo de aproximação dos termos derivativos das variáveis tensoriais calculadas. Apesar destas bibliotecas possuírem o mesmo propósito, suas aplicações são diferentes. A biblioteca fvm.H reúne funções para realizar operações implícitas de discretização pelo método dos volumes finitos e os resultados são armazenados em uma matriz definida pela classe fvMatrix<Type>. Em outras palavras, a classe fvm discretiza os termos que irão ser resolvidos na simulação e constrói um sistema de equações lineares. A biblioteca fvm.H ainda é capaz de montar a matriz utilizando termos fontes com discretização implícita ou explícita. A formulação obtida pela classe fvm está descrita na Eq. 2 para uma variável genérica na célula da malha, com vizinhos . (2) Já a biblioteca fvc.H agrupa funções para calcular operações explícitas de discretização dos termos presentes nas equações. Os termos discretizados por essa classe não são armazenados em uma matriz, como na biblioteca fvm.H. Neste caso, as operações realizadas com a classe fvc retornam explicitamente um campo geométrico (classe geometricField<Type>). Por exemplo, essa biblioteca é particularmente útil na solução da Eq. 1 já que o OpenFOAM não inclui a pressão na matriz fvMatrix<Type>, já que utiliza um método segregado de solução para o acoplamento pressão-velocidade. Além das operações de discretização, essa biblioteca possui classes para integração de um campo tensorial sobre um volume ou superfície. As opções colocadas no arquivo de configuração da simulação fvSchemes selecionam em tempo de execução as classes responsáveis pela discretização das equações. A biblioteca linear.H possui uma classe específica para interpolação com diferenciação central dos campos alocados no centro da célula para sua superfície. Para resolver o sistema linear proveniente da Eq. 2 utiliza-se a biblioteca fvMatrices.H. Esta última possui ferramentas para montar a matriz e o solucionador de sistemas de equações lineares especificamente projetados para soluções por volumes finitos de equações escalares. O endereçamento das variáveis nas faces dos volumes é usado para montar a estrutura da matriz e a vetorização dos laços de solução. O arquivo de configuração fvSolution seleciona em tempo de execução as classes usadas para solução dos sistemas lineares. A definição das classes (fixedValueFvPatchField e calculatedFvPatchFields) que implementam a estrutura de dados e aplicam as condições de contorno na simulação são acessadas com a declaração das bibliotecas fixedValueFvPatchFields.H e calculatedFvPatchFields.H.fixedValueFvPatchField e calculatedFvPatchFields reto rnam os coeficientes da matriz afetados pela condição de contorno (diagonal da matriz e termo fonte) para determinado patch. Ambas classes são derivadas de fvPatchField.H, uma classe abstrata (fvPatchField<Type>) que fornece uma interface que cobre todas as possíveis classes derivadas aplicadas ao contorno. A classe fvPatchField<Type> divide-se em dois níveis de classes derivadas, onde o primeiro nível é responsável pelas condições de gradiente nulo, gradiente fixo, campo com valor fixo e condições mistas no contorno. O segundo nível cobre todas as condições de contorno especializadas com procedimentos de cálculo específicos, particulares a determinadas situações e campos. Ainda existem outras bibliotecas definidas em fvCFD.H, porém, apesar de serem importantes, eu as considerei como auxiliares. Entre estas, pode-se citar as bibliotecas parRun.H que testa e avalia os argumentos de uma simulação em paralelo; Time.H, que monta um banco de dados para controle de tempo (instante inicial, final, passo de tempo, etc.) da simulação e define operadores de incremento de tempo; physicalConstants.H que define os valores constantes de e ; Ospecific.H que contém funções específicas para operações no SO Unix; e argList.H para criação, escrita e checagem da lista de argumentos (argc e argv, usualmente) que são passados para o programa executável. Em muitos casos, os arquivos *.H declarados ao longo dos códigos de solvers do OpenFOAM têm apenas a função de executar comandos e definir variáveis. Apesar dessa prática fugir da definição básica de uma biblioteca2 ,
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved