December 6, 2010

Instalação do OpenFOAM-1.6-ext

Como já havia comentado em um post passado o OpenFOAM-1.6-ext estava pra sair. Bem, agora ele saiu (já fazem alguns dias).

Esta nova versão é fruto do esforço conjunto de vários desenvolvedores no sentido de fazer com que partes específicas do software fiquem sob responsabilidades de desenvolvedores especializados naquela área. Em sua área, cada desenvolvedor fica responsável pela correção de bugs, novas implementações, testes de códigos, criação, revisão e atualização de tutorias, etc.

O repositório passou a ser o Git e não mais SVN. O git apresenta uma série de vantagens em relação ao svn, para citar uma, um melhor controle de versões. Além disso, uma ênfase especial foi dada aos softwares auxiliares, ou seja, aqueles que se encontravam no diretório ThirdParty que agora está interno ao diretório OpenFOAM-1.6-ext. Essa nova versão realmente é um marco e vocês poderão ver por si próprios as melhorias conseguidas já na primeira versão extended lançada.

Vou deixar uma nota rápida falando da instalação do OpenFOAM-1.6-ext no Ubuntu, assumindo que a instalação seja feita em /home/usuarioX/OpenFOAM. Os tópicos abaixo resumem a "receita de bolo" para proceder a instalação:


  • Entrar no diretório do OF: cd OpenFOAM
    Clonar o repositório git (obs.: precisa ter o git instalado):
    git clone git://openfoam-extend.git.sourceforge.net/gitroot/openfoam-extend/OpenFOAM-1.6-ext
  • Carregar as variáveis de ambiente do etc/bashrc do OF (veja o arquivo README no caso de dúvidas):
    . $HOME/OpenFOAM/OpenFOAM-1.6-ext/etc/bashrc
  • Instalar o programa rpm, caso o sistema não seja baseado neste tipo de pacotes (sistemas baseados em Debian, ou o Ubuntu como no meu caso):
    sudo apt-get install rpm
  • Certificar-se que os programas: bison, binutils-dev, flex, libstdc++5 e libxt-dev estejam instalados, caso contrário os mesmos devem ser instalados.
  • Para que os programas da ThirdParty sejam baixados e compilados deve-se fazer uma pequena alteração no arquivo Allwmake: descomente a linha ( cd $WM_THIRD_PARTY_DIR && ./AllMake ) deste arquivo.
  • Caso se deseje usar o mpi do sistema pode-se renomear o arquivo prefs.sh-EXAMPLE para prefs.sh (este arquivo encontra-se no diretório OpenFOAM-1.6-ext/etc) e descomentar as linhas que exportam as seguintes variáveis de ambiente: WM_MPLIB, OPENMPI_DIR e OPENMPI_BIN_DIR. Para a variável OPENMPI_DIR deve-se fornecer o diretório onde o open mpi está instalado.
  • Com isso feito basta executar o script Allwmake no diretório principal da versão. Percebe-se que o OF-1.6-ext mudou e agora a ThirdyParty está neste mesmo diretório. O processo de compilação e instalação também foi modificado para dar facilidade ao usuário. Esta mudança deve-se principalmente aos esforços do grupo desenvolvedor e, nessa parte, em especial a Martin Beaudoin.

Algumas observações:

1 - Pode-se encontrar problemas na compilação do ParaView se a variável de ambiente QT_DIR não estiver corretamente setada, para setá-la: export QT_DIR=/xx/xx/qt4 e export QT_BIN_DIR=/xx/xx/qt4/bin ou pode-se usar o arquivo prefs.sh para esta tarefa, basta descomentar as linhas que exportam essas duas variáveis dando o local de instalação do Qt para QT_DIR. No caso do paraview pode-se também optar pelo que é fornecido pelo próprio repositório do Ubuntu que é facilmente instalado via terminal ou usando o synaptic.

2 - No Ubuntu é normal não se ter o gmake, mas este é usado na compilação do ParMGridGen-1.0. Para criar o gmake no Ubuntu: sudo ln -s /usr/bin/make /usr/bin/gmake

3 - Problemas com o ParMetis-3.1.1 podem ocorrer. Se isso acontecer deve-se ir até o source desse programa, abrir o Makefile e remover as linhas onde se faz o make para o diretório Programs, por exemplo: (cd Programs ; make ) , etc. Uma vez feito isso deve-se gerar novamente o arquivo compactado, pois este será chamado e usado na compilação.

4 - Pode-se também querer baixar e compilar o QT, neste caso basta descomentar a linha export QT_THIRD_PARTY=1 e dar o caminho correto do diretório de instalação para a variável QT_DIR

Apesar de não ter feito a instalação em distros baseadas em rpm, acredito que a instalação do OF nesses sistemas seja mais fácil e sem problemas. No caso de distros baseadas em Debian também acredito que as dicas acima sejam suficientes, pois foi isso que tive que fazer no Ubuntu.

Espero que isso ajude na instalação desta nova versão.

November 30, 2010

Dr. J. F. Mitre - Parabéns!

Olá leitor! Meu nome é Livia Jatobá e este é o meu primeiro post aqui no Notas em CFD. Sou aluna do Laboratório de Termofluidodinâmica (LTFD) do Programa de Engenharia da COPPE desde 2008.

Estou aqui, em nome de todos do LTFD, para falar de um colega de blog e também de Laboratório, o J. F. Mitre.

O João é um grande contribuidor para o desenvolvimento de pesquisa da área! Ele esta sempre disposto a ajudar e é ainda um pesquisador bastante versátil. Tira dúvidas desde as restrições dos modelos de escoamento multifásico à aplicações mais complicadas que você consegue encontrar no Linux! Mesmo quem não tem o privilégio de trabalhar diretamente com ele é capaz de perceber isto. Basta já ter lido um de seus posts aqui no Notas em CFD ou mesmo em seu próprio blog.

Hoje, João Felipe Mitre, concluiu o seu doutorado! Sim, Dr. J. F. Mitre, parabéns! Todos nós do LTFD gostaríamos de parabenizá-lo por esta grande conquista! E a comunidade científica agradece pela publicação de sua tese, sob título: "Modelos de quebra e coalescência de gotas para o escoamento de emulsões". Um leitura "rápida" de apenas 400 páginas!

Já estamos esperando pelas suas novas contribuições!

Um grande abraço.

November 7, 2010

O Projeto OpenFOAM® - Extend

A falta de informações mais detalhadas explicando a enorme quantidade de códigos que compõe o software OpenFOAM sempre foi uma das primeiras senão a principal reclamação de quem está começando a usar este software - isso quando não é pelo fato de ter que usar Linux :).

Desse modo, a escassa literatura sobre o que está implementado no OF sempre foi um problema, pois convenhamos que o User e o Programer's Guide são fraquinhos e não dão conta do recado para ajudar suficientemente quem está começando a desenvolver seu primero solver. Assim, até hoje ainda, uma das principais referências sobre o OF acaba sendo o seu fórum de discusão no cfdonline.

Só para deixar claro, o OpenFOAM® é uma marca registrada pela OpenCFD Ltd que mantêm o mesmo como um código livre e aberto (ou sob GNU General Public Licence). A OpenCFD atua dando suporte e oferecendo treinamento além de trabalhar no desenvolvimento do código, seja para fins privados ou para aquilo que existe de novo entre diferentes versões. Dessa forma, fica claro que, para a OpenCFD não é nada vantajoso uma distribuição detalhada de informações sobre o código do OF,  senão quem iria pedir suporte ou treinamento?? 

Bom, sem brincadeira isso parece verdade como pode ser visto num post no cfdonline onde o Holger Marschall, o qual pretendia criar o então chamado FOAM Documentation Project (um lugar para reunir as mais variadas e detalhadas informações sobre o OF),  expõe seu desapontamento pelas atitudes da OpenCFD para com ele, vejam em detalhes neste link.

Em contrapartida a isso surgiu o OpenFOAM®-Extend Project. Esse tem como objetivo ser um espaço para os usuários do OpenFOAM-ext, ou seja, os antigos usuários do OpenFOAM-dev fornecido pelo Prof. Hrvoje Jasak que é quem trabalha no core do OF e que é o principal desenvolvedor e mantenedor desta versão. Assim, a idéia é que este espaço seja um ambiente de troca de informações entre os usuários e desenvolvedores de códigos no OF. Além disso, pode-se criar grupos de discussão sobre temas específicos, trabalhar em projetos de desenvolvimento em conjunto, anunciar bugs, depositar seu código para futuro incorporamento ao código principal, enfim, deixo-lhes a vontade para navegar pelo site do projeto e também criarem uma conta se desejarem.

Bom, como vi que poucas pessoas estavam sabendo sobre este tema (o projeto OpenFOAM®-Extend) resolvi criar esta rápida nota sobre isso e acredito que o recado foi dado. Só uma última notícia quentíssima para os usuários de OF-dev, a nova versão está saíndo do forno, ou seja, OpenFOAM-1.6-ext está chegando muito em breve.

July 31, 2010

Usando pontos de monitoramento no OpenFOAM

O uso de pontos de monitoramento (PM) é extremamente útil em simulações CFD. Um ponto de monitoramento nada mais é do que um "ponto", com coordenadas (x,y,z), inserido pelo usuário em um local estratégico da geometria para fins de ter o valor de uma variável salva para cada passo de tempo. Em outras palavras, como em simulações CFD não é possível salvar a solução para cada célula da malha e para cada passo de tempo (haveria a necessidade de muito espaço em disco), o uso de pontos de monitoramento é uma opção para se ter o valor de alguma variável (salva em cada passo de tempo) em alguns locais estratégicos da geometria.

Vou descrever aqui como fazer isso no OpenFOAM. A versão de OpenFOAM que estou tomando como base é a OpenFOAM-1.5-dev. Acredito que  funcione da mesma maneira em outras versões, mas quero deixar claro que não testei.

Primeiramente vamos até o arquivo controlDict, localizado dentro do diretório system, pois vamos ter que acrescentar algumas linhas de informação no final desse arquivo. O que deverá ser acrescentado está a seguir:

// ****************************************************************************** //

functions
(

       // O nome que o usuário que dar ao ponto de monitoramento
   pontoMonit1  
   {

              // Especifica que a utilidade probes será a usada
      type probes; 

              // Essa biblioteca deve ser carregada 
      functionObjectLibs ("libsampling.so");  

              // Localizações dos pontos de monitoramento. Modificável em tempo de execução
      probeLocations
      (
         (1 0 0)      // coordenadas do primeiro ponto de monitoramento
         (1.5 0 0) // coordenadas do segundo ponto de monitoramento
      );

              // Campos (variáveis) que serão monitoradas. Modificável em tempo de execução
      fields
      (
         tau  // gera dados para o campo de tensão "tau" (do tipo symmTensorField)
         U        // gera dados para o campo velocidade "U" (do tipo vectorField
         p        //   gera dados para o campo  de pressão "p" (do tipo scalarField
         ?        // .... outro campo desejado
      );
   }
);

// ****************************************************************************** //

Feito isso, logo que começamos a simulação, um diretório com o nome dado ao ponto de monitoramento (no caso acima pontoMonit1)  é criado dentro do diretório do caso. Dentro deste diretório tem um novo diretório que especifica o tempo inicial daquele ponto de monitoramento, se for começado no tempo 0 (zero), então este diretório terá o nome "0".  Dentro deste último diretório (Ufahh!)  estarão os arquivos contendo os dados dos pontos de monitoramento. O funcionamento dos arquivos é o seguinte: cada novo campo tem seu próprio arquivo com seu nome e os diversos pontos de monitoramento ficam dentro de um mesmo arquivo. 

Os arquivos gerados estão no padrão OpenFOAM de representação tensorial, veja o exemplo ilustrativo abaixo para o caso do vetor velocidade:

# Tempo      ponto de monit. 1           ponto de monit. 2
1.19998e-05 (1.44637e-05 -1.50596e-11 0) (1.44637e-05 -1.91593e-11 0)
2.63988e-05 (3.17809e-05 -1.25082e-11 0) (3.17809e-05 -1.14036e-12 0)
4.36766e-05 (5.2514e-05 9.46453e-12 0) (5.2514e-05 5.30116e-12 0)

Estes dados não estão prontos para o uso direto em softwares como xmgrace ou gnuplot. Para facilitar o tratamento desses dados um shell script foi criado (o Mitre começou  e eu incrementei mais algumas coisas posteriormente).  Este scrip opera sobre os arquivos de probe do OpenFOAM para que seja possível o uso desses dados em editores de gráficos. Além de gerar os arquivos de dados para programas de geração de gráficos, o script permite também, se o usuário pedir,  a criação automática de gráficos usando o xmgrace (estando o software corretamente instalado em sua máquina).  O shell script está disponível para download no link abaixo:

foamProbe

O uso do script segue a notação:

$foamProbe {diretório dos PM} {número de PM} {nome do campo} {opcional: 0 - abre no xmgrace, 1 - salva em arquivo eps}

Note que este arquivo deve ter propriedades de executável e caso voce não coloque ele em um diretório visível ao seu sistema, como o diretorio "bin", por exemplo, você poderá ter que usar: $./foamProbe

Para o caso mostrado aqui tem-se (estando dentro do diretório do caso):

  1. Para criar arquivos para 2 pontos de monitoramento para o campo U: 
    $foamProbe pontoMonit1/0/ 2 U
  2. ou para abrir no  xmgrace:
    $foamProbe pontoMonit1/0/ 2 U 0 
  3. ou para criar automaticamente .eps: 
    $foamProbe pontoMonit1/0/ 2 U 1 

Com isso o diretório probeU será criado dentro de pontoMonit1/0/ contendo os arquivos de dados prontos para serem usados com os programas gráficos preferidos.

Bem, espero que, este post + o script, ajude aos usuários do OpenFOAM na hora de fazerem o pós-processamento.

July 17, 2010

Fluidos Visco-Elásticos

Como este é meu primeiro post aqui no blog, vou começar com uma breve introdução sobre minha pessoa, falar do que fiz em minha graduação e mestrado, para depois apresentar-lhes o ponto principal do post que é comentar sobre fluidos viscoelásticos e o solver viscoelasticFluidFoam.

Meu nome é Jovani, sou formado em Engenharia de Bioprocessos e Biotecnologia pela Universidade Estadual do Rio Grande do Sul (UERGS), mestre em Engenharia Química pela Universidade Federal do Rio Grande do Sul (UFRGS) e atualmente faço doutorado em Engenharia Química na Universidade Federal do Rio de Janeiro (COPPE/UFRJ).

Comecei a trabalhar na área de fluidodinâmica computacional (CFD) durante minha graduação, numa iniciação científica. Na ocasião, desenvolvi um código CFD para simular dispersão de poluentes em solos. A experiência foi muito interessente, pois tive que desenvolver um código CFD do zero, ou seja, criar geometria, malha, aplicar discretização usando volumes finitos (FVM), implementar meus próprios esquemas de interpolação, resolver o sistema algébrico-diferencial de equações resultantes da discretização espacial, além de programar muito.

Lembro-me de ter implementado diferenças centrais (CD) e ainda enquanto estava resolvendo somente difusão tudo estava perfeito, mas bastou colocar o termo advectivo para surgirem as famosas oscilações na solução e obrigar a buscar outro esquema de interpolação. O que está implementado atualmente é o esquema WUDS. Este esquema usa um medidor difusão/advecção para poder dosar entre CD/upwind. O código foi desenvolvido inicialmente em Linux para execução em console. Posteriormente, trabalhei no desenvolvimento de uma interface gráfica em Linux, usando Qt, e também numa versão Windows para o software. Agora já faz algum tempo que o código está parado.

A versão Windows do software está disponível para download neste link e tem implementado a solução de difusão, advecção, sorção e geração/degradação (para processos de (bio)remediação) em todo o domínio ou localizada. Esta versão foi compilada em Windows XP, mas roda tranquilamente no Vista e no 7, assim como em máquinas virtuais no Linux (e no emulador Wine ele executa sem problemas também). Existe até um paper publicado na revista Eng. sanit. ambient. com algumas informações sobre a modelagem usada. O software pode ser usado para simular problemas simples (devido a limitação de geometria que pode ser usada) de transferência de calor e massa.

Durante o mestrado continuei trabalhando com CFD e, diga-se de passagem, em uma área um pouco mais complexa. O objeto de estudo foi a área de fluidos viscoelásticos, a qual vou-lhes introduzir nos parágrafos posteriores.

Quando se fala em Mecânica dos Fluidos, a maioria pensa automaticamente em escoamentos de fluidos de características newtonianas, de que os exemplos mais comuns são o ar e a água. Apesar da grande aplicação dos fluidos newtonianos, a maioria dos fluidos sintéticos industriais (indústria de polímeros principalmente a de terceira geração a qual promove a transformação dos materiais poliméricos em produtos finais), inúmeros fluidos de relevância biológica, entre outros, apresentam características claramente não newtonianas:

  • A geologia tem demonstrado que o movimento do gelo glacial, o escoamento de lava dos vulcões e a sua posterior solidificação são fenômenos só corretamente descritos, quando se assumem modelos de comportamento reológico não newtoniano.

  • O sangue é um fluido de constituição físico-química complexa, formado por moléculas de grandes dimensões e elevado peso molecular em solução num fluido de baixo peso molecular e estruturalmente simples. Estes são os ingredientes para um fluido com características viscoelásticas. A saliva e o fluido sinovial, que lubrifica as juntas ósseas, apresentam um elevado grau de elasticidade extensional.

  • Fluidos diversos como as tintas decorativas, as tintas de impressão, as colas, os produtos de cosmética e beleza, os medicamentos, os produtos alimentares no estado líquido (ketchup, iogurtes, molhos), inúmeros produtos alimentares que, apresentando-se aos consumidores no estado sólido ou em pó, passaram em processo por uma fase líquida (sorvetes, produtos de confeitaria, massa de panificação), os sabões e detergentes, alguns óleos com aditivos de massa molecular elevada ou contendo partículas no estado sólido, fluidos lubrificantes utilizados na perfuração de poços de petróleo e gás natural, petróleo bruto, plásticos no estado líquido (polímero fundido), alguns fluidos térmicos, lamas de estações de tratamento de águas residuais, todo o tipo de lamas provenientes da indústria extractiva, fluidos abrasivos, etc. De fato, a lista de fluidos não newtonianos é muito extensa do que uma lista de fluidos com características newtonianas.

Mas o que é realmente um fluido com reologia viscoelástica?? Pode ser definido simplificadamente como sendo um fluido que se comporta como viscoso e elástico ao mesmo tempo. Um material elástico ideal, sob uma tensão, responde com deformação reversível. Ao cessar a tensão o corpo retorna à sua forma e volume original. Já um material viscoso, quando sob uma tensão de cisalhamento, responde de forma irreversível as deformações sofridas. O fluido viscoso dissipa energia. Fluido viscoelástico faz um pouco de cada coisa, ou seja, dissipa um pouco e armazena o restante. O que vai dizer o quando vai ser dissipado ou armazenado são as próprias características do fluido. O tempo de relaxação, por exemplo, é uma dessa características.

As figuras que seguem ilustram fenômenos tipicos de fluidos viscoelásticos:

  • Inchamento de extrudado (die swell). Fluido Newtoniano na esquerda e fluido viscoelástico na direita (Fonte: Bird et al., 1987):


  • Experimento rod-climbing. Fluido Newtoniano na esquerda e fluido viscoelástico na direita (Fonte: Bird et al., 1987):

Outra questão interessante é que todos os fluidos demostram um pouco deste comportamento. Por exemplo, o vidro usado em janelas se apresenta no estado sólido, mas com o passar do tempo, em construções mais antigas, se percebe que a parte inferior da lâmina de vidro é mais espessa que a superior, ou seja, o vidro escoou, o tempo de relaxação do vidro foi superado e devido a gravidade escoou e se acumulou na extremidade inferior. Este é um caso onde o tempo de relaxação é grande. Se pegarmos uma chapa de aço esse tempo é tão grande que não percebemos mudanças. Por outro lado, estamos cercados de fluidos com tempo de relaxação muito pequeno, a água (típico fluido newtoniano) é um desses casos. Se pularmos na água de uma altura muito grande, ou seja, fazermos com que o tempo de relaxação da água seja maior do que o tempo de ação de nossa força nela, vamos ter a sensação de colidir com algo sólido. Por isso que não se pode pular na água de lugares muito altos, pois literalmente, o que aconteceria, era se esborrachar. No youtube se encontram vários vídeos onde as pessoas andam sobre uma piscina contendo fluido não-newtoniano.

Em condições normais de pressão e temperatura o ar encontra-se muito concentrado e tem um tempo de relaxação de fenômenos elásticos da ordem dos 10e-13 s. Como a maioria dos fenômenos que observamos na biosfera terrestre tem tempos característicos significativamente superiores, o ar encontra-se em equilíbrio e as suas propriedades reológicas podem assim ser consideradas como newtonianas. Contudo, se um gás se encontrar rarefeito, e até no estado de plasma, os fenômenos de dinâmica gasosa terão tempos característicos da mesma ordem de grandeza dos tempos de relaxação e colisão inter-molecular, não sendo neste caso já possível considerar essa matéria como tendo propriedades newtonianas, nem válida a hipótese do meio-contínuo (vejam neste post do Mitre). Ora, a matéria nesse estado rarefeito, dito de plasma, constitui a quase totalidade da matéria do universo.

Depois dessa introdução aos fluidos viscoelásticos cabe falar um pouco do tratamento usando CFD. Não vou me estender no equacionamento. Uma visão simplista mostra que a diferença em relação aos fluidos newtonianos é a necessidade de uma equação constitutiva mais sofisticada para o tensor tensão. As equações constitutivas encontradas são do tipo diferencial ou integral e, diga-se de passagem, um tanto complexas. Na minha dissertação de mestrado, disponível nesse link, tem muita coisa a respeito da modelagem e tratamento CFD para resolver este tipo de fluido.

O trabalho sobre fluidos viscoelásticos surgiu pela necessidade da industria de processamento de polímeros, que trabalha com fluidos viscoelásticos em processos de moldagem, injeção, extrusão, etc. Assim, o enfoque principal foi para esta aplicação. A industria de processamento de polímeros conta hoje com bons softwares para simular os processos descritos anteriormente, contudo com um porém, a maioria dos softwares simulam somente fluidos não-newtonianos e não propriamente fluidos viscoelásticos. Isto, principalmente devido a complexidade da simulação dos fluidos viscoelásticos e as vezes por falta de conhecimento do pessoal da industria. O software Moldflow é um dos mais conhecidos na industria de polímero. Simula fluido não newtoniano, do tipo power-law, Bird-Carreau, ..., e sua licença é caríssima. O software Polyflow, da Ansys, é um dos poucos que trata fluidos viscoelásticos. O problema é o valor da compra e manutenção da licença.

Tendo conhecimento do software OpenFOAM (OF), livre e de código aberto, optou-se por criar o solver para tratar escoamentos com fluidos viscoelásticos nesse software. Uma vez feito isso teríamos em mãos um solver mais genérico e com aplicações em problemas variados, sem limitações de geometrias e malhas, possibilidade de usar várias ferramentas sofisticadas de CFD, processamento paralelo, técnicas multigrid, enfim, usar tudo o que o OF tem a oferecer e de forma gratuita.

O solver criado foi batizado com o nome viscoelasticFluidFoam é está disponível, já faz algum tempo, na versão OpenFOAM extended ou dev (OF-dev). O solver é usado como qualquer outro existente no OF e para facilitar o uso tem alguns exemplos no tutorial do software. A quantidade de modelos implementada é vasta, ou melhor, todos aqueles que encontrei enquanto fazia a revisão bibliográfica para minha dissertação de mestrado. O solver vem sendo usado por muita gente, principalmente pessoas de fora do brasil. Como já comentado, está disponível na versão OF-dev que pode ser conseguida usando o seguinte:

svn checkout http://openfoam-extend.svn.sourceforge.net/svnroot/openfoam-extend/trunk/Core/OpenFOAM-1.5-dev/ OpenFOAM-1.5-dev/

Sugere-se a leitura desse post, do Luiz Fernando, que dá maiores informações sobre este assunto. Para usuários de sistema operacional Ubuntu 10.04 tem uma maneira muito fácil de ter o OF-dev operacional (créditos ao CAE-Team), basta executar 3 comandos:

  1. sudo add-apt-repository ppa:cae-team/ppa

  2. sudo apt-get update

  3. sudo apt-get install openfoam-dev-1.5

e carregar as variáveis de ambiente do mesmo com:

source /usr/lib/OpenFOAM-1.5-dev/etc/bashrc

no terminal em que o OF-dev será executado.

Pode-se também compilar o solver na versão OpenCFD do OF. No fórum do cfdonline tem um post que comento a respeito disso, vejam aqui.

O código do solver também pode ser visualizado diretamente do repositório (viscoelasticFluidFoam). As equações constitutivas para fluidos viscoelásticos, por sua vez, estão em uma biblioteca a parte (viscoelastic). Alguns utilitários para pós-processamento também foram criados (utilities).

Bom, quem sabe um dia, posso voltar a falar mais a respeito do solver viscoelasticFluidFoam.

April 5, 2010

Hipótese do Contínuo

Fluidos são compostos por moléculas que colidem umas com as outras e com objetos sólidos. A hipótese do contínuo considera que os fluidos são contínuos. Ela assume que o fluido é dividido por corpos/partículas que são:
  • pequenos o suficiente para que todas as suas propriedades (como temperatura e densidade) possam ser consideradas uniformes e
  • que são grandes o suficientes para conter um número estatisticamente grande de moléculas

O perfil de densidade em função do volume do corpo estabelecido em uma certa posição (figura acima) pode ser ilustrado pela figura abaixo.


O gráfico acima deve ser interpretado não apenas como a densidade em função do volume do corpo, mas também como a densidade em função do número de moléculas que existem dentro de um certo volume. Quando o volume é pequeno, o número de moléculas é pequeno, a inclusão/exclusão e a densidade pode alterar significativamente com o volume.

A hipótese do contínuo requer que exista um número significativo de moléculas dentro do volume do corpo de forma que a densidade altere-se continuamente com o volume.

A hipótese do contínuo é basicamente uma aproximação e resulta, portanto, em soluções aproximadas. Consequentemente, adotar a hipótese do contínuo pode levar a resultados que não possuem a acurácia desejada. Contudo, aplicado nas condições corretas, a hipótese do contínuo produz resultados extremamente acurados.

Os problemas para os quais a hipótese do contínuo não fornece uma acurácia satisfatória são resolvidos usando mecânica estatística. De modo a determinar quando se deve ou não usar a teoria de fluido dinâmica convencional ou a mecânica estatística, o número de Knudsen deve ser avaliado para o seu problema. O número de Knudsen é definido como a trajetória livre média das moléculas aplicadas a uma escala de tamanho física representativa. Esta escala de tamanho pode ser, por exemplo, o raio de um corpo em um fluido. De forma mais simples, o número de Knudsen representa a média de quantas vezes a partícula (molécula) se move em relação ao seu diâmetro até atingir (colidir) com outra partícula. Problemas com números de Knudsen próximos ou acima da unidade são melhores representados usando a mecânica estatística para soluções mais confiáveis.

É muito importante ter em mente que TODA a mecânica dos fluidos clássica requer que a hipótese do contínuo seja válida.

Portanto, escoamento de gás diluído em nano-poros (em alguns casos, micro poros) não pode ser objeto de estudo da mecânica dos fluido clássica e, obviamente, não pode ser objeto de simulação CFD.

Da mesma forma, o volume mínimo de um elemento de malha é teoricamente limitado pela quantidade de moléculas que estarão dentro daquele volume, ou seja, o volume mínimo de um elemento da malha deve ter moléculas suficientes para que a densidade seja descrita como uma função do contínuo. Infelizmente (ou não !) a real limitação é a memória RAM da máquina que gera a malha e do cluster que irá resolver as equações no domínio definido por ela. O que não impede que exista vários exemplos na literatura (que não vale apena citar aqui) onde o CFD foi aplicado sem validação apropriada da hipótese do contínuo.

Na prática, embora eu tenha dado um tom alarmista nesse último parágrafo, a verdade é que a maior parte dos escoamentos são perfeitamente descritos pela mecânica do contínuo, as exceções tradicionalmente envolvem gases diluídos em canais muito pequenos (poros).

Por ser a base de tudo que fazemos na mecânica do fluidos, considero ser muito importante a imagem do que essa hipótese significa e a melhor imagem que eu tenho de um fluido incompressível pode ser ilustrada pela figura abaixo...

Eu olho para essas piscinas de bolas e vejo água (quando essa pode ser considerada incompressível, claro), porque é exatamente assim que nós modelamos a água. Fonte: site da CBS.

Caso fosse um escoamento compressível, cada bola deve ter a capacidade de ter seu volume alterado sem diminuição do número de moléculas que estejam contidas na bola, assim, o modelo mais apropriado seria de uma piscina de bexigas de festa de aniversário... dá para imaginar a cena ? Pois é ... esse é um fluido genérico.

Vale observar que não existe o "espaço intersticial" entre os volumes que compõem um fluido e que a forma desses volumes não é relevante. Outro ponto interessante é que sobre cada corpo que compõem o fluido aplicam-se todas as leis da mecânica básica (como a segunda lei de newton) e que aplicação da mecânica básica nesse corpo de fluido nos permite escrever o que é conhecido como o Teorema de Transporte de Reynolds. Assunto que será discutido nesse blog em algum dia futuro !

Devo compartilhar a autoria desse texto como Luiz. Ele começou a rabiscar o texto e eu modifiquei e completei, mas aproveitei muito do que ele escreveu. Infelizmente eu não sei como colocar dois nomes em um texto do blogger (e isso nem mesmo faz muito sentido para mim). Seja como for, fica aqui o registro do fato.

As duas primeiras figuras utilizadas nesse texto foram obtidas do livro "A Course in Fluid Mechanics with Vector" de Dennis C. Prieve, 2001, cuja a versão antigamente podia ser gratuitamente obtida na internet em sua página pessoal. Infelizmente não consegui localizar o livro na sua fonte original novamente.

