December 29, 2008

A história da Mecânica dos Fluidos em versos

Sabe-se que a história da mecânica dos fluidos moderna originou-se com a formidável destreza em unir o esforço da pesquisa analítica dos séculos 19 e 20 com o vasto conhecimento empírico e experimental sobre hidráulica que o homem vem armazenando ao longo dos anos. O encontro destas duas vertentes ocorreu de fato em 1904 com Ludwig Prandtl e o desenvolvimento da Teoria da Camada Limite, que foi verificada experimentalmente. A mecânica dos fluidos moderna (1900~1975) vem sendo desenvolvida com técnicas analíticas e experimentais concomitantemente.

Com a evolução do poder de processamento e armazenamento dos computadores, a fluidodinâmica computacional surge para auxiliar no desenvolvimento e evolução da mecânica dos fluidos aliando técnicas numéricas e visualização científica. Muito trabalho ainda deve ser feito para unir essas três vertentes. Contudo, já existem simulações fluidodinâmicas que são confiáveis o bastante para substituir em parte ou totalmente o trabalho experimental (por ex., simulações DNS).

Em uma das minhas "andanças" pela internet encontrei um poema interessante e gostaria de compartilhá-lo com vocês. Este aborda a história da mecânica dos fluidos clássica até a fase moderna. Enjoy!

The Turbulent History of Fluid Mechanics

It all started with Archimedes, way back in BC,
Who was faced with an interesting problem, you see...


The king came to me, and this story he told:
I am not sure if my crown is pure gold.
You are a wise man, or so it is said,
Tell me: is it real, or is it just lead?

I paced and I thought, and I scratched my head,
But the answer eluded me, to my dread.
I sat in my bath, and pondered and tried,
And then ... Eureka! Eureka! I found it! I cried.

As I sat in my tub and the water was splashing,
I knew suddenly that a force had been acting.
On me in the tub, its proportional, see,
To the water that was where now there is me.

Of course, Archimedes caused quite a sensation
But not because of his great revelation;
As he was running through the streets of Syracuse
He didnt notice he was wearing only his shoes.

The great Leonardo oh what a fellow
No, not diCaprio, DaVinci I tell you!
He did more than just paint the lovely Mona,
He also studied fluid transport phenomena.

Then came Pascal, who clarified with agility,
Basic concepts of pressure transmissibility.
Everyone knows how a barometer looks,
But he figured out just how it works.

How can we talk about great scientists,
Without mentioning one of the best:
Sir Isaac Newton, the genius of mathematics,
Also contributed to fluid mechanics.

One thing he found, and its easy as pie,
Is that shear stress, τ equals μ dv/dy.
His other work, though, was not as successful;
His studies on drag were not all that useful.
He thought he knew how fast sound is sent,
But he was way off, by about twenty percent.

And then there was Pitot, with his wonderful tubes,
Which measure how fast an airplane moves.
Poiseuille, d'Alembert, Lagrange and Venturi
Through his throats fluid pass in a hurry.

Here is another hero of fluid mechanics,
In fact, he invented the word hydrodynamics.
It would take a book to tell you about him fully,
But here is the short tale of Daniel Bernoulli:

Everyone thinks is just one Bernoulli
It is not so! There are many of us, truly.
My family is big, many scientists in this house,
With father Johan, nephew Jacob and brother Nicolaus.

But the famous principle is mine, you know,
It tells of the relationship of fluid flow,
To pressure, velocity, and density too.
I also invented the manometer - out of the blue!

Yes, Bernoulli did much for fluids, you bet!
He even proposed the use of a jet.
There were others too, all wonderful folks,
Like Lagrange, Laplace, Navier and Stokes.

Here is another well-known name,
A mathematician and scientist of great fame:
He is Leonard Euler, I'm sure you all know,
His equations are basis for inviscid flow.

He did more than introduce the symbols π, I, e,
He also derived the equation of continuity.
And with much thought and keen derivation,
He published the famous momentum equation.

Those wonderful equations and diagrams you see?
They are all thanks to Moody, Weisbach and Darcy.
Then there was Mach, and the road that he paves,
After studying the shocking field of shock waves.

Rayleigh studied wave motion, and jet instability,
How bubbles collapse, and dynamic similarity.
He was also the first to correctly explain.
Why the sky is blue except when it rains.

Osborne Reynolds, whose number we know,
Found out all about turbulent flow.
He also examined with much persistence,
Cavitation, viscous flow, and pipe resistance.

In the discovery of the boundary layer
Prandtl was the major player.
Its no wonder that all the scientists say,
He's the father of Modern Fluid Mechanics, hooray!

It is because of Prandtl that today we all can
Describe the lift and drag of wings of finite span.
If it werent for him, then the brothers Wright
Would probably never have taken flight.

And so we come to the end of this story,
But its not the end of the tales of glory!
The list goes on, and it will grow too
Maybe the next pioneer will be you?
Escrito por Naomi Tsafnat,
em 17 de maio de 1999.

Ps. 1: Para maiores detalhes sobre os famosos pesquisadores, clique nos links destacados no poema. Em especial, gostei muito da biografia de Newton, d'Alembert e Lagrange. A leitura vale a pena.


Ps. 2: Desejando a todos um ótimo 2009, cheio de felicidades, realizações, novas descobertas e tempo para escrever no blog.

December 21, 2008

Feliz Natal, Feliz Ano Novo E Mil Desculpas

Eu estava devendo um tópico esse ano. Eu poderia dizer que tive dezenas de problema pessoais e que não tive tempo para escrever nesse blog, mas a verdade é que eu tenho outro blog que confirma os problemas que tive, mas deixa claro que teria sido possível escrever mais vezes aqui.

Eu não escrevi mais vezes por pura falta de planejamento. Sim, planejamento. Eu errei quase todas as escolhas que fiz quando pensei no Notas em CFD e isso refletiu nesse meu completo abandono nesse ano. Felizmente, o Luiz manteve um fluxo aceitável de tópicos para o blog.

O maior desafio que eu tenho aqui, é escrever sobre algo que não é trivial de uma forma que seja entendido porque quiser ler. Isso não é algo que eu faça em uma hora ou duas. Faltou planejamento nesse ano de 2008. Mas eu farei de tudo para não faltar planejamento no ano de 2009 e nos que vierem por aí. Já agendei um tópico para o início do ano de 2009 e já listei as idéias que eu quero desenvolver como texto no próximo ano.

Para esse ano resta, além do meu pedido de desculpas, desejar ótimo Natal e Ano Novo para todos. Sinceramente !

October 13, 2008

Grupo de Discussão no CFD-Brasil

Não sei se vocês conhecem, mas existe um grupo de discussão livre em português sobre CFD disponível na internet. Apesar de ter sido criado pelo meu amigo Ricardo, desenvolvedor e cabeça chave do CFD-Brasil, eu não sabia que o grupo de discussão existia até semana passada (ok, ok... tô até com vergonha de não saber disso antes!). Espero me redimir avisando a vocês, leitores do Notas, sobre o Espaço Interativo CFD-Brasil.

Neste espaço você pode postar suas dúvidas sobre CFD, fenômenos de transporte, fluidodinâmica experimental, etc. Até mesmo postar oportunidades de emprego, estágios na área de CFD e afins. Quanto mais gente participar, mais informação teremos, mais interação e troca de idéias. Enfim, mais legal vai ficar o grupo. O que sugiro: entrem para o grupo (clique aqui para acessar e se inscrever), participem, enviem suas dúvidas, sugestões, idéias e (sim, porque não?) respondam às dúvidas dos outros. Vamos participar e aumentar a interação entre os profissionais de CFD de língua portuguesa!

Ps.: Mal entrei e já dei até uma peruada sobre métodos numéricos para a solução da eq. da advecção pura. Algo que eu não vejo há mais de 7 anos, mas adoro esse tema (pois é, esse doutorado realmente não me fez bem). Além disso, já coloquei lá a disponibilidade de vagas para iniciação científica no laboratório onde trabalho.

September 23, 2008

Uma revisão sobre colunas de borbulhamento

Desde o início do século XX, o estudo de colunas de borbulhamento têm atraído a atenção de vários pesquisadores. Apesar de tantos estudos na área, o entendimento completo da fluidodinâmica deste equipamento nunca foi alcançado de forma que a modelagem e o aumento de escala de reatores em colunas de borbulhamento ainda não estão bem desenvolvidos. Este fato pode ser atribuído à grande complexidade da hidrodinâmica e sua dependência com as propriedades físicas de transporte destes sistemas.

Colunas de borbulhamento apresentam três tipos de regime de escoamento, chamados de homogêneo, heterogêneo (churn ou turbulento) e em golfada (slug). Basicamente, para cada sistema gás-líquido, a formação e a estabilidade destes regimes dependem das velocidades superficiais do gás e do líquido, do distribuidor de gás e da geometria do reator de borbulhamento. A figura abaixo mostra um esquema qualitativo dos escoamentos homogêneo (bolhas dispersas), heterogêneo (churn) e slug.

Em princípio, a retenção gasosa na coluna cresce com o aumento da velocidade superficial do gás e, no caso de um distribuidor eficiente (placa porosa, distribuidor com vários orifícios, etc.), um valor máximo de retenção pode ser obtido na transição entre os regimes homogêneo e heterogêneo. Usando um distribuidor menos eficiente (por exemplo, distribuidor com único orifício), não se observa um ponto máximo de retenção gasosa e as características do regime heterogêneo prevalecem no sistema, mesmo para baixas velocidades superficiais de gás.

O regime homogêneo é caracterizado por baixas velocidades superficiais de gás (inferior a 4 cm/s), onde o tamanho de bolhas e a retenção gasosa são radialmente uniformes, sendo que as bolhas apresentam pequenos diâmetros e formas esféricas. Neste regime, a velocidade de ascensão das bolhas é praticamente uniforme, com trajetória ascendente quase retilínea. Além disso, as bolhas possuem pouca interação entre si. Desta forma, os fenômenos de quebra e coalescência de bolhas podem ser negligenciados, não havendo uma forte recirculação de líquido na coluna.

Com o aumento da vazão de gás, o escoamento se torna instável e o regime homogêneo não consegue se manter e passa por um estado de transição. A transição ocorre em uma pequena faixa de velocidades superficiais de gás, onde bolhas maiores formadas por coalescência ascendem com uma velocidade maior que a das bolhas menores. Neste regime, um padrão de circulação do líquido começa a se desenvolver. Para velocidades superficiais de gás superiores a 12 cm/s, é possível observar uma tendência a se estabelecer um equilíbrio entre a quebra e a coalescência das bolhas. Neste ponto o regime passa a se chamar de heterogêneo e é caracterizado por bolhas com diferentes formas e tamanhos e uma intensa circulação de líquido no interior da coluna. As bolhas maiores tendem a ascender pelo centro da coluna e as pequenas pela região próxima a sua parede, mas devido à circulação de líquido na coluna as últimas podem até retornar.

Em colunas de pequeno diâmetro, o regime slug pode ser atingido ao aumentar a velocidade superficial do gás. Neste regime, enormes bolhas de gás, chamadas de bolhas de Taylor, ocupam quase toda a seção da coluna, sendo separadas da parede por um fino filme líquido. Normalmente, estas bolhas não se estabilizam em colunas com diâmetros maiores que 15 cm, ocorrendo a sua quebra em bolhas menores, ocorrendo, então, o regime heterogêneo.

Ps.: Ok, ok... Acabei de "puxar sardinha" para a minha área de atuação.

August 5, 2008

Curso de Introdução ao OpenFOAM

O Willian Clem é um aluno de iniciação científica (graduação em Engenharia Química) do LTFD que eu estou orientando no aprendizado e uso do OpenFOAM. Estou satisfeito com o seu progresso e entusiasmo em aprender, sempre motivado a ver mais e mais.

Quando o Prof. Jasak veio para participar da minha banca de doutorado, ele se propôs a ministrar um curso em OpenFOAM. Tudo bem! Muito legal!! O problema é que algumas das pessoas que iriam tinham pouco (ou nenhum) contato com o OpenFOAM. Bem, eu tinha que driblar esse problema e fazer algo a respeito. E foi aí que o Willian me ajudou.

Como eu estava em um período bastante enrolado (pré-defesa), eu não tinha como preparar e ministrar um curso introdutório de OpenFOAM. Mas o Willian pôde.

O curso foi ministrado no laboratório de informática do Programa de Engenharia da COPPE, que dispõe de 12 computadores com o Linux OpenSUSE instalado em dual-boot com o (irrcc!) Windows. Foram 2 dias de curso hands-on, ou seja, os alunos podiam acompanhar e executar todos os passos no seu próprio computador. Contudo, alguns detalhes da apresentação estão implícitos pois o Willian preferiu comentá-los oralmente. Por fim, combinamos em disponibilizá-lo na internet como uma referência em português para o uso básico do OpenFOAM (versão 1.4.1).

Além de postar as apresentações abaixo, disponibilizei-as publicamente no Google Docs. Através desse último, você pode converter as apresentações para formato PPT e PDF. Sinta-se livre para copiar, alterar, modificar, estender, etc. Só peço que citem que a autoria original foi do Willian, aluno do PEQ/COPPE/UFRJ.

DIA 1


DIA 2


links para baixar (eu acho...) as apresentações: DIA 1 e DIA 2.

July 22, 2008

Lançado OpenFOAM 1.5

A OpenCFD lançou no dia 14/07 a versão 1.5 do pacote CFD de código aberto OpenFOAM. Veja o anúncio oficial aqui.

Pelo que vi, os desenvolvedores da OpenCFD incluíram várias mudanças nesta nova versão. Do pouco que testei, verifiquei que a instalação mudou um pouco e agora fornece mais opções, como por exemplo a facilidade de instalar o OpenFOAM em qualquer local do sistema. Percebe-se ainda pequenas mudanças no uso das linhas de comando para executar os utilitários, solvers e o paraFoam. Além disso, o paraFoam não funcionou corretamente na minha versão de OpenSuse (ainda estou na versão 10.3 64 bits). É necessário compilar o paraview e, para tal, deve-se ter cuidado com a versão dos programas requisitados para fazer isso.

