January 23, 2012

Pyfoam: uma ferramenta de manipulação de casos

Caros Leitores,

Se desejam automatizar e/ou realizar analises sofisticadas no openFOAM, o "aplicativo" denominado PyFoam pode ser uma ferramenta interessante. Pyfoam nada mais é que uma biblioteca de manipulação de arquivos desenvolvida em Python (linguagem interpretada de alto nível orientada a objeto). Entre as principais funcionalidades desta biblioteca estão: a compactação de dados de saída e avaliação de output na forma gráfica durante a evolução da simulação (bem semelhante aos softwares comercias), a manipulação dos arquivo texto de dicionário de forma durante o processo iterativo.

Como instalar esse "aplicativo"? Primeiro passo, em algumas distribuições alguns pacotes devem ser instalados, no caso do ubuntu basta instalar:

instalar os requisitos python-dev e python-numpy

baixar a versão mais recente do pyfoam no link abaixo:

http://openfoamwiki.net/index.php/Contrib_PyFoam#Downloads

descompactar o arquivo com o comando no terminal

tar -xvf PyFoam-0.5.6.tar

dentro da pasta PyFoam-0.5.6 descompactada abrir terminal executar o seguinte comando:

python setup.py install

Pronto o Pyfoam está instalado no sistema.

Para instalar em um local especificado basta executar o comando

python setup.py install --prefix=/home/nomeusuario/pastadeinstalacao

e incluir as seguintes variáveis de ambiente:

export PYTHONPATH=/home/nomeusuario/pastadeinstalacao/lib/python-2.3/site-packages:$PYTHONPATH

e

export PATH=/home/nomeusuario/pastadeinstalacao/bin:$PATH

Se o seu sistema for UBUNTU, basta instalar via terminal com o seguinte comando: sudo apt-get install pyfoam

Bem, uma vez instalado existem várias funcionalidades simples, porém interessantes. Podemos começar com a funcionalidade de verificação de caso, vá até a pasta "tut", entre em algum exemplo do tutorial execute o comando "pyFoamCaseReport.py --full-report .", deve aparecer toda a informação do caso setado, bem interessante quando não se conhece o caso. Cabe destacar que essa ferramenta não funciona para alguns solver mais recentes e complexos.

Outra funcionalidade interessante é o pyFoamPlotRunner.py. No caso no icoFoam, para ativar essa funcionalidade rode o icoFoam com o comando: pyFoamPlotRunner.py icoFoam. Assim, os gráficos de resíduo serão plotados no durante o processo iterativo. Infelizmente, essa funcionalidade aumenta o tempo de computação uma vez que consome recursos computacionais escrevendo os plots.

Se você já programa em python uma forma interessante é criar suas próprias forma de automatização utilizando as funções predefinidas na biblioteca pyfoam. No exemplo abaixo, o programa modifica a velocidade de uma condição de contorno especifica a partir do seu nome. Crie o arquivo texto com os seguintes comando:

#prototipo da chamada da função ParsedParameterFile da biblioteca pyfoam
from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
# Arquivo que eu quero modificar
f=ParsedParameterFile("pitzDaily/0/U")
# percorrer todos os bondaryFields e modificar o campo com nome upper
for b in f["boundaryField"]:
if "upper" in b:
f["boundaryField"][b]["value"]="uniform (10 0 0)"
f["boundaryField"][b]["type"]="fixedValue"
#Escrever no arquivo U
f.writeFile()

Salvar o arquivo com o nome tes.py na pasta /incompressible/simpleFoam (pasta do tutorial que vou testar o programa python). Em seguida, executar o script com o comando "python tes.py" na pasta /incompressible/simpleFoam.

Bem, espero que este post seja útil de alguma forma.