• Nenhum resultado encontrado

As simulações no OpenFOAM são realizadas por arquivos executáveis chamados

solvers, que lêem as informações referentes ao caso (malha e condições de simulação) e

resolvem problemas específicos da mecânica do contínuo. Os solvers são resultado da compilação dos arquivos fonte, e a solução numérica depende de como as bibliotecas do OpenFOAM são usadas para montar o algoritmo de solução. Na essência, os solvers leem as informações da simulação (fornecidas nas etapas descritas anteriormente), resolvem as equações através de metodologias de solução específicas para cada caso, e geram arquivos de resultados para pós-processamento (SILVA, 2007).

A Tabela 4 mostra alguns dos solvers fornecidos com o OpenFOAM, que abrangem áreas como escoamento compressível e incompressível, escoamento multifásico, combustão, transferência de calor, escoamento com trajetória de partículas, eletromagnetismo, análise de tensão em sólidos, entre outros. Uma lista completa dos solvers pode ser encontrada no capítulo 3.5 do OpenFOAM User Guide (2012).

Para realizar a simulação deve-se executar o solver em um terminal no diretório raiz do caso. Por exemplo, para uma simulação de combustão em fase gasosa, que utilize o

solver reactingFoam, basta digitar seu nome no terminal:

reactingFoam

Na tela do terminal irão aparecer informações sobre a evolução da simulação, como os resíduos das equações, número de Courant, e tempo computacional.

Qualquer aplicativo pode ser executado como um processo em background, ou seja, que não necessita de estar completo para que o usuário possa executar outros comandos no terminal. Se o usuário quiser executar o solver reactingFoam em background e escrever o progresso da simulação que estaria na tela do terminal em um arquivo chamado log, deve executar o comando:

reactingFoam > log &

Com a simulação rodando em um processo em background nada será escrito na tela do terminal. Se o usuário quiser acompanhar também o progresso da simulação no terminal pode executar o seguinte comando:

Tabela 4 – Alguns solvers fornecidos com o OpenFOAM

Solver Descrição

laplacianFoam soluciona uma equação de Laplace simples, por exemplo, para a difusão térmica em sólidos

potencialFoam escoamento potencial que pode ser usado para gerar campos iniciais para códigos que usam Navier-Stokes icoFoam escoamento transiente e laminar de fluidos Newtonianos

incompressíveis

simpleFoam escoamento permante, laminar ou turbulento, para fluidos Newtonianos incompressíveis

pisoFoam escoamento transiente de fluidos incompressíveis

sonicFoam solver transiente para escoamento supersônico, laminar ou turbulento, de um gás compressível

cavitatingFoam solver para cavitação transiente

engineFoam solver para motores de combustão interna reactingFoam solver para combustão com reações químicas

magneticFoam solver para o campo magnético gerado por magnetos permanentes

solidDisplacementFoam solver transiente para deformação linear-elástica de um corpo sólido

tail -f log

Isso fará com que seja escrito no terminal o final do arquivo log, sendo constantemente atualizado, como se fose um processo executado normalmente. A vantagem em se fazer isso é ter esse progresso escrito em arquivo de texto, no caso de uma posterior avaliação ser necessária. Um cuidado deve ser tomado para simulações longas, onde esse arquivo log pode se tornar muito grande, e abri-lo para uma simples visualização pode se mostrar extremamente custoso.

Uma dica que se mostrou muito útil para lidar mais facilmente com o terminal para a execução dos aplicativos (solvers e utilitários) do OpenFOAM é a instalação do pacote

Nautilus Open Terminal. Ele permite abrir o terminal diretamente a partir de uma pasta

qualquer, clicando com o botão direito e em seguida clicando em “Abrir em um terminal”. Com isso, o usuário pode navegar pelos seus casos, configurar seus arquivos e em seguida vai no diretório raiz do caso, clica com o botão direito e abre o terminal, que já virá naquele diretório. Isso evita que o usuário abra o terminal sempre no diretório raiz do computador e tenha que ir navegando pelas pastas até o diretório do caso estudado, o que se mostra

um processo maçante. No Ubuntu, esse pacote pode ser instalado com o comando: sudo apt-get install nautilus-open-terminal

3.4.1

Paralelização

Um fator de grande importância no OpenFOAM é a sua enorme capacidade para simulações em paralelo. Devido ao fato dele ser um software gratuito, não há limitações quanto ao número de licenças para serem distribuídas entre os processadores ou núcleos. O método de processamento em paralelo utilizado pelo OpenFOAM é conhecido como decomposição do domínio, em que a malha e os campos associados são divididos em subdomínios e atribuídos aos diferentes processadores para solução. A comunicação entre os processadores é feita utilizando-se o protocolo de comunicação MPI (Message Passing

Interface), sendo que, por padrão, o OpenFOAM é fornecido com a biblioteca de domínio

público openMPI, mas qualquer outra pode ser utilizada.

A malha e os campos são decompostos usando-se o utilitário decomposePar. Eles são divididos de acordo com um conjunto de parâmetros, entre eles o número de processadores e o método de decomposição, definidos em um dicionário chamado decomposeParDict, que deve estar localizado no diretório system do caso de interesse.

O OpenFOAM fornece quatro métodos para a decomposição do domínio: simple,

hierarchical, scotch e manual. Informações detalhadas sobre esses métodos podem ser

encontradas no capítulo 3.4 doOpenFOAM User Guide(2012). Um exemplo de um arquivo

decomposeParDict para o caso tutorial damBreak é mostrado na Figura 26. Os métodos

simple, hierarchical e manual requerem a entrada de coeficientes para a sua utilização.

O método scotch não requer nenhuma entrada adicional, e é um método automático de decomposição, apresentando uma maior simplicidade para utilização.

O primeiro passo é decompor o caso estudado executando o utilitário decomposePar em seu diretório raiz. Isso fará com que um conjunto de subdiretórios seja criado, sendo um para cada processador. Os diretórios são nomeados processorN, onde N=0,1,2... representa o número de um processador. Neles estarão contidos os diretórios de tempo que contêm as descrições dos campos decompostos, e um diretório constant/polyMesh contendo a descrição da malha decomposta.

Em seguida, para rodar um caso em paralelo utiliza-se um comando com a seguinte sintaxe:

mpirun –hostfile <machines> -np <nProcs> <foamExec> <otherArgs> -parallel > log &

Onde <nProcs> é o número de processadores, <foamExec> é o executável como, por exemplo, um solver, e <machines> é um arquivo que contém o nome das máquinas

Figura 26 – Exemplo de um arquivo decomposeParDict Fonte: Tutorial damBreak do OpenFOAM

utilizadas caso o problema esteja sendo rodado em múltiplas máquinas em uma rede. Para um computador com um processador de 8 núcleos, onde se queira utilizar o

solver simpleFoam por exemplo, o comando será:

mpirun –np 8 simpleFoam –parallel > log &

Por fim, depois de um caso ter sido executado em paralelo, ele pode ser reconstruído para pós-processamento. O caso é reconstruído por meio da fusão dos conjuntos de diretórios de tempo de cada processorN em um único conjunto de diretórios de tempo. O utilitário reconstructPar executa tal reconstrução a partir do comando: