September 20, 2012

Organizando a área de usuário do OpenFOAM


O diretório do usuário é aquele definido como (login do usuário)-(versão do OpenFOAM). Este diretório é bem importante mas, pelo que já conversei com outros usuários, muitas vezes não é utilizado ou é subutilizado pelos FOAMers, que deixam de lado algumas facilidades que o OpenFOAM oferece. Em todos os meus desenvolvimentos ou simulações, eu uso estritamente o diretório do usuário organizar todos os meus arquivos em uma única estrutura. Note que cada um pode organizar como achar melhor. O que eu vou colocar neste post é a minha ideia de organização dos arquivos e, sem dúvida, vocês podem comentar, discutir e discordar na área de comentários do Notas em CFD. Na verdade, será bom discutir isso pois novas ideias de organização sempre são úteis e produtivas. Mas chega de lero-lero e vamos ao que interessa!

No processo de instalação do OpenFOAM, uma das etapas é criar o diretório (login)-(versão), criar o diretório run e copiar o diretório de tutoriais do OpenFOAM para dentro deste último para testar se tudo está funcionando bem. Isso faz todo o sentido. Com este procedimento, você criou uma cópia dos tutoriais e manteve a versão intacta dentro da estrutura do OpenFOAM. Assim, se você estiver testando um tutorial, fizer alguma besteira e não souber mais como voltar ao estado original do caso, não tem problema pois você pode copiar os arquivos novamente. E isso é ótimo!

Pensando nisso, pode-se perceber que os arquivos originais de instalação do OpenFOAM devem sempre ser mantidos por segurança e garantia de funcionalidade do pacote CFD. Mas e se eu quiser desenvolver novas aplicações e funções, como solvers, bibliotecas, casos de simulação, etc? Não tem problema, mas recomendo que o faça na sua área de usuário e deixe a estrutura do OpenFOAM intacta. Ok, e como eu organizar os arquivos no diretório de usuário? Eu segui a mesma estrutura básica do OpenFOAM, como colocado na sequência.

(login)-(versão)
o   applications
§  bin
·      (versão do sistema)
§  solvers
§  utilities
§  test
o   lib
§  (versão do sistema)
o   src
o   run

O diretório applications contém todos os arquivos que são referentes aos códigos fonte do desenvolvimento de  novos solvers, utilitários ou testes iniciais de códigos ou mesmo aprendizado de coisas novas (ou antigas, mas que eu não sabia como funcionava :) ). Por fim, eu configuro para que todos os executáveis dos meus aplicativos sejam criados automaticamente no diretório bin/(versão do sistema) do usuário. Este último depende do sistema e características da compilação utilizada (linuxGccOpt, linux64GccDebug, etc) e deve ser criado automaticamente pelo OpenFOAM. Se você quiser mais detalhes sobre essa configuração, é só pedir nos comentários que eu escrevo um post sobre isso.

Sendo assim, o diretório src não contém nenhum código de aplicativos, mas de bibliotecas existentes do OpenFOAM que eu quero alterar ou criação de novas. Por exemplo, digamos que eu quero  modificar uma condição de contorno que já existe no OpenFOAM. Eu copio para este diretório apenas os arquivos do OpenFOAM necessários para a compilação e desenvolvimento da condição de contorno (contidos dentro de src/finiteVolume do OpenFOAM), sem alterar o código original e sua estrutura de diretórios. Nesta cópia, eu faço todo os desenvolvimento.

Como já desenvolvi ou testei bastante coisa no OpenFOAM, eu tenho uma estrutura do meu diretório src muito semelhante ao src do OpenFOAM. Note que, de modo semelhante aos aplicativos, eu configuro que todas as bibliotecas sejam construídas dentro de lib/(versão do sistema) no diretório do usuário.

O diretório run deve ser o mais comum a todos os usuários de OpenFOAM pois ele é criado seguindo os procedimentos de instalação do pacote CFD. E esse é o mais simples de explicar, pois é onde eu coloco todos os meus casos de simulação.

Como exemplo, segue uma figura com estrutura similar aos que eu uso no dia a dia. As marcações em verde são os principais diretórios e exemplos de solvers, bibliotecas, etc. A arquitetura da minha máquina atual é darwinIntel, 64 bits, compilado com otimização e precisão dupla.

Com essa configuração de pastas e arquivos, eu consigo realizar todo o meu desenvolvimento SEM ALTERAR a estrutura ou os arquivos originais do OpenFOAM. A vantagem disso é desenvolver os códigos sem inserir novos bugs ou erros no OpenFOAM em si. Isso pode ocorrer sem mesmo perceber... Quando eu comecei a usar o OpenFOAM, eu não tinha muito cuidado com isso e já "quebrei" a instalação algumas vezes sem saber. Acho que a principal mensagem deste post é: "organize-se logo no início para se acostumar a desenvolver seus códigos com segurança".

Espero que tenha ajudado! E você? Usa uma estrutura de arquivos similar? É diferente? Coloque seus comentários no blog!

Um abraço e até a próxima! 

3 comments:

  1. Eu tenho uma pergunta: se eu desenvolver uma nova biblioteca do "turbulenceModels", por exemplo, corrigindo os erros do modelo SST da versão 1.6-ext, quando eu for usar a biblioteca por algum solver do sistema (sem recompilá-lo), exemplo, simpleFoam, ele vai usar a versão do sistema ou ele vai privilegiar a versão do usuário ? Em outras palavras, em caso de bibliotecas de mesmo nome ele prefere a minha ou a do sistema ?

    Grato,

    ReplyDelete
  2. Mitre, ele vai usar o do sistema, ao menos que voce sobreescreva as libs do "turbulenceModels" (algo que nao e recomendavel). Se quiser usar a sua nova lib voce precisa recompilar, ou melhor linkar com o "applications" que ira utiliza-lo.

    P.S.: Voce precisa dizer isso no make file, caso contrario nao adianta recompilar.

    Abraco,

    ReplyDelete