January 10, 2008

Instalação do OpenFOAM para quem descobriu o Linux ontem à noite

O OpenFOAM funciona muito bem no Linux e pode ser compilado para ser usado em outros sistemas operacionais. Contudo existe uma certa dificuldade na compilação do OpenFOAM para Windows pois este último não é case-sensitive. E, acreditem, uma das dificuldades é descompactar o código fonte do OpenFOAM sem estragar sua estrutura de diretórios e arquivos. Já existe uma versão Windows do OpenFOAM rodando em Cygwin, mas não é tão boa (além de ainda estar com os recursos incompletos) como o original em Linux. Mas não é sobre isso que eu gostaria de falar.

O uso do OpenFOAM como ferramenta sofre com a falta de conhecimento ou mesmo preconceito dos usuários em usar o Linux como sistema operacional. Eu mesmo já passei por isso em 2000. Naquela época era necessário reconfigurar o sistema para apenas trocar de monitor! Fiquei 4 anos sem querer olhar para um computador em que o dito estivesse instalado. Mas posso dizer também que nesses 8 anos, o Linux evoluiu muito (mas muito mesmo!) em termos de amadurecimento, usabilidade e disponibilidade de programas (inclusive de engenharia!).

Por isso, este post é para aqueles que gostariam de usar o OpenFOAM, mas não tem familiaridade com o Linux. Todo o tutorial de instalação descrito aqui será realizado por linha de comando, digitados em uma tela de terminal - a famosa "tela preta". Os usuários de KDE normalmente usam o konsole e os de GNOME usam o gnome-terminal como programa de terminal. Fica à sua escolha. Quando o terminal é aberto, o diretório padrão é HOME do usuário. Isso quer dizer que se o nome do usuário é mariazinha, você estará no diretório /home/mariazinha ao abrir o terminal. E é a partir daí que começamos a instalar o OpenFOAM. Bem, vamos lá!