Ainda vou testar melhor essa nova versão para ser capaz de comentar melhor sobre a dita. Se você já está usando o OpenFOAM 1.5, comente aqui sua experiência.

July 21, 2008

Referências em CFD

Este post reponde a uma pergunta do Eric, que indagou sobre referências para estudar CFD e, em específico, começar a simular seus casos. O que eu posso responder de imediato é que, se você quer aprender como realizar e executar as simulações, siga pelos tutoriais do programa CFD que você está usando. Com isso você será capaz de se familiarizar com o programa. Realmente isso vem com a experiência e o uso contínuo.

Agora, se você procura referências para entender os modelos físicos, os detalhes numéricos e ter embasamento para montar seus próprios casos e simulá-los de forma consciente... Bem, o buraco é mais embaixo (mas muito mais interessante e recompensador).

Vou responder colocando links para um site que venda o livro (no nome dos autores) para dar aquela primeira olhada, ok? E vamos ver os livros mais gerais, sem aplicações específicas (como turbulência, radiação, multifásico, etc) ou métodos numéricos avançados.

Em primeiro lugar, eu recomendo que se aprenda bem (mas muito bem mesmo!) fenômenos de transporte, em especial Mecânica dos Fluidos. Não vou opinar muito sobre isso pois a literatura é vasta e existem muitas referências. Porém, existem duas referências clássicas que eu considero bastante, o livro do Bird, Stewart e Lightfoot (fundamentos básicos) e do Aris (abordagem tensorial para mecânica dos fluidos). Mas também reconheço que a teoria nestes livros é um pouco pesada para os marinheiros de primeira viagem.

Existem livros que tratam de assuntos diversos que, de certa forma, são aplicados diretamente em CFD, como volumes finitos, elementos finitos, malhas computacionais, solução de sistemas lineares esparsos, etc.

Como primeira leitura sobre CFD recomendo, sem dúvida alguma, o livro do Patankar. Ora, mas por quê? Este é um livro antigo (1980), mas escrito de forma extremamente didática tornando um assunto que pode ser bem complicado em uma forma bem fácil. Ao meu ver, leitura obrigatória para quem nunca viu e quer entender a aplicação de volumes finitos clássico em CFD. Porém, como já foi mencionado, é um livro antigo e possui algumas técnicas que já estão defasadas (mas ainda assim é interessante saber sobre elas).

Apesar de focar os métodos numéricos em si, o livro do Pinto e Lage é bem interessante também. Não é aplicado diretamente a CFD, mas fornece toda a teoria por trás dos métodos de discretização. E não é para puxar saco do meu orientador, não.

Outra boa referência é o livro do Maliska, que é bastante completo e descreve todas as etapas que envolvem a solução de um problema CFD. Este livro se basea no método dos volumes finitos , apresentando até sua formulação baseada em elementos (implementado atualmente do ANSYS CFX). Outro que vale a pena!

Por fim... A minha referência preferida... O livro do Versteeg e Malalasekra é uma outra ótima fonte de informações sobre CFD em geral. Na minha opinião, este é o livro mais completo dos aqui citados pois aborda diversos e diferentes assuntos e interconecta-os ao mesmo tempo. De fato, os autores partem da modelagem dos fluidos para explicar as técnicas numéricas e computacionais. E abordam tantos assuntos importantes em CFD que tornam esse livro basicamente introdutório em um mini-manual. Quando estava escrevendo esse post, vi que saiu a segunda edição do livro e os incrementos valem a pena. Só gostaria de resumir assim: Esse livro é muito bom!

Todos os livros que citei aqui são introdutórios, mas ao mesmo tempo abordam assuntos importantes para qualquer profissional que trabalhe com CFD. Na minha opinião, esses são livros que abrem o caminho para tratar CFD com maior maturidade e são os primeiros passos para ser capaz de estudar problemas mais aplicados e complexos.

Mas essa é a minha opinião. E você conhece ou sugere outras referências introdutórias para CFD? Comente!

June 29, 2008

Escrevendo sua tese

Eu queria falar também sobre a escrita da minha tese (ou documentos muito longos). Reaproveitar textos já escritos, organizar referências, numerar as equações, tabelas e figuras, formatação, etc pode ser uma tarefa difícil para processadores de texto (MS Word, OpenOffice Writer e outros) quando os textos são muito longos e cheios de figuras e equações. Quase perdi o documento da minha tese de mestrado por causa disso. Quase tive que fazer o que o carinha da figura ao lado fez. Por isso, uma recomendação: use Latex!

Não conhece Latex? Latex é um sistema de editoração de textos com alta qualidade (gratuito e com código livre). O Latex usa um algoritmo para organizar e formatar o texto da melhor forma possível para o olho humano. Traduzindo: a formatação dos textos fica ótima e são extremamente bonitos. Isso é bem interessante, pois o usuário pode focar sua atenção ao conteúdo do texto e não em sua formatação (deixa que o Latex se preocupa com isso).

O problema é que você escreve o texto incluindo certos comandos para criar capítulos, seções, equações, negrito, itálico, etc. O manuscrito é escrito em um simples arquivo texto (editor de textos simples) , como um código fonte de um programa em Fortran ou C (para quem gosta de programar, o Latex é um prato cheio!). Depois disso, você usa o Latex para interpretar esse arquivo texto e criar um documento pdf. Veja um pequeno exemplo de um texto escrito em Latex e seu resultado nesse link.

Os mais céticos já devem estar desconfiados. Sei que no início você vai me xingar, dizer que eu sou louco e que o doutorado deve ter fritado meus miolos. Eu sei porque eu disse a mesma coisa quando eu vi Latex pela primeira vez: "Como assim vou escrever algo que eu tenho que compilar para gerar meu texto??? Que isso?? Tá maluco!". Mas as (inúmeras) vantagens em usar Latex irão aparecer conforme o aprendizado for avançando. Pode confiar!

Uma dica é começar pelo mais básico mesmo. Exemplo a exemplo é possível entender o funcionamento e os códigos do Latex. Existem várias fonte na internet. Veja esses sites:
Note que o Latex é o interpretador e construtor dos arquivos pdf (dvi, ps ou html). Os arquivos fonte (textos com extensão .tex) podem ser escritos em programas específicos para tal. Nestes, os comandos de Latex estão listados na forma de botões e barras de ferramentas para facilitar o uso e aprendizado. No Linux, eu uso o Kile e para Windows, usei o TeXnicCenter. Para quem (ainda...) usa Windows, procure pelo MiKTex (versão de Latex para o Windows).

E você? Já usa Latex? Comente e dê sua opinião sobre esse assunto.

Desenvolvimento do OpenFOAM 1.5 beta

Bem, essa notícia já está ficando até velha...

A OpenCFD anunciou o desenvolvimento da versão 1.5 do OpenFOAM, que atualmente está em fase de testes. Os avanços desta nova versão estão no desenvolvimento de novas aplicações (escoamento multifásico, transf. de calor, escoamentos em alta velocidade e até dinâmica molecular), novos utilitários (malha e monitoramento das simulações) e a implementação de novos modelos (Lagrangeanos, radiação, etc).

Dos pontos que eu achei mais interessantes, destaco:
  • Desenvolvimento do interDyFoam, que aplica a abordagem VOF (acompanhamento de superfície) para a simulação isotérmica de escomentos bifásicos incompressíveis e considerando malhas móveis (modificam com o tempo). Outros solvers usando VOF também foram desenvolvidos.
  • Migrando do Paraview 2.4 para o Paraview 3.3 para visualização de resultados, que, na minha opinião, tem um grande salto de qualidade e facilidade de uso.
  • Novas ferramentas para construção automática de malhas split-hex (hexaédricas) a partir de geometrias STL.
  • Implementação específica para escoamentos rotacionais (turbomáquinas).
Além desses, existem vários outros pontos tem destaque nessa nova versão. Mas deixei para que você veja no anúncio oficial do início dos testes do OpenFOAM 1.5beta.

Agora, vamos aguardar o anúncio da liberação oficial desta versão para o usuário final.

June 28, 2008

Sou doutor, mas não faço consulta médica!

Olá, pessoal!

Acabou! Trabalho concluído! Tese defendida! E título de doutor no nome!

Para falar a verdade, não acredito que o título em si seja o mais importante. Acho que o que realmente faz a diferença é o que vi, estudei, pensei e fiz durante o período de 4 anos do doutorado. E a piada é que quando fui chamado de Dr. Luiz pela primeira vez, perguntaram também qual era o preço da consulta, o melhor remédio para uma dorzinha de garganta, uma manchinha na pele, etc. Bem... "Dá para simular???", eu respondi.


Esses últimos dois meses foram bastante turbulentos e não teve k-epsilon (ou SST) que me ajudasse. A finalização da escrita, apresentação e os detalhes da vinda do Prof. Jasak (leia Iasak) ao Brasil tomaram meu tempo. Acho até que esse último foi o que me deixou mais ansioso, pois teria um convidado internacional na banca, eu teria que apresentar o meu trabalho em inglês e eu queria (e exigia) fazer isso direito!

No final das contas tudo correu muito bem. Consegui apresentar a minha tese com calma, passando por todos os detalhes do meu trabalho e conectando os assuntos de forma a ficar tudo coerente e didático. Não pude evitar uns dois ou três tropeços no inglês, mas nada que fosse crítico. Fiquei satisfeito com o resultado.


Durante a argüição, fiquei mais tranquilo ainda e os membros da banca disseram que gostaram do trabalho desenvolvido e suas dúvidas (que foram poucas) foram prontamente respondidas. Mas o que eu mais gostei foram as sugestões propostas pela banca. Gostaria de compartilhar uma das sugestões com vocês:
Quando fizer uma revisão bibliográfica sobre algum tema em que o laboratório (ou empresa, instituto, etc) esteja atuando, não esqueça de incluir os trabalhos do seu grupo no texto. Por exemplo, eu fiz uma revisão sobre simulações em colunas de borbulhamento e, apesar de não ser diretamente aplicada ao meu trabalho de tese, disse que isso é o alvo da pesquisa do meu grupo (LTFD/PEQ/COPPE/UFRJ). Mas não citei nenhum trabalho do grupo. Putz, que furo!
Lembre-se de colocar uma revisão com o histórico dos trabalhos do seu grupo referentes ao assunto revisado. Isso vai ajudar ao leitor a entender melhor o porque e a necessidade do seu trabalho para os avanços da pesquisa do grupo.
Eu vou fazer essa modificação (e outras) para a versão final do documento da tese. Posso dizer que estou muito mais tranquilo agora, depois que tudo já acabou (e acabou muito bem!).

Por fim, gostaria de agradecer ao meu orientador e amigo Paulo Lage, a todos que apoiaram o meu trabalho, aos membros da banca, aos que conviveram (pessoalmente e virtualmente) comigo nesse período de tese, aos leitores do Notas e seus comentários. In special, I would like to thank very much Dr. Jasak who, during two weeks among us, helped, advised and taught me many things (related to CFD or not). I can tell you that you left in Brazil not only a "new born" doctor, but a friend as well. Obrigado a todos.

Tiras em quadrinhos retirados do site: http://www.phdcomics.com/

May 21, 2008

Defesa de tese de doutorado

Olá, pessoal.

Você que acompanha o Notas em CFD deve ter percebido que a freqüência de posts anda baixa. "Mas o que está havendo com os autores?", o leitor se pergunta... Acabaram as idéias? (Muito pelo contrário... Sempre aparecem mais idéias!) Estão trabalhando na Microsoft e viraram capitalistas gananciosos que só pensam no seu próprio umbigo? (Não, a Microsoft não desenvolve CFD!) Estão de férias? (Férias? Já ouvi essa palavra antes, em algum lugar...)

O fato é que o ritmo de trabalho dobrou nos últimos tempos. Estou finalizando os preparativos para a minha defesa de tese de doutorado. Quem já passou por isso sabe como a banda toca. Você foca seus objetivos na defesa da tese (finalizar manuscrito, agendar com a banca, apresentação, a Lei de Murphy, etc) até que tudo esteja pronto. E estou passando por essa fase.

Posts que tratam de CFD, matemática, programação, etc. precisam ser elaborados com cuidado e atenção. E isso demanda tempo que, como você já sabe, está um pouco escasso hoje em dia. De qualquer forma, estou anotando as idéias que surgem e, preparem-se, pois depois da defesa é muito provável que tenha uma enxurrada de posts. Peço desculpas pela falta de atualização do blog, mas isso será contornado em breve.

Gostaria de divulgar o convite para assistir a minha defesa de tese, que ocorrerá no dia 18 de Junho, às 9:00 horas. O local será na UFRJ (Ilha do Fundão), Centro de Tecnologia, Bloco G, sala G-119. Mais detalhes (título e banca) coloco abaixo:
DESENVOLVIMENTO DE METODOLOGIAS PARA SIMULAÇÃO DE ESCOAMENTOS POLIDISPERSOS USANDO CÓDIGO LIVRE

Banca: Prof. Paulo L. C. Lage, PEQ/COPPE/UFRJ (Orientador)
Prof. Hrvoje Jasak, FSB/Zagreb
Prof. Alvaro Coutinho, PEC/COPPE/UFRJ
Profa. Angela Nieckele, PUC-RJ
Prof. José Carlos Pinto, PEQ/COPPE/UFRJ
A apresentação será realizada em inglês devido a um membro estrangeiro na banca.

Para quem quiser saber mais sobre o meu trabalho, deixo dois links de referência contendo trabalhos realizados durante a tese.

May 8, 2008

Como as coisas se molham?

A relação entre um fino filme líquido ou uma gota e a forma da superfície que se molha é explicada com uma nova e simples fórmula matemática publicada recentemente na revista Physical Review Letters.

Entender de forma precisa a interação entre líquidos e superfícies é importante em várias áreas, incluindo a indústria química e novas nano-tecnologias.

A nova fórmula matemática é usada para explicar como a relação entre o líquido e a superfície muda conforme estas interagem (em outras palavras, se molham - irrrc!). Todas as formulações anteriores falharam ao tentar explicar os experimentos conduzidos nesta área, algo extremamente complicado e de alto teor técnico.

O Prof. Andrew Parry, do departamento de matemática do Imperial College de Londres, autor deste novo artigo propôs e testou uma nova forma de explicar este processo. Sua fórmula leva em conta as flutuações e interações da gota entre a superfície sólida e o ar que fica sobre a última, fato que nunca tinha sido considerado.

"Todas as descrições anteriores ignoram ou interpretam incorretamente estas interações e, consequentemente, obtiam comportamentes estranhos em comparação com dados experimentais ou simulações computacionais. Esta nova formulação parece explicar todos estes problemas e situações.", disse o Prof. Parry.
O estudo da molhabilidade foca o processo no qual um líquido torna a superfície completamente "molhada", assim como ocorre quando um copo de água é despejado sobre uma superfície de vidro. Contudo, não é sempre que os líquidos molham a superfície completamente e gotas podem se formar na superfície. Exemplo disso ocorre em água despejada em um material encerado.

Os cientistas sabem que se a temperatura aumenta, estas gotas irão gradualmente se espalhar até que a superfície esteja completamente "molhada". O processo exato de como esta transição ocorre vem sendo debatido por físicos há 25 anos.

Em CFD, essa molhabilidade está relacionada com uma condição de contorno bem especial aplicada à superfície. Ela define, usualmente através do equilíbrio de forças, o ângulo de contato entre as bordas (ou pontas) da gota e a superfície. Veja abaixo:

Normalmente, essa condição de contorno é aplicada em simulações de acompanhamento de frente livre, que usam a abordagem multifásica VOF (Volume of Fluid). Quanto menor o ângulo de contato, mais a gota "se espalha" sobre a superfície e maior a molhabilidade.

Legal, não? Você já usou esse tipo de condição de contorno? Comente!

Artigo original publicado na Science Daily - How Things Get Wet.

April 22, 2008

Encontro de WebLogs Científicos

O Laboratório de Divulgação Científica é um blog que agrega um banco de dados com o endereço de blogs abordando temas científicos diversos. Inclusive, o Notas em CFD está na lista de blogs.

Com o intuito de aumentar a divulgação da ciência (e dos blogs) no Brasil, está programado para os dias 11 e 12 de setembro de 2008 o I EWCLiPo - Encontro de WebLogs Científicos em Língua Portuguesa. O local do encontro será no Departamento de Física e Matemática (DFM) da Faculdade de Filosofia Ciências e Letras (FFCLRP) da USP Ribeirão Preto.

Até o momento os temas propostos para as mesas redondas:
  • O futuro da blogosfera científica.
  • A questão da qualidade dos blogs científicos.
  • Divulgar ciência: para que(m)?
Os palestrantes confirmados foram:
Para saber as novidades visite:
http://dfm.ffclrp.usp.br/ldc/index.php/ewclipo

Em janeiro deste ano aconteceu um encontro de blogs científicos nos EUA (Science Blogging Conference). Parece que o evento foi movimentado, contando com a presença de blogueiros importantes em diversas áreas da ciência.

Se puder, divulgue na sua instituição a versão tupiniquim desse encontro.

Um abraço e até a próxima.

April 17, 2008

Bugs difíceis de achar

Saiu um artigo na Wired News sobre os piores bugs da história. Entre eles estão a explosão de um oleoduto soviético em plena guerra-fria (como se não bastasse chernobyl), o primeiro worm da Internet (que se aproveita de um buffer overflow da função gets) e o famoso erro de divisão em ponto flutuante do Pentium: um erro de cálculo de cerca de 0,006% que causou um prejuízo de 457 milhões de dólares para a Intel.

Mas o que achei mais legal, apesar de não estar na lista, estava relacionado com o Mariner 1, primeira espaçonave de um programa da NASA para pesquisar Marte, Vênus e Mercúrio em võos automatizados. O Mariner 1 não chegou a sair de órbita, pois houve uma falha na antena de comunicação entre módulos e um bug no programa do computador de bordo.

Falava-se que o bug havia sido gerado ao trocar uma vírgula por um ponto em um loop escrito em FORTRAN. Apesar de não ter sido esse o causador da falha do computador da nave do projeto Mariner, ele existiu de fato em outro projeto da NASA, o Mercury. A linha fatal no caso era essa:
DO 17 I = 1. 10
É óbvio que a intenção do programador foi fazer um loop até o label 17 dez vezes, pois a instrução para isso é:
DO 17 I = 1, 10
Mas pela troca da vírgula pelo ponto, e como em FORTRAN os caracteres de espaço não são significativos, a linha com o bug não representa mais um loop, mas uma atribuição à uma variável chamada "DO17I":
DO17I = 1.10
Esse detalhe esdrúxulo de uma das linguagens mais famosas da época nos leva a crer que antigamente os programadores deveriam estar muito mais atentos durante a digitação de código do que os programadores de hoje em dia, com seus
ambientes com verificação sintática embutida. Existe inclusive um texto humorístico de longa data comparando programadores de verdade e programadores de linguagens estruturadas como PASCAL recém-saídos da faculdade, carinhosamente citados no texto como "Quiche Eaters" (comedores de pastelão).

O tipo de erro de falta de atenção do programa da NASA lembra uma das mais duras críticas às linguagem C e C++: é fácil escrever um código errado do ponto de vista lógico mas sintaticamente correto (compilável). Alguns exemplos famosos:
/************************************************/
// batata entre os iniciantes
if( isActived && isTimeToLaunch );
doTheStuff();

// dizem que até Brian Kernighan
// (criador do C) criticava

switch( value )
{
case 10:
evaluateSentence();
case 11:
elevenException();
}

// mais um "top beginner"
if( newValue = 20 )
doSpecificStuff();

// infelizmente isso é muito comum
int calcPayment()
{
if( testing == true ) return 1000;
else if( newValue > 500 ) return 1500;
}

// o perigo dos brackets opcionais
if( value == 12 )
//func();
doSpecificStuff();

/**************************************************/
Dessa coleção de problemas, o compilador nos brinda com dois warnings:
warning C4390: ';' : empty controlled statement found; is this the intent?
warning C4715: 'calcPayment' : not all control paths return a value
Em nível 4 para aviso de erros (o padrão de um projeto é 3) há um warning adicional:
warning C4706: assignment within conditional expression
Agora imagine o número de horas noturnas em frente ao micro que você não poderia ter economizado em sua vida se aumentasse o nível de warning e lêsse-os de vez em quando? Nada é infalível e você deve ter plena consciência disso.

É por isso que aprender bem a base é essencial para compreender o assunto de forma mais ampla e evitar erros no futuro. Uma das coisas que aprendi ao longo do doutorado é que não adianta pular etapas no aprendizado. As falhas e dificuldades vão aparecer uma hora ou outra e será necessário voltar para a base.

Mas e aí? Tente ver onde estão as falhas nos códigos acima. Você consegue? Comente! Em outra ocasião eu escrevo sobre isto.

April 7, 2008

A condição de não- escorregamento

Você já deve ter usado ou ouvido falar da condição de não-escorregamento, tradução de no-slip. Esta é uma condição física, onde um fluido em contato com uma superfície sólida possui velocidade nula em relação à superfície. Em outras palavras, a velocidade do fluido em contato com um contorno sólido é a mesma do contorno. Conceitualmente, as moléculas do fluido se prendem à superfície pela qual este escoa.

