July 13, 2007

CFD: Colour Fluid Dynamic

CFD também conhecido, de forma pejorativa, como "Colour Fluid Dynamic", (Fluidodinâmica Colorida, em tradução livre). A essência da origem dessa palavra está na beleza que os resultados podem adquirir na apresentação. As cores, as formas tridimensionais, aquele monte de informação em uma única figura conseguem produzir excelentes wallpapers e impressiona.

A não muito tempo (e ainda se vê isso hoje) quando se fala em ver apresentações de CFD, fala-se em ver figuras bonitas, fala-se em em belos contrastes e, em alguns casos, vídeos interessantes.

No começo, todo esse efeito colorido produzia belíssimos argumentos para o administradores/engenheiros mal informados ou inexperientes. E é aí que entra a história do "Colour Fluid Dynamic".

Imagine que se você chega uma determinada empresa, faz uma belíssima e coloridíssima apresentação, impressiona todos que pagam as contas e na hora de fazer acontecer ... você usa as mesmas técnicas de 1930 para fazer cálculos de equipamentos, porque descobre (ou já sabia) que todas aquelas cores não serviam para nada. Era apenas cor. Teria tido o mesmo efeito se tivesse sido feita no Gimp ou Photoshop. Bom, naquele tempo não existia nem uma coisa nem outra. Estamos falando do início do CFD. Daquela época obscura quando o CFD era visto com desconfiança até mesmo por quem o estava desenvolvendo. A falta de informação era um dos principais obstáculos do desenvolvimento e, principalmente, da aplicação do CFD na indústria.

Muita informação, propaganda de conscientização (as vezes não muito clara, mas vai lá ...) e muito estudo foi feito desde que os primeiros códigos CFD foram desenvolvidos. De lá pra cá a aplicação do CFD na indústria só não quadruplicou, porque antes era nula..., É bem verdade que ainda existe muita falta de informação, mas vamos ... já tem até um blog falando sobre esse assunto !!!

Abaixo segue um belo exemplo de resultado CFD ...

... que obedece a máxima do "Colour Fluid Dynamic". É lindo, não acha ? Deu um trabalho daqueles para fazer ... Está pensando o quê ? Que é fácil fazer wallpapers usando física e matemática ? Está certo que para fazer essa figura eu apenas gastei 1 minuto de simulação, mas gastei também uma cara licença de um software CFD (existem softwares opensource de CFD, mas não foi o caso aqui ...) e mais de 1 hora para fazer produzir uma combinação de cores bonita. A culpa, nesse caso, não é do software. É exclusivamente minha. Eu fiz isso intencionalmente. Eu coloquei um caso mal formulado e ainda tirei o resultado do "forno" muito antes dele ficar pronto (bom, como ele está mal formulado eu poderia deixar meses que iria continuar ruim).

Agora, me diga com sinceridade. Como você saberia que essa figura não era apenas cores bonitas se eu não tivesse dito ? Eu disse alguma coisa sobre o caso ? Eu não disse o que as cores deveriam representar ! Eu sequer disse se tem uma ou mais de uma variáveis sendo apresentada ! Enfim, não há qualquer informação sobre o que é e como foi feito essa simulação, com excessão da sua forma geométrica. A partir dos meus próximos tópicos eu devo abordar a questão da análise e apresentação dos resultados. Buscando a resposta da seguinte pergunta: Quais são as informações são necessárias para que o ouvinte (seja ele um leigo ou um expert em CFD) possa ter condições de formular uma opinião crítica fundamentada sobre um resultado CFD apresentado?

O CFD é uma ferramenta, como um bisturi. Nas mãos de quem sabe usar pode salvar vidas, em outras, é apenas uma faca, que no máximo tira um bela bisteca (e como ela pode ser bela !). Mas o verdadeiro problema é quando o bisturi fica nas mãos de alguém que pensa que sabe usar.

July 11, 2007

O melhor amigo de CFD: O computador!

A configuração do hardware de um computador muitas vezes nos deixa em um mar de dúvidas. Muitas peças, placas, especificações e uma grande questão: Será que essa configuração vai atender às minhas necessidades? E para quem quer um computador específico para simulação numérica? Para clarear um pouco as coisas, é interessante ver como funciona a troca de dados entre os componentes de um computador.

Entender a hierarquia das memórias é um fator importantíssimo para quem deseja um computador veloz. Neste caso, a leitura e/ou escrita (I/O) de dados nos dispositivos de armazenamento de um computador obedecem uma hierarquia de velocidade, que usualmente segue:
A ordem dessa hierarquia também vale para o custo das memórias. Por outro lado, a capacidade de armazenamento de dados segue justamente o caminho contrário desta hierarquia.