March 22, 2010

Gnuplot: Tipos de pontos e linhas

Agora que já aprendemos o básico sobre o gnuplot, eu posso começar a passar dicas mais simples e específicas sobre o uso do programa, voltando-o para aplicações científicas.

Uma pergunta que eu sempre me faço ao fazer um gráfico é qual o tipo de ponto/linha que eu devo utilizar. Em um programa gráfico, normalmente você percorre uma lista até conseguir achar aquela especificação que mais te satisfaz.

No gnuplot o tipo de ponto é especificado com a opção 'pt N' e o tipo de linha é especificado com a opção 'lt N', onde N é um número inteiro que representa o código da linha. O grande "problema" é que o número não diz nada sobre o tipo de linha. Dessa forma seria gasto tempo desnecessário consultando um manual para saber qual é o tipo que quer usar.

O que eu faço é usar o gnuplot para gerar gráficos que me dizem quais são os códigos dos tipos de linhas e pontos disponíveis.
A figura abaixo (clique nela para ampliar) apresenta 39 tipos de pontos. Existem formatos adicionais de pontos, mas sou da opinião que se não conseguir resolver o seu problema com os 15 primeiros formatos deve reconsiderar o gráfico, embora essa seja uma opinião bem pessoal sobre o problema.


Os pontos nessa figura possuem o tamanho 3. O tipo de coisa que pode ficar bem ruim em um gráfico final, mas é excelente para ver bem o ponto.

Um exemplo de comando plot está abaixo.
plot "dados.dat" using ($1):($2) title "Ponto Tipo 10" with points pt 10
Esse comando cria um gráfico de pontos a partir do arquivo dados.dat usando a coluna 1 para o eixo X e a coluna 2 para o eixo Y e com o estilo de ponto tipo 10, ou seja, o triângulo vazado de cabeça para baixo.

Quanto aos tipos de linhas, a figura a seguir (clique nela para ampliar) apresenta todos os 9 tipos de linhas disponíveis atualmente. De fato, eu escrevi no código até o tipo 11, mas isso tem dois objetivos, o primeiro identificar quando surgir um novo tipo de linha e o segundo provar que quando acaba a lista de estilos, o ciclo se repete, ou seja, o tipo 10 é o tipo 1 e tipo 11 o tipo 2, etc. Isso também acontece com os pontos, mas eu não faço idéia de quando a lista de pontos termina.


Acredito que todos concordem que os tipos de linha estão bem nítidos nesse figura. Estou usando espessura de linha tamanho 4 (lw 4). Na espessura padrão (lw 1) as diferenças entre os tipos de linhas podem não ficar tão fáceis de serem percebidas.

Um exemplo de comando plot está abaixo.
plot "dados.dat" using ($1):($2) title "Linha Tipo 5" with lines lt 5
Esse comando cria um gráfico de linhas a partir do arquivo dados.dat usando a coluna 1 para o eixo X e a coluna 2 para o eixo Y e com o estilo de linha tipo 5, ou seja, alternando traço longo e um ponto.

Disponibilizo para os interessados o arquivo do gnuplot, plt, que gera as figuras acima. O que me faz lembrar que eu não havia dito no tópico anterior que um mesmo arquivo .plt pode gerar tantos gráficos quanto forem desejados. E, por favor, não espere muitos comentários escrito dentro do arquivo, do meu ponto de vista, esse plt é importante pelo resultado não por ele mesmo.

E as cores ? Bem, sabe tudo que você leu acima ? Continua válido. Agora você terá de adicionar uma opção a mais que é a 'lc'. As cores padrões disponíveis podem ser vistas na figura abaixo (clique nela para ampliar). De forma similar aos tipos de linhas, existem 9 cores básicas e depois começamos a repetir as cores. Repare que a figura representa o tipo 1 e 2 de linhas com todas as cores básicas disponíveis.
De forma que
plot "dados.dat" using ($1):($2) title "Tipo 5 Cor 2" with lines lt 5 lc 2
cria um gráfico de linhas a partir do arquivo dados.dat usando a coluna 1 para o eixo X e a coluna 2 para o eixo Y e com o estilo de linha tipo 5, ou seja, alternando traço longo e um ponto e a cor 2, ou seja, verde.

Quando eu digo cores básicas, eu quero dizer, que o gnuplot aceita qualquer cor que possa ser representada pelo código RGB, eu, francamente, acho isso inapropriado em gráfico científico.

Eu não acho que faça algum sentido colocar a figura para os tipos de pontos, mas o arquivo plt que gera a figura anterior (que é diferente do primeiro) gera também um pequeno exemplo de configuração das cores em pontos, embora adicionar 'lc N' onde N é o número da cor na linha de plot do gráfico não me parece algo tão misterioso assim...

Ah ! Ainda não descobri se a abordagem dessa ferramenta agrada a uma audiência que espera notas sobre CFD. A verdade é que fazer gráficos é uma das tarefas de qualquer pesquisador e muitos dos leitores desse blog usam o GNU/Linux, LaTeX e OpenFOAM e portanto são candidatos perfeitos ao uso do Gnuplot. Me deixem saber se esse tipo de assunto agrada, ajuda ou não.

Um coisa que eu, infelizmente, percebo é que muitos alunos pensam que porque utilizam uma ferramenta que permite "visualizações fantásticas e complexas", os velhos gráficos bidimensionais de linhas e pontos devam ser descartados. Isso definitivamente não é verdade. Na maior parte das vezes, são os "simples" gráficos 2-D que trazem a maior parte das informações relevantes, bem como são o formato básico de comparação de resultados experimentais com o obtido por CFD. Ainda que a ferramenta não agrade, a importância desses gráficos não deve ser menosprezada.

March 13, 2010

Introdução ao fenômeno da turbulência

A palavra "Turbulência" sem a abordagem científica, remete a conceitos como:
  • avião sacudindo devido a força do vento (uma imagem derivada de filmes) e
  • uma pessoa que enfrente dificuldades pessoais/profissionais.
Por outro lado, o dicionário diz o seguinte:
turbulência
tur.bu.lên.cia
sf (lat turbulentia) 1. Qualidade de turbulento. 2. Ato turbulento. 3. Grande desordem; motim, perturbação da ordem pública, sublevação, tumulto.
onde a palavra "turbulento" é definida da seguinte forma:
turbulento
tur.bu.len.to
adj (lat turbulentu) 1. Em que há turbulência ou perturbação. 2. Propenso a causar desordem. 3. Agitado, tempestuoso. 4. Buliçoso, ruidoso. 5. Revoltoso, sedicioso. sm Indivíduo desordeiro ou bulhento.
Na mecânica dos fluidos, turbulência é um termo utilizado para caracterizar o estado de um certo escoamento, o escoamento turbulento. Esse estado é agitado, tempestuoso, desordenado e certamente é uma perturbação da ordem.

É um escoamento turbulento o escoamento que possui flutuações no campo de velocidade que são dependentes do tempo e da posição no espaço. [update]Acabo de perceber algo que não ficou claro nesse texto. O escoamento turbulento requer que todas as características citadas posteriormente sejam constatadas. Do contrário, não é escoamento turbulento.[/update]

Quanto mais intenso é a turbulência, maior é a flutuação da velocidade, no caso do escoamento da atmosfera, maiores são as chances dessas pertubações serem percebidas pelos aviões que estejam naquela região.

As principais características da turbulência são:
  • A turbulência é caótica ou, como é dito em alguns livros, irregular. O que significa que ela não é determinística, portanto, não pode ser modelada por abordagens puramente determinísticas.
  • A turbulência é altamente difusiva. O que significa que o fluido mistura-se mais rapidamente.
  • A turbulência ocorre em números de Reynolds elevados. De fato, a turbulência origina-se da desestabilização do escoamento laminar (que possui número Reynolds pequeno).
  • A turbulência é um fenômeno contínuo. Governado pelas equações da mecânica do fluidos.
  • A turbulência é rotacional e tridimensional. Minha característica predileta ! Em primeiro lugar não há turbulência bidimensional. As estruturas da turbulência são tridimensionais e possuem características rotacionais. Isso não significa que o escoamento médio tenha que ser tridimensional, nem mesmo que não exista justificativa razoável para modelar o escoamento bidimensional no lugar do tridimensional. Não confundir fenômeno com modelagem.
  • A turbulência é altamente dissipativa. Isso significa que o escoamento turbulento está sempre dissipando energia cinética. Para o escoamento turbulento ser mantido, é necessário que exista uma fonte contínua de energia sendo fornecida ao escoamento. Do contrário, o escoamento volta a ser laminar.
Na internet temos o material do Prof. Rosa da disciplina de "Modelagem de Escoamentos Turbulentos". Para aqueles que ainda não foram iniciados formalmente na problema, eu sugiro a leitura do item 1 (Fundamentos da turbulência nos fluidos, Aristeu da Silveira Neto, UFU) e 2 (Turbulência e seu desenvolvimento histórico, Átilia Silva Freire, COPPE) do material disponível em Apostilas e Mini Cursos. O primeiro item é uma introdução formal, muito mais e melhor detalhada que esse texto. O segundo item é uma introdução histórica. É o tipo de texto que devia ser um tópico do blog, mas dada a existência desse material eu prefiro sugeri-lo a escrever algo de qualidade inferior.

Para a descrição adequada do fenômeno é fundamental o uso da estatística. O Prof. Luca Moriconi (IF/UFRJ) leciona um excelente curso sobre "Teoria Estatística da Turbulência" cujo o material pode ser baixado livremente pela internet através de sua página pessoal. No momento que escrevo esse texto, o material pode ser obtido na página "Teaching" ou "Turbulence Course >> Programa". Também sugiro coletar o material que está em "Turbulence Course >> Arquivos". Atenção: Esse material não é para quem acabou de ouvir falar em turbulência !!! Para quem for arriscar, se achar que o material está escrito em Aramaico ou Russo, uma dica Butkov (Ah ! E o material está em português, eu juro !!!).

Por fim, dos livros que você pode pensar em adquirir eu sugiro o Turbulence in Fluids, M. Lesieur, 2008. E olha que bacana ... esse livro pode ser baixado gratuitamente através de convênio existente entre a UFRJ e a Springer (Editora do livro) (como esse convênio usa a CAPES, eu não sei se é estendido por poda rede universitária). Não sei se esse convênio é perpétuo ou se tem prazo para acabar, no momento, está funcionando. Caso não seja acessível da sua universidade, pode visitar uma biblioteca da UFRJ (a do centro de tecnologia tem ampla sala de computadores). Esse não é o único livro disponível nesses termos (embora também não sejam todos os livros do site, parece que no momento temos 2005-2008 ) ... da nossa área, para começar, eu sugiro olhar todos da série "Fluid Mechanics and Its Applications".

Na versão em inglês da wikipédia é possível ver algumas das figuras que ilustram o fenômeno da turbulência. Pretendo escrever um outro tópico com o título similar a "Introdução ao fenômeno da turbulência através de imagens" (está grande, não ? Mas essa é a idéia), mas ele somente deve ficar pronto em junho - é mais difícil do que parece achar imagens realmente didáticas sobre o assunto - até lá, existe uma grande quantidade de filmes no Youtube que pode saciar a curiosidade visual sobre o fenômeno. Particularmente, eu não gosto muito de ver vídeos, mas tenho que admitir que são bem ilustrativos. Se eu conseguir colocar a câmera de vídeo para funcionar (!) eu tenho uma idéia legal para filmar e mostrar aqui. Até que tudo isso esteja pronto, se te interessar, vejas os vídeos listados (a maioria tem uns 10 segundos de duração).

February 28, 2010

Gnuplot: Introdução básica

O Gnuplot é uma ferramenta multiplataforma para criar gráficos. Posso afirmar sem receios de que é uma ferramenta completa, embora, nem tudo seja simples de entender e/ou fazer.

A primeira grande dificuldade para quem usar essa ferramenta é que ela é um utilitário que não possui uma interface gráfica como os programas do gênero.

Confesso que a primeira vista é difícil para quem está acostumado com ferramentas gráficas pensar que usar essa ferramenta com certa fluência será algo fácil.

Esse texto tem como intenção mostrar como funciona o gnuplot. Não como uma forma introdutória genérica ou completa, apenas o que assumo ser o mais comum e necessário entre as publicações científicas.

Peço licença para os iniciados nesse programa para redigir o que considero ser uma forma diferente de abordar a introdução de como usar o gnuplot.

Nesse texto, vamos assumir a necessidade de criar um arquivo .plt. Esse arquivo, que vou chamar de figuras.plt, conterá todas instruções do gnuplot. Posteriormente, para construir os gráficos, nós digitaremos no terminal o comando: gnuplot figuras.plt

Dentro desse arquivo, tudo que começar com o caractere # representa comentário. Abaixo eu represento o conteúdo de um arquivo, comentando cada passo antes de escrever o comando.
# Gnuplot script file for plotting data
# resert: Limpa da memória do gnuplot toda a informação que
# esteja carregada.
reset
# As linhas abaixo definem as características padrões dos gráficos
# As informações mais importantes são:
# - o formato de saída do arquivo com o gráfico
# - o nome e tamanho padrão da fonte que será utilizada
# - se o gráfico será colorido (com a especificação "color") ou em
# preto-e-branco.
# A opção "enhanced" permite usar recursos muito úteis na hora de
# construir figuras.
# set terminal postscript eps enhanced color "Times-Roman" 18
set terminal postscript eps enhanced "Times-Roman" 22


# A opção abaixo define que a escala será especificada automaticamente.
set autoscale

# Define o tamanho da margem esquerda (lmargin) e inferior (bmargin).
# Isso é útil porque as vezes desejamos colocar informações nos eixos
# que não cabem no espaço padrão.
set lmargin 8
set bmargin 4


# Define o nome da figura resultante
set output "MinhaFigura.eps"
# Especifica a posição X,Y da legenda.
# X e Y são as coordenadas relativas aos valores dos eixos.
set key 13000,340
# Nome da legenda que aparece no eixo esquerdo
# O {/Italic F} diz que a variável F estará em itálico.
# A parte {/*1.5{conteúdo}} diz o conteúdo terá o tamanho do texto 1.5
# vezes maior que o tamanho padrão.
# O termo 1,0 introduz um o deslocamento de tantas unidades de tamanho
# padrão de fonte na direção X,Y. Aceita-se números fracionados.
set ylabel "{/*1.5{/Italic F}" 1,0
# Especifica a escala principal em Y.
set yrange [50:350]
# Define o tamanho da divisão principal do eixo Y
set ytics 50
# Define o número de intervalos das divisões secundárias em Y.
set mytics 5
# xlabel é o mesmo que ylabel, mas aplicando para o eixo X
# O termo Re_{D} coloca o "D" como subescrito de Re
set xlabel "{/*1.5{/Italic Re_{D}} }" 0,0
# O mesmo que yrange, mas para o eixo x
set xrange [9000:25000]
# O mesmo que ytics, mas para o eixo x
set xtics 5000
# O mesmo que mytics, mas para o eixo x
set mxtics 10
# Abaixo segue o comando que realmente plota os dados.
# O arquivo exemplo.dat consiste de dados colocados em colunas
# Nesse arquivo, são válidas as regras de comentários colocadas aqui.
# A "Curva 1" usa a coluna 1 ($1) para o eixo X e 2 ($2) para o eixo Y.
# Coloca o título "Curva 1"
# para não usar legenda, use "notitle" no lugar de "title"
# Usa apenas pontos (with points).
# Os pontos são do tipo 7 (pt 7)
# O tamanho é 1.5 vezes o tamanho padrão (ps 1.5)
# A "Curva 2" coloca pontos com margem de erro.
# A "Curva 1" usa a coluna 1, ($1) para o eixo X, coluna 4 ($4) para o eixo Y e
# a coluna 5 ($5) para ser o erro da variável em Y. Observe que estou ignorando a
# coluna 3.
# Define-se que é do tipo que têm erro em y usando o "yerrorbars"
# para erro em x, tem-se o "xerrorbars" e para ambos, "xyerrobars".
# O gráfico com barra de erros é como um gráfico de pontos, mas com as barras de
# erros. Assim, define-se o tipo do ponto (pt 4) o tipo da linha que compõem as
# barras (lt 2) e a largura dessas linhas (lw 3).
# Assim como o tamanho do ponto (ps 1.5)
# A "Curva 3" é um gráfico de linhas, usando a linha do tipo 1 (lt 1) e largura
# padrão (lw 1).
# Após o caracter \ não pode haver espaços.
plot "exemplo.dat" using ($1):($2) title "Curva 1" with points pt 7 ps 1.5, \
"exemplo.dat" using ($1):($4):($5) title "Curva 2" with yerrorbars pt 4 lt 2 lw 3 ps 1.5, \
"exemplo.dat" using ($1):($6):($7) title "Curva 3" with lines lt 1 lw 1
Várias informações expostas acima são desnecessárias para o bom funcionamento do gnuplot. Contudo, gosto de especificar bem o meu gráfico para evitar qualquer tipo de dúvida e principalmente para dominar apropriadamente os pontos e tipos de curvas que são usadas.

Para estudo, o arquivo exemplo.dat interessante pode ter o seguinte conteúdo:
#Lista de dados      
#Re_D F1 dF1 F2 dF2 F3 dF3
12000 127.1 1.1 146.2 42 150 37
17000 149.8 1.9 199.6 51 200 46
23000 245.1 0.5 256.2 62 235 55
Quando o gráfico é colorido, o tipo de linhas é definido pelas cores, quando não é colorido, as linhas ficam tracejadas, pontilhadas, etc.

É possível fazer muita coisa que eu não expliquei. Isso aqui é apenas o básico. E como tal, não aborda tudo que é necessário para fazer gráficos, mas é um começo.

Documentação adicional pode ser encontrada na documentação oficial e no que provavelmente é a melhor coleção de dicas sobre o gnuplot da internet, o "not so FAQ".

Você também pode baixar todos os arquivos pertinentes a esse texto (clique aqui).