Mas, Luiz F., do que você está falando afinal? Ok, vamos ver isso na prática?
video

Neste vídeo, um fluido traçador é injetado no fundo de um canal onde água está escoando e forma uma camada que fica estagnada devido a condição de não-escorregamento. Conforme o traçador escoa para longe do fundo do canal percebe-se claramente o movimento da água. Note que o traçador fica estagnado no canal até que um gradiente de velocidade significante seja criado próximo ao fundo usando uma espátula (ou colher, ou pázinha, ou um treco).

Matematicamente, pode-se então dizer que:
onde u é a velocidade do fluido, U é a velocidade do contorno sólido e n (com o chapéuzinho em cima) é um vetor unitário.

Mas sempre existem exceções. Um exemplo clássico se aplica na teoria de escoamentos viscosos em linhas de contato. Ou seja, locais onde a interface entre dois líquidos imiscíveis encontram uma superfície sólida. Neste caso, a condição de contorno de não-escorregamento implica que a posição da linha de contato entre os líquidos não deve se mover. Porém isto não ocorre na realidade, onde a taxa com que a linha de contato se move sobre a superfície depende do ângulo de contato fluido-sólido. O completo entendimento deste mecanismo ainda é fruto de várias discussões e estudos. Será mais um assunto no limite da fluidodinâmica?

Quer ver outro exemplo? Atualmente estou simulando um escoamento multifásico com sólido disperso em um líquido em um canal horizontal com gravidade. De fato, qual seria a condição de contorno para a velocidade do líquido na parede do canal? Quem disse condição de não-escorregamento acertou... Mas e a condição de contorno para a fase sólida particulada? O sólido não se prende à parede como o líquido... E então como fica? Na verdade, as partículas sólidas "rolam" pela parede e sua condição de contorno deve ser de escorregamento total ou free-slip. Para tal, coloquei gradiente de velocidade nulo na direção normal à parede. Mas isso é assunto para outro post.

Aviso: Note que este último exemplo não é regra e se aplica ao meu caso em específico. Pode ser que não se aplique ao seu.

April 2, 2008

Participe da Enquete no Notas em CFD

Olá,

O Notas em CFD está disponibilizando uma enquete para conhecer melhor seu leitor e que tipo de informação está sendo procurada. Nós temos várias idéias sobre diversos assuntos, mas queremos saber o que você leitor gostaria de encontrar aqui. No lado direito do blog (no alto da página) você encontrará a enquete com a pergunta

"Qual assunto você gostaria que fosse mais abordado no blog?"

e as seguintes opções:
  1. Conceitos básicos - Está começando a aprender CFD e quer mais informações?
  2. Métodos numéricos - Que tal analisarmos melhor a formulação dos métodos numéricos aplicados em CFD?
  3. Estudo de casos - Vamos analisar um caso e resolvê-lo?
  4. Programas CFD - Análise e dicas de uso de programas CFD.
  5. Curiosidades - Notícias e curiosidades sobre os trabalhos usando CFD no mundo.

Se você já votou, obrigado pela participação. Se não, o que está esperando?? Participe!

April 1, 2008

Liberado o código fonte do CFX, FLUENT e PHOENICS

Em uma manobra inédita e conjunta, todos os pacotes CFD comerciais liberaram gratuitamente seus códigos fonte na internet.

Ao verificar que seus pacotes CFD não fornecem um completo entendimento da modelagem e implementação numérica devido a falta de acesso a seus códigos, as empresas responsáveis se juntaram e entraram em acordo para liberar completamente o código fonte de seus softwares. Assim, o código fonte do CFX, FLUENT e PHOENICS está disponível de forma gratuita na internet (você pode baixar os códigos aqui) e pode ser compilado em seu próprio computador. Diversos sistemas operacionais são suportados (Windows, Linux, MacOS, FreeBSD, DOS, etc).

Além disso, vários flags, não disponíveis na versão comercial pré-compilada, podem ser ativados. Pelo visto, um flag para otimizar a execução do programa conseguiu ganhos de 110% na execução do PHOENICS e 210% no CFX! Faltam os testes usando o FLUENT...

Os códigos estão reunidos em um mesmo site e o download é realizado mediante um cadastro simples, constando de nome completo, email, CPF, sexo, idade, nome do pai, da mãe, da avó e do cachorro (ou outro animal de estimação).

A notícia original da liberação do código está aqui. Não sei quanto tempo os códigos ficarão disponíveis, mas já baixei todos hoje mesmo! Tenho um screenshot da compilação aqui.

March 27, 2008

Linguagem de Programação no OpenFOAM III

Este post é o último de uma seqüência que mostra conceitos e detalhes da linguagem de programação no OpenFOAM. Agora, por fim, vamos analisar uma biblioteca (header) usada em todos os códigos dos solvers do OpenFOAM, o fvCFD.H. Na declaração (ou uso) deste último, várias outras bibliotecas são definidas e fornecem acesso a vários comandos, operadores, funções, etc. implementados nas classes e templates do OpenFOAM. Vamos ao post!

Estruturas das bibliotecas no OpenFOAM
Como já foi mencionado, com base na programação orientada a objetos, as classes e templates 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 figura abaixo, indicando a declaração de algumas das principais bibliotecas do pacote CFD.
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 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. Em outras palavras, a classe fvm discretiza os termos das equações 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 equação mostrada abaixo, para uma variável φ genérica na célula k da malha, com vizinhos i.
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). Por exemplo, essa biblioteca é particularmente útil na solução da equação mostrada acima, já que o OpenFOAM não inclui a pressão na matriz fvMatrix, 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 equação discretizada 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. As classes fixedValueFvPatchField e calculatedFvPatchFields retornam 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 de variáveis constantes; 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) 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 biblioteca, eu chamei todos os arquivos *.H como bibliotecas (ou headers).

Para entender melhor tudo o que eu escrevi aqui, é necessário estudar mais a fundo os códigos dos solvers do OpenFOAM (e C++ também, né?). É por isso que no futuro vou mostrar um estudo de caso. A avaliação de um dos códigos mais simples implementados no OpenFOAM: o laplacianFoam (usado na solução da equação de Laplace transiente). A partir dele, é possível entender melhor o funcionamento deste pacote CFD e seus códigos.

March 21, 2008

Feliz Páscoa!



Antes que eu me esqueça, a equipe do Notas em CFD deseja a todos uma Feliz Páscoa! Tomara que neste feriado seja finalmente possível descansar um pouco a cabeça. E depois a gente volta...

March 20, 2008

Começando a programar em C++

Resposta às dúvidas mais frequentes.

1. Quero me converter para o lado poderoso da força, mas essa história de C e C++ me confunde. O que é o quê?
A linguagem C foi criada no início dos anos 70 para ser usada na programação do UNIX. Cansados de fazer tudo em Assembly, os programadores resolveram criar uma linguagem que fosse estruturada e que permitisse programação low-level ao mesmo tempo. Assim nasceu a linguagem C.
/*
Isso está em C
*/

#include <
stdio.h>
#include <
string.h>

int main()
{
int a = 15;
int b = 20;
char buffer[128]; /* uma string é um array (ou vetor)
de bytes terminado por ASCII zero */

strcpy(buffer, "A variável [a] é ");

if(a > b)
strcat(buffer, "maior");
else
strcat(buffer, "igual ou menor ");

strcat(buffer, " que a variável [b]\r\n");

printf(buffer);

return 0;
}
O C++ é uma evolução da linguagem C, e foi criada por Bjarne Stroustrup. Nessa evolução foi adicionado à linguagem C o conceito de orientação à objetos, que virou moda naquela época (começo dos anos 80) e é muito usado hoje em dia. Além disso, o próprio C++ foi evoluindo no decorrer da década de 80 e 90, com a adição de recursos como templates e a STL (que veremos depois). O C++ tem tudo que a linguagem C tem (99,8% de compatibilidade) e mais toda a evolução. Todo compilador C++ que eu conheço compila código C sem problemas.
//
// Isso está em C++
//

#include <
iostream>
#include <
string>

using namespace std;

int main()
{
int a = 15;
int b = 20;
string buffer; // string é um objeto

buffer = "A variável [a] é ";

if(a > b)
buffer += "maior";
else
buffer += "igual ou menor ";

buffer += " que a variável [b]";

cout << style="color: rgb(0, 0, 153);">return
0;
}
O exemplo feito em C, é compilado sem problemas por qualquer compilador C++, já que ele é também um código C++ válido.

2. Preciso aprender C antes de aprender C++?
Não, não e não. Eu recomendo que você aprenda C++ direto, sem passar pelo C, já que hoje em dia o C++ é mais usado. Se algum dia você precisar fazer algo em C, é só estudar as limitações do C em relação ao C++. As estruturas básicas de controle (if, while, switch...) são as mesmas, o que muda é que a linguagem C não suporta todos os recursos do C++, com suporte à programação orientada a objetos, bibliotecas, templates, etc. Mesmo assim, em C++ você pode usar as bibliotecas do C sem problemas.

3. Todo mundo diz que C++ é muito complicado. Isso é verdade?

Você é um homem ou um rato? C++ requer mais estudo por ser uma linguagem completa e poderosa, mas não é nada que um ser humano normal não consiga aprender. Tem gente que acha que usar o Microsoft Word é complicado. Esqueça o que os outros dizem e estude aquilo que você tem vontade.

4. A moda agora é .NET e Java, será que vale a pena estudar C++?
Vale. Como as pessoas estão indo para as linguagens mais fáceis, os profissionais de C++ são mais valorizados. Afinal, quando se precisa de algo 10 vezes mais rápido, alguém precisa fazer. Não se esqueça que praticamente todos os softwares comerciais que existem são feitos em C ou C++ (Windows, Office, SQL Server, Oracle, Photoshop, CorelDRAW, Linux, Visual Studio, o próprio .NET e todas as VMs Java, etc, etc, etc).

5. Eu já ouvi falar que o Java e o C# são versões melhoradas do C++. Isso é verdade?
Se você acha que uma versão mais limitada de alguma coisa é uma melhoria... O Java e o C# são baseadas na linguagem C++, tirando muitos recursos que, apesar de poderosos, causavam confusão ou dificuldade. Foi feita uma simplificação e um nivelamento por baixo (ok, pelo meio) para atender às necessidades mais comuns. Por serem mais simples, essas duas linguagens são indicadas para aplicativos tecnicamente mais simples, como os que manipulam bancos de dados, controlam regras de negócios e fazem entradas de dados. As duas runtimes (JVM e .NET) têm algumas vantagens sobre o C++, como gerenciamento automático de memória, independência relativa de arquitetura e mais facilidade para leitura dos metadados (enumerar as classes de um DLL, por exemplo). Mas têm a desvantagem de consumirem bem mais memória, serem mais lentas (isso pode melhorar com o tempo) e terem limitações técnicas que as impedem de desenvolver certos tipos de software (como device drivers).

6. Onde posso achar mais informações sobre C++?
Wikipedia - Linguagem C
Wikipedia - C++
Bjarne Stroustrup's C++ FAQ
Bjarne Stroustrup's C++ Style and Technique FAQ
Google: "C++ tutorial" (antes que alguém pergunte...)

7. Ok, Ok... Mas o que isso tem a ver com CFD?
Você tem lido os outros posts desse blog?

Esse artigo é uma adaptação do original publicado no 1Bit, escrito por Rodrigo Strauss.

March 15, 2008

O mundo em 64 bits

A maior vantagem dos processadores de 64 bits em relação aos seu primos de 32 bits é o suporte para grande quantidade de memória. Na teoria, um processador de 64 bits pode alocar exabytes (bilhões de bilhões de bytes) de memória RAM, enquanto os chips com 32 bits podem alocar no máximo 8 GB de RAM (usando componentes de hardware especiais - nunca vi ninguém com sistema 32 bits com mais de 2 GB de RAM). Além disso, as aplicações de 64 bits podem realizar operações de ponto flutuante (operações matemáticas envolvendo números reais) mais rápido que as aplicações específicas para 32 bits. Também necessária para renderização 3D e animações, as operações em ponto flutuante são tão importantes para a análises científicas que os FLOPS (floating-point operations per second) são usados para medir a performance de supercomputadores. A habilidade dos chips de 64 bits em processar operações de ponto flutuante mais rápida e com maior precisão (quase o dobro de casas decimais) que seus parentes de 32 bits os torna poderosas ferramentas para simulação e visualização de dados.

Hoje, a maioria dos computadores desktop não possuem nem 4GB de memória instalada e, além disso, a maioria dos programas usuais de escritório e para casa não requer tanta memória assim. Conforme os programas forem ficando mais complexos e os jogos com maior detalhamento 3D, pode ser que isto se torne uma limitação. Mas na minha opinião, o usuário doméstico vai poder usar o seu PC 32 bits durante um bom tempo sem maiores preocupações.

De fato, os maiores benefícios que os computadores de 64 bits fornecem vão passar despercebidos se o sistema operacional, seus drivers e programas não forem adaptados a essa arquitetura. Ao migrar de um sistema 32 para 64 bits, o usuário não irá notar diferença de velocidade nos seus programas de internet ou processador de texto. Os benefícios serão vistos ao usar aplicações que demandam mais poder do processador, como codificação de vídeos, pesquisa científica (simulações CFD, por exemplo) e pesquisa em banco de dados (massive data mining).

Minha experiência em 64 bits
Recentemente, meu orientador comprou máquinas novas para o Laboratório e eu fiquei com um presentão (devo ter sido um bom menino e trabalhado na minha tese direitinho ou ele está querendo é que eu trabalhe mais ainda!!). Um Core 2 Quad 6600 2.4GHz, com 8 GB de RAM. Para quem não sabe, ele possui um núcleo quadri-processado (4 processadores independentes). Sem dúvida pensei logo em instalar um sistema 64 bits para poder usar toda a memória RAM instalada no micro. Como trabalho com o OpenFOAM e o pessoal que desenvolve o dito usa o Linux OpenSUSE, resolvi instalá-lo no micro. No início foi um pouco estranho (estava acostumado com o Ubuntu e o Fedora), mas agora está tudo indo muito bem. Hoje sou um feliz usuário de um Linux SUSE 64 bits.

Não tive nenhum problema com compatibilidade de hardware com o sistema operacional 64 bits ou seus dirvers. Tudo foi reconhecido perfeitamente (como qualquer distribuição Linux que se preze faria). Além disso, existe uma infinidade de programas já prontinhos para a arquitetura 64 bits disponíveis para download nos repositórios do OpenSUSE (todos gratuitos, diga-se de passagem). Contudo, além de ser um processo bem mais demorado que no Ubuntu (leva mais ou menos 1 minuto para carregar o gerenciador de programas - Yast2), existem alguns programas que eu usava em Linux 32 bits que ainda não foram compilados para 64 bits (ou não estão no repositório do SUSE). Mas isso não foi problema algum, pois baixei o código-fonte deles e estão funcionando perfeitamente. Porém existem programas que eu definitivamente não consegui fazer funcionar no SUSE 64 bits, por exemplo o Google Earth.

Mas o que me chamou a atenção foi outro detalhe. Um dia eu estava usando o computador normalmente (internet, editor de texto simples e o Kile - editor para Latex) e percebi que o computador tinha alocado quase 1 GB de memória RAM para estes programas. Putz!! Como assim? Quando eu usava um sistema 32 bits, normalmente era alocado no máximo uns 500 Mb de RAM ao usar estes mesmos programas. Bem, esse é um fato. O sistema 64 bits aloca os dados na memória com maior precisão, então deve precisar de mais espaço para alocar tudo! Por isso ele estava alocando mais memória do que o sistema 32 bits. Hum... O sistema te fornece mais recursos, mas também exige mais memória. Troca justa, o preço da memória RAM baixou muito!

Vamos ao que interessa... Simulações CFD! O que mais impressiona é a quantidade de memória que pode ser alocada. Em outras palavras, isso significa usar uma malha maior. De fato, antes era impossível construir malhas com um número de na casa do milhão em computadores 32 bits pela limitação da memória. Com mais memória, a malha pode ser mais refinada, produzindo resultados com maior detalhamento. Além disso, tendo o driver de vídeo bem configurado, a visualização dos resultados está ótima. O paralelismo nada tem a ver com o sistema ser 64 ou 32 bits, mas vou dizer uma coisa: é ótimo!

Instalei o ANSYS CFX 11 e o OpenFOAM sem problemas. Realmente, o SUSE é mais propício para a compilação do código fonte do OpenFOAM. Seguindo os passos do Wiki do OpenFOAM, não tive muitos problemas (algumas coisinhas relacionadas com o ParaFoam) em compilar o dito. O único problema mesmo é com o workbench do CFX. Não tem jeito de fazer esse treco funcionar no Linux (algum milagre, talvez?). A versão de Linux recomendada para usar o workbench já está tão ultrapassada que talvez seja aquela que eu preciso reconfigurar tudo para trocar o monitor. Isso eu não vou usar. É impraticável!

Por fim, essas são as minhas impressões sobre 64 bits e o sistema Linux que eu instalei. O Mitre também já comentou sobre as impressões sobre o mundo em 64 bits. Veja aqui o relato dele.

March 13, 2008

Linguagem de Programação no OpenFOAM II

Neste post, vamos ver como os conceitos de orientação a objetos ajudam na interpretação de propriedades físicas pelo OpenFOAM.

Interpretação da Linguagem pelo OpenFOAM
A vantagem do uso da linguagem matemática é a eficiência em expressar conceitos abstratos. Por exemplo, no escoamento de um fluido, o termo "campo de velocidade" possui um significado mesmo sem qualquer menção à natureza do escoamento ou qualquer dado específico de velocidade. O termo encapsula a idéia de movimento com direção e magnitude e a relação com outras propriedades físicas. Na matemática, pode-se representar o campo de velocidades por um único símbolo, por exemplo, u, e expressar certos conceitos usando símbolos, por exemplo, o campo de magnitude de velocidade como |u|. Assim, se torna possível expressar conceitos complexos com extrema clareza.

As equações da mecânica do contínuo são usualmente apresentadas como equações diferenciais parciais em 3 dimensões no espaço e com variação no tempo. Estas equações contêm conceitos de escalares, vetores, tensores e seus respectivos campos, e envolvem álgebra tensorial, cálculo tensorial e sistemas de unidades. A solução destas equações envolve procedimentos de discretização, representação de matrizes e implementação de algoritmos de solução de sistemas de equações lineares. A técnica de orientação a objetos usada pelo OpenFOAM permitiu criar tipos de dados muito próximos aos usados na mecânica do contínuo, e a técnica de sobrecarregamento de operadores permitiu que a simbologia matemática usual fosse aplicada para operações básicas.

As classes implementadas no OpenFOAM declaram tipos e operações associadas que fazem parte da linguagem matemática utilizada na engenharia e no meio científico. O campo de velocidades apresentado anteriormente pode ser representado no código de programação pelo símbolo U e a magnitude do campo de velocidade pode ser mag(U). A velocidade é um campo vetorial e, portanto, deve existir, em um código com orientação a objetos, uma classe vectorField. Então, o campo de velocidade pode ser visto como um objeto da classe vectorField.

A clareza no uso de objetos na programação para representar objetos físicos e entidades abstratas não deve ser subestimada. A estrutura das classes restringe o desenvolvimento do código dentro das próprias classes, tornando o código mais fácil de manipular. Novas classes podem herdar propriedades de outras classes, por exemplo, um vectorField pode ser derivado de uma classe vector e uma classe Field. C++ fornece um mecanismo chamado de classes template, de forma que a classe Field pode representar um campo qualquer, como scalar, vector e tensor. As características gerais da classe template são passadas para qualquer classe criada a partir deste template. Os templates e a herança reduzem a duplicação de código e criam hierarquias de classe que impõe uma estrutura ao código.

Assim, utilizando as classes do OpenFOAM, a sintaxe de escrita dos solvers se assemelha à solução de equações diferenciais parciais. Por exemplo, veja a equação abaixoé 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 tese do Jasak (1996) [1]. O trabalho explica em 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) [2] e Weller et al. (1998) [3] contendo detalhes sobre o código e aplicações práticas do OpenFOAM.

Se estão começando a estudar CFD (métodos numéricos e algoritmos) e querem usar o OpenFOAM, leiam os trabalhos citados aqui (os links para download estão logo abaixo). Mas nada impede que vocês já comecem a usar o OpenFOAM.

Referências Bibliográficas:
[1] Jasak, H., 1996. Error analysis and estimation for the Finite volume method with applications to Fluid Flows. Tese de Doutorado, Imperial College of Science, Technology and Medicine, UK.
[2] Jasak, H., Weller, H. G., Nordin, N., 2004. In-cylinder CFD simulation using a C++ object-oriented toolkit. Paper number 2004-01-0110. SAE World Congress, Detroit.
[3] Weller, H. G., Tabor, G., Jasak, H., Fureby, C., 1998. "A tensorial approach to continuum mechanics using object-oriented techniques". Computers in Physics 12 (6), 620 - 631.