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?


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.