Assim, quando um programa é iniciado, seus dados são transferidos do HD para a memória RAM (que é mais rápida, porém com menor capacidade). Em seguida, aloca-se na memória cache (que é pequena, mas rapidíssima) as informações que serão processados. A memória cache se encarrega de fornecer ao processador os dados para tais operações, que depois de realizadas são alocadas novamente na cache.

Quando o processador precisa de informações que estão na memória RAM, libera-se espaço na cache voltando com os dados já processados para a RAM e lendo e alocando na cache novos dados (que serão usados pelo processador) provindos da RAM.

Por sua vez, quando é necessário escrever os dados em arquivo (resultados de uma simulação, por exemplo), as informações são passadas da memória RAM para o HD (em uma forma que nós conhecemos: o arquivo). Programas que precisam de muito I/O de arquivos ficam lentíssimos.

Portanto, essa troca de informações/dados entre os níveis de memória deve ser a mais rápida possível pois nós queremos velocidade nas operações. No próximo post, vou escrever um pouco mais sobre os componentes do computador usualmente encontrados em lojas (nada de supercomputadores caríssimos) e quais seriam os parâmetros para quantificar se seriam adequados ou não para simular problemas CFD profissionais usuais.

Contudo, lembre-se que nem a melhor configuração de hardware irá te salvar de um código CFD mal implementado. O conhecimento da linguagem de programação e como as variáveis são alocadas na memória, assim como implementar o código de forma eficiente (evitando operações desnecessárias, uso excessivo de condicionais, etc.) são vitais nas simulações CFD.

July 9, 2007

O Coração de CFD II - A Missão

No post anterior comentei sobre os métodos de discretização, onde as equações de transporte (válidas em um espaço contínuo) são discretizadas e passam a ser válidas em um espaço discreto finito (chamado usualmente de volume de controle). Neste processo, cada volume de controle é dependente dos volumes de controle vizinhos dispostos em um espaço discreto (chamado de malha computacional).

Dessa forma, a discretização espacial, quer o problema seja uni, bi ou tridimensional, leva a um sistema de equações algébricas que é linearizado na forma A x = b, onde A é uma matriz de coeficientes da malha computacional, x é o vetor de variáveis incógnitas e b é um vetor que contém as informações associadas aos termos fontes e às condições de contorno.

A estrutura da matriz de coeficientes A pode variar dependendo da dimensão do problema, da forma de discretização da malha e da ordenação dos volumes (ou elementos ou pontos, dependendo do método de discretização) da malha. A estrutura da matriz é um importante parâmetro na escolha do método mais apropriado para resolver o sistema linear. Em aplicações CFD, cerca de 50% do tempo de computação necessário para resolver um dado problema está associado à solução de sistema linear. Os outros 50% estão associados à obtenção das equações discretizadas.

Os métodos numéricos para solução de sistemas lineares podem ser divididos em duas classes: diretos e iterativos.

Os métodos diretos determinam a solução exata, a menos de erros de truncamento, em um número finito de operações matriciais. Eles são indicados para sistemas lineares com um número não muito de grande de equações (até alguns milhares) ou com uma matriz do sistema cuja estrutura permite um método especial de solução. A limitação destes métodos a sistemas pequenos ocorre por dois motivos. Primeiro, o número de operações (matemáticas) cresce muito rapidamente com o tamanho do sistema, o que aumenta o custo computacional superlinearmente. Além disso, o alto número de operações leva ao aumento dos erros de truncamento, o que degrada a acurácia da solução. A decomposição LU em conjunto com a Eliminação Gaussiana é um dos métodos mais utilizados.

Os métodos iterativos foram desenvolvidos para superar as deficiências dos métodos diretos no tratamento de grandes sistemas. Os métodos iterativos também ganharam espaço devido a sua facilidade de implementação em computadores de alto desempenho com memória compartilhada ou distribuída (supercomputadores e clusters), quando comparado aos métodos diretos. Alguns métodos iterativos, como o Gauss-Seidel, o Gradiente Conjugado (CG) e suas variantes, o GMRES e o Algebraic Multigrid (AMG) podem ser citados.

Por fim, o procedimento geral na solução CFD se mostra como colocado na figura abaixo.

July 3, 2007

O Coração de CFD!!


