January 21, 2009

CFD, Linux e vim

Quem usa amplamente o CFD, usa cluster. Quem quer grande eficiência no uso do cluster, usa GNU/Linux. E quem usa GNU/Linux, usa o vim.

A questão que fica é que nem sempre quem estuda/usa CFD conhece o suficiente do GNU/Linux para lidar corretamente com as ferramentas de terminal. Tudo bem, todo mundo tem sua curva de aprendizado, e é verdade que o terminal, mesmo não sendo complicado, não é o melhor lugar para começar a aprender.

E o problema fica por conta do fato de que clusters nem sempre possuem interface gráfica. Ou possuí interface gráfica, mas você sempre trabalha via ssh, o que nem sempre fornece uma velocidade de conexão agradável se você for abrir três/quatro programas gráficos para utilização remota junto com outros 20 usuários fazendo a mesma coisa. O outro problema é que na nossa área não são raros os usuários do windows que fazem o acesso a clusters com linux via terminal, o que raramente permite uma fácil conexão gráfica (eu realmente sugiro que instale uma distribuição linux para trabalhar com CFD). Por essas e outras não mencionadas, conhecer o terminal do GNU/Linux é fundamental para quem usa CFD.

Tenho certeza de que todos rapidamente aprenderam a listar os arquivos com o ls, a copiar arquivos com o cp, a mover arquivos com o mv, a mudar de diretório com o cd. Mas e editar um arquivo ? O que você faz ?

Existem três opções aqui. Copiar o arquivo para sua máquina de trabalho, modificar e voltar o arquivo para o lugar (isso nem sempre é possível, porque as vezes queremos editar o arquivo que controla a solução do seu problema que está atualmente rodando no cluster, qualquer erro aqui pode ser faltal). Utilizar um aplicativo gráfico remotamente para editar o arquivo (nem sempre é possível por motivos já mencionados) ou editar o arquivo com um editor de terminal (o que é sempre possível).

Ficaria impressionado se eu dissesse que os melhores editores de texto são os feitos para o terminal ? Pois é, parece contraditório, mas não é. Reza a lenda (bem próxima da verdade) que são os editores utilizados por 10 entre 10 dos maiores programadores do mundo. E entre eles temos o vim.

O vim é um dos mais poderosos editores de texto do mundo. Eu costumo dizer que é um sistema operacional disfarçado de editor de textos. Seus inúmeros recursos mal podem ser listados, de tão numerosos e valiosos que são. Devem ser experimentados, para perceber a mesma coisa que eu percebo quando preciso editar um texto e meu instinto abre o terminal para usar o vim, mas não abre o gedit. E ainda conta com inúmeros plugins fazem quase tudo que uma pessoa precisa para sobreviver diante de um computador.

Quer a melhor parte ? O Sergio Luiz Araújo Silva, o autor do VIVAOTUX, lançou um livro em português sobre o vim. Você pode ajudar a melhorar ele, enviando sugestões e correções, ou até, para o caso de quem já conhece bem o vim, enviando novas dicas. O livro é um projeto colaborativo. Também foi criado um grupo em torno do livro para unir quem deseja colaborar com o mesmo diretamente, você também pode ajudar divulgando o livro e o grupo.

De qualquer forma, eu considero um livro obrigatório para qualquer um que utiliza linux para resolver CFD, especialmente, para os usuários do OpenFOAM. E um livro muito importante para qualquer um que queira aprender um pouco mais sobre o GNU/Linux.

January 4, 2009

Ajustando a escala dos resultados

Há muitos "anos" atrás, eu escrevi sobre a apresentação dos resultados, como tornar os resultados algo claro ao ouvinte/leitor.

[update] Oopps!!! Havia um erro básico na ordem das figuras nessa pequena introdução. Corrigido! Grato [/update]

Uma das questões que surge é o ajuste de escala. Acompanha comigo. Você vai fazer um gráfico de velocidade. O gráfico vai de um valor negativo a um valor positivo. O que você deve evitar a todo custo, é uma escala dessa forma:Sabe o que há de errado com ela ? Simples. O zero não aparece na escala. Oras, há uma cor que começa em um valor negativo e termina em um valor positivo. Essa cor pode ser qualquer coisa. Pode ter apenas valores positivos ou apenas valores negativos (muito embora, nesse caso específico, exista ambos). O adequado é ajustar a escala de forma que fique claro ao ouvinte/leitor quais são os valores negativos e quais são os valores positivos. Como essa escala:
Ok. Nessa escala existe um "zero negativo". Isso é um erro de truncamento. Desconsidere. Na margem de erro que eu estou trabalhando, três casas decimais, isso é zero.