A primeira coisa a fazer é criar os diretórios onde você deve baixar os arquivos do site do OpenFOAM (http://www.opencfd.co.uk/openfoam/linux.html). O site que eu coloquei aí é para baixar o OpenFOAM-versao (versão que vc quer instalar - recomendado que seja a última!). A versao dos programas abaixo vai depender daquela que você baixar do site.

Vamos criar os diretórios com o comando mkdir. Mas antes, um detalhe que é vital na instalação. O Linux diferencia as letras maísculas das minúsculas e a instalação deve ser feita no diretório OpenFOAM (conservando as diferenças entre maísculas e minúsculas - case sensitive)!! Preste atenção a isso! Digite o comando abaixo (o sinal % significa apenas que você deve digitar o comando no terminal, ok?):


Código:
% mkdir OpenFOAM

Pronto, criamos o diretório chamado OpenFOAM. Vamos conferir? Digite ls no terminal... O diretório OpenFOAM vai aparecer. Se você criou o diretório Openfoam, ihhh... pode parar por aí e começar tudo de novo.... Beleza, então criamos o diretório OpenFOAM. Vamos agora entrar dentro desse diretório e criar mais outro nele. Digite no terminal:

Código:
% cd OpenFOAM
% mkdir linux

Pronto, criamos o diretório linux dentro do OpenFOAM. Ok, agora você pode baixar os arquivos no site. Faça o download dos arquivos da seguinte forma:
  • Arquivo OpenFOAM-versao.General.gtgz --> dentro do diretório OpenFOAM
  • Arquivo OpenFOAM-versao.linuxGcc4Opt.gtgz --> dentro do diretório OpenFOAM
  • Arquivo gcc-versao.linux.tgz --> dentro do diretório OpenFOAM/linux
  • Arquivo paraview-versao.linux.tgz --> dentro do diretório OpenFOAM/linux
  • Arquivo j2sdkversao.linux.tgz --> dentro do diretório OpenFOAM/linux
Legal, tendo terminado o download e colocado cada arquivo no local correto, podemos passar para a próxima etapa. Estes arquivos contém todos os arquivos fontes, binários, exemplos, etc. compactados do OpenFOAM e dos programas que ele usa (gcc, paraview e java). Vamos então descompactar os arquivos. No diretório OpenFOAM, digite:

Código:
% tar xzvf OpenFOAM-versao.General.gtgz (e veja a descompactação na tela)
% tar xzvf OpenFOAM-versao.linuxGcc4Opt.gtgz (e veja a descompactação na tela)

Acabamos de descompactar o corpo do OpenFOAM. Vamos descompactar agora os aplicativos. Digite:

Código:
% cd linux
% tar xzvf gcc-versao.linux.tgz (e veja a descompactação na tela)
% tar xzvf paraview-versao.linux.tgz (e veja a descompactação na tela)
% tar xzvf j2sdkversao.linux.tgz (e veja a descompactação na tela)


Pronto, acabamos de instalar o OpenFOAM no computador!! O único problema, é que o Linux ainda não sabe disso!! E a gente tem que informar ao sistema operacional aonde o OpenFOAM está instalado. Para isso vamos editar o arquivo .bashrc (isso mesmo, tem um ponto na frente do arquivo - significa que ele é oculto) que se encontra no diretório raiz do usuário (/home/mariazinha, por exemplo). Vamos pra esse diretório digitando:

Código:
% cd ~

Agora vamos editar o arquivo .bashrc usando o editor de texto kedit (poderia ser outro como gedit, kate, kwrite, vim), com o comando:

Código:
% kedit .bashrc

A tela do editor de textos vai aparecer. Coloque no final do arquivo as duas linhas seguintes

# Configuração do OpenFOAM
. $HOME/OpenFOAM/OpenFOAM-versao/.OpenFOAM-versao/bashrc
e salve o arquivo. Pronto, digite o seguinte comando:

Código:
% . $HOME/.bashrc

Vão aparecer três linhas referentes ao reconhecimento do OpenFOAM pelo sistema. Pronto, toda vez que você abrir o terminal, essas linhas vão aparecer e os comandos do OpenFOAM vão estar disponíveis.

Para finalizar com chave de ouro, vamos testar um caso de simulação. Copie os casos exemplo (tutoriais) do OpenFOAM para um outro diretório. É bom fazer isso, pois assim podemos alterar os parâmetros da simulação à vontade, sabendo que o original está em outro diretório. Então crie o diretório com o seguinte comando:

Código:
% mkdir -p $HOME/OpenFOAM/${LOGNAME}-versao/run

Agora vamos copiar os tutoriais da distribuição do OpenFOAM para o diretório run, criado com o comando acima. Digite:

Código:
% cp -r $WM_PROJECT_DIR/tutorials $HOME/OpenFOAM/${LOGNAME}-versao/run

Pronto, vamos testar o caso 2D do escoamento laminar em uma cavidade com parede deslizante. Vamos para o diretório:


Código:

% cd $HOME/OpenFOAM/${LOGNAME}-versao/run/tutorials/icoFoam

Crie a malha:

Código:
% blockMesh . cavity

Rode a simulação:

Código:
% icoFoam . cavity

E vamos ver os resultados:

Código:
% paraFoam . cavity

Todos os detalhes de como usar o OpenFOAM (criar malha, rodar a simulação e visualizar os resultados) podem ser encontrados no Guia de Usuário (OpenFOAM/OpenFOAM-versao/doc).

Não posso deixar de mencionar a importância do aprendizado do sistema operacional Linux nesse meio tempo, né? Sem saber o sistema, o uso do OpenFOAM também pode ficar limitado e muitos dos recursos que ele oferece podem ser sub-utilizados. Existe muito material na internet sobre o mundo do pinguim. Dê uma procurada por aí....

Espero ter ajudado ao pessoal que ainda não conhece o Linux (mas, tendo uma ferramenta CFD gratuita e com código aberto, você não vai fazer uma força pra aprender??).

Obs.: Este post foi adaptado de uma mensagem minha postada no fórum do CFD-Brasil.

3 comments:

  1. Os procedimentos de instalação descritos são os melhores que já encontrei até agora em todos os fóruns. No sistema de 32bits a instalação foi perfeita. Consegui rodar sem qualquer erro o caso mostrado.
    Eu tenho um sistema de 64bits (Ubuntu 7.1) rodando em um processador AMD Turion X2 64 com 1GB de RAN, segui todos os passos descritos para o sistema de 32 bits, porém, baixando os arquivos para a plataforma 64bits. Na fase de descompactação dos arquivos usando o comando de descompactação (tar xzvf nome do arquivo) não encontro qualquer tipo de problema, assim também como na fase de atualização do ambiente das variáveis, que é pela digitação de . $HOME/.bashrc no terminal. Ao reiniciar o terminal, me aparecem as três linhas de configuração tal como mencionado, todavia quando executo o teste de instalação a partir de $ cd /OpenFOAM/OpenFOAM-1.4.1/bin$ ./foamInstallationTest (executado pelo terminal) o relatório me mostra três erros sendo 2 críticos e 1 fatal. Nos dois erros críticos há um erro de comunicação tanto com o rsh como com o ssh. No erro fatal o relatório final me acusa um conflito de instalações informando-me que icoFoam não está instalado.
    Fiz exaustivas pesquisas em vários fóruns e muitas delas me levaram à configuração do arquivo .bashrc com a adição da linha $WM_64=on. Há, contudo dois problemas nisso: eu sou usuário novo no Linux , ou seja, não sei como fazer a configuração correta e por último vejo que existem dois arquivos .bashrc, sendo que um deles está localizado na pasta home/delio/.bashrc e outro na pasta de instalação do OpenFOAM e não sei em qual fazer essa alteração.
    As perguntas então são:
    Em qual dos dois arquivos faço tais alterações? Se num ou noutro e se tanto faz. Tipo o que eu fizer com um se reflete no outro.
    Como faço essas alterações?
    Antes de fazê-las preciso repetir todo o processo de instalação?
    Gostaria que qualquer ajuda que me puder ser dada fosse postada no seguinte e-mail: deliobs@isbt.com.br

    ReplyDelete
  2. A descrição dos procedimentos foi realmente muito boa. Também me ajudou bastante. Entretanto ainda tenho alguns problemas e penso que talvez algum de vcs possa me ajudar. Tenho usado o suse 11.0. Segui todos os procedimentos e na tentativa de testar o caso 2D de escoamento laminar, Cavity me apareceu o seguinte erro:
    - Digitando no terminal blockMesh . cavity aparece: Wrong number of arguments, expected 0 found 2.
    - Digitando apenas blockMesh aparece:
    cannot open file file: /home/OpenFOAM/project-1.5/run/system/controlDict at line 0. From function regIOobject::readStream(const word&)
    in file db/regIOobject/regIOobjectRead.C at line 66.
    FOAM exiting
    O foamInstallationTest diz que está tudo Ok!
    Ficaria muito grata se alguem puder me auxiliar. Não sei mais o que fazer.
    Obrigada,
    Raquel

    ReplyDelete
  3. Oi Raquel,

    O erro que aparece no seu caso está relacionado a versão do OpenFOAM que vc usa (a 1.5). Na época que eu escrevi este post, era assim que os comandos eram usados. Mas o formato mudou depois da versão 1.5.

    Tente assim:

    blockMesh -case cavity

    icoFoam -case cavity

    Veja se funciona agora.

    Um abraço!

    ReplyDelete