Na minha opinião, a solução numérica (o chamado solver) é a parte principal de um pacote CFD pois este implementa as técnicas numéricas de solução e seus parâmetros para resolver os problemas físicos de modo apropriado. Em resumo, os métodos numéricos que formam a base do solver passam pelos seguintes passos:
  • Aproximação das variáveis incógnitas do escoamento (o que eu quero calcular) através de funções simples.
  • Discretização (e também a geração da malha), pela substituição das aproximações descritas acima nas equações de transporte que governam o escoamento, com manipulações matemáticas subseqüentes.
  • Linearização do sistema de equações algébricas resultante.
  • Definição da estratégia de solução do sistema de equações algébricas lineares.
  • Solução do(s) sistema(s) de equações algébricas lineares.
Existem várias técnicas numéricas de solução e suas diferenças estão associadas à forma com que as variáveis incógnitas são aproximadas e ao procedimento de discretização. Todas estas metodologias numéricas levam a sistemas de equações algébricas lineares (com matrizes cheias ou esparsas) com um grande número de equações e, portanto, uma abordagem numérica para a solução de tal sistema se torna necessária.

Métodos de Discretização
Os métodos de diferenças finitas (MDF) descrevem as incógnitas x do problema de escoamento por meio de valores pontuais nos pontos nodais de uma malha estruturada. Expansões em série de Taylor são normalmente usadas para gerar as aproximações de diferenças finitas das derivadas de x em cada ponto da malha usando os valores de x nos pontos vizinhos. Assim, as derivadas que aparecem nas equações de transporte são substituídas pelas diferenças finitas, levando a uma equação algébrica para os valores de x em cada ponto da malha.

Os métodos de elementos finitos (MEF) utilizam funções simples (por exemplo, lineares ou quadráticas) para descrever as variações das variáveis x a serem calculadas dentro de cada elemento. Estas funções simples são nulas fora do elemento considerado. Somando-se as aproximações para todos os elementos obtém-se uma aproximação funcional para cada variável x em todo o domínio de cálculo. As equações de transporte são plenamente satisfeitas pela solução exata y do problema. Quando as funções aproximadas para as variáveis x são substituídas nas equações de transporte, elas deixam de ser exatas e cada uma delas tem um resíduo que pode ser usado para medir o erro da aproximação. Cada equação aproximada é multiplicada por um conjunto de funções peso e integrada no domínio de cálculo. Como resultado, obtém-se um sistema de equações algébricas para determinar os coeficientes de cada uma das aproximações funcionais.

O método dos volumes finitos (MVF) é a técnica de CFD mais bem estabelecida e usada para propósitos gerais. Esta técnica parte da integração formal das equações de transporte que regem o escoamento do fluido em todos os volumes de controle obtidos pela discretização do domínio. Nesta integração, a forma conservativa de cada equação é usada para que seja possível transformar as integrais em volume dos divergentes dos fluxos advectivos e difusivos em integrais em área dos fluxos normais à superfície dos volumes de controle, através da aplicação do teorema da divergência. Embora esta operação seja exata, a completa discretização deste termos e das outras integrais no volume necessita do uso de técnicas numéricas para aproximar os campos das variáveis conservadas, x, que utilizam funções de interpolação ou aproximações funcionais. A acurácia destas aproximações e da representação obtida para os fluxos através das superfícies dos volumes de controle são os aspectos mais importantes no método de volumes finitos. Como os outros métodos, as equações finais levam a um sistema algébrico de equações.

Apesar de não ser um método de discretização, os métodos espectrais também podem ser usados para resolver problemas em CFD. Esta técnica aproxima as incógnitas por meio de séries truncadas de funções trigonométricas ou polinomiais. Diferentemente das abordagens por diferenças e elementos finitos, as aproximações utilizam funções que tem valores não nulos em todo o domínio de cálculo. Novamente, as incógnitas são substituídas nas equações de transporte pelas suas aproximações. Em um procedimento similar ao do método de elementos finitos, as equações de conservação são multiplicadas por funções teste e integradas no domínio, o que leva a um sistema de equações algébricas para determinar os coeficientes das séries truncadas. Opcionalmente, pode-se impor que o resíduo de uma equação aproximada seja nulo em um certo número de pontos, levando aos chamados métodos de colocação.

A integração da equação em cada volume de controle diferencia o método dos volumes finitos de todas as outras técnicas numéricas de CFD. Corretamente empregada, esta operação leva a equações integrais exatas para a conservação das grandezas físicas em cada volume, que são posteriormente aproximadas. Na minha opinião, esta relação entre o algoritmo numérico e o princípio básico de conservação é um dos principais atrativos do método dos volumes finitos e torna o entendimento de seus conceitos muito mais simples em relação aos outros métodos.

Sem dúvida alguma, depois de discretizar as equações ainda é necessário resolver o sitema de equações algébricas resultante. Com certeza, são vários os métodos numéricos para a solução deste sistema e sua escolha é importante para o algoritmo CFD. Mas isso é assunto para outro post....