Agora, como fazer isso ? Tentativa e erro ? Bem, isso até é possível, mas pode dar muito trabalho se tiver que achar os números ótimos que representam sua escala totalmente na base da tentativa e erro.

Ante de tudo, note que existem dois tipos de escalas. As simétricas, que vão de "-x" a "x" e as não simétricas, que vão de "-x" a "y" onde x é diferente de y em módulo.

O primeiro tipo, que foi a que eu representei nas escalas acima, é fácil de acertar. Coloque a escala de -x a x literalmente, ou seja, force limites simétricos, e coloque um número ímpar de divisórias (ou seja, um número par de cores). Nesse caso, obrigatoriamente, metade as cores representam números negativos e a outra metade representa números positivos.

O outro tipo de escala é mais complexa de ser construída. Mas existe uma equação que rege as "leis de escala". A regra é a seguinte:
Nela você relaciona a razão entre o módulo de limite superior e o módulo do limite inferior da escala (lado esquerdo da equação) com o número total de divisórias (cores, N) e o número de cores que representam a escala negativa (p).

É óbvio que você tem que definir alguma coisa. Por exemplo, eu tenho hábito de definir o número de cores que representa o lado negativo, o número total de cores que representa a escala e um dos limites. E uso a relação dada acima para encontrar o outro limite. Aí você vai me perguntar: qual limite ?. A reposta não pode ser mais antipática. Não sei ! Observe que há uma variável que não é descrita pela matemática. A qualidade do gráfico. Você teve que chutar o valor do número total de cores (10 é um bom valor) e o número de cores que representa a face negativa da escala (que depende do problema). Agora você vai ter que chutar mais alguma coisa. O valor de um limite da escala... então, tudo isso ainda vai ter que satisfazer a qualidade visual do gráfico.

Observe as duas escalas construídas abaixo. As duas tiveram N = 10 e p = 2. Porém, a primeira eu acertei o valor de -0.12 (note em módulo é 0.12) para o limite inferior da escala e calculei o limite superior (que foi 0.48). Enquanto na segunda eu coloquei chutei o limite superior de 0.60 e calculei o limite inferior (que foi 0.15, como eu sei que esse é o módulo de um número negativo, eu acertei a escala para -0.15). As duas escalas são possuem limites inferiores muito próximos, então, se eu tivesse chutado o valor de -0.15 no primeiro gráfico, eu teria achado o valor de 0.60 e não o 0.48. Mas eu te afirmo, que para o problema trabalhado, a primeira escala é muito ruim e a segunda escala é muito boa.

Agora você tem todo o direito de perguntar: o que eu ganhei com isso ? Bom. Você deve acertar os valores da escala de tal forma que o zero esteja claro. Além disso, ela deve ter qualidade para reproduzir seu problema. Então, a pergunta que fica é a seguinte: você quer fazer tudo na mão ? Certamente é mais fácil acertar a escala de forma visual ficando claro quais são os valores aproximados que devem ser utilizados como limites e também o número de cores que escala negativa deve ter e depois utilizar uma equação matemática para definir com precisão quais são os valores adequados dos limites.

Minha opinião pessoal é de que podemos quase sempre manter o número de cores em 10. Assim, o número de cores negativas oscila entre 1 e 4 ou 6 e 9 (não pode ser 5, do contrário caímos na caso simétrico). Logo, o primeiro passo é definir qual das escalas possuí maior número de cores. Se for a escala negativa, ajuste o limite inferior da escala e calcule a o limite positivo considerando que a escala negativa tenha 8 divisões. Faça o ajuste fino depois desse primeiro cálculo. Se a maior escala for a positiva, ajuste o limite superior e calcule o limite inferior considerando que a escala negativa tenha 2 divisões. Faça um ajuste fino após esse primeiro cálculo. Essa regra pessoal tende a funcionar na maior parte dos problemas.