July 31, 2010

Usando pontos de monitoramento no OpenFOAM

O uso de pontos de monitoramento (PM) é extremamente útil em simulações CFD. Um ponto de monitoramento nada mais é do que um "ponto", com coordenadas (x,y,z), inserido pelo usuário em um local estratégico da geometria para fins de ter o valor de uma variável salva para cada passo de tempo. Em outras palavras, como em simulações CFD não é possível salvar a solução para cada célula da malha e para cada passo de tempo (haveria a necessidade de muito espaço em disco), o uso de pontos de monitoramento é uma opção para se ter o valor de alguma variável (salva em cada passo de tempo) em alguns locais estratégicos da geometria.

Vou descrever aqui como fazer isso no OpenFOAM. A versão de OpenFOAM que estou tomando como base é a OpenFOAM-1.5-dev. Acredito que  funcione da mesma maneira em outras versões, mas quero deixar claro que não testei.

Primeiramente vamos até o arquivo controlDict, localizado dentro do diretório system, pois vamos ter que acrescentar algumas linhas de informação no final desse arquivo. O que deverá ser acrescentado está a seguir:

// ****************************************************************************** //

functions
(

       // O nome que o usuário que dar ao ponto de monitoramento
   pontoMonit1  
   {

              // Especifica que a utilidade probes será a usada
      type probes; 

              // Essa biblioteca deve ser carregada 
      functionObjectLibs ("libsampling.so");  

              // Localizações dos pontos de monitoramento. Modificável em tempo de execução
      probeLocations
      (
         (1 0 0)      // coordenadas do primeiro ponto de monitoramento
         (1.5 0 0) // coordenadas do segundo ponto de monitoramento
      );

              // Campos (variáveis) que serão monitoradas. Modificável em tempo de execução
      fields
      (
         tau  // gera dados para o campo de tensão "tau" (do tipo symmTensorField)
         U        // gera dados para o campo velocidade "U" (do tipo vectorField
         p        //   gera dados para o campo  de pressão "p" (do tipo scalarField
         ?        // .... outro campo desejado
      );
   }
);

// ****************************************************************************** //

Feito isso, logo que começamos a simulação, um diretório com o nome dado ao ponto de monitoramento (no caso acima pontoMonit1)  é criado dentro do diretório do caso. Dentro deste diretório tem um novo diretório que especifica o tempo inicial daquele ponto de monitoramento, se for começado no tempo 0 (zero), então este diretório terá o nome "0".  Dentro deste último diretório (Ufahh!)  estarão os arquivos contendo os dados dos pontos de monitoramento. O funcionamento dos arquivos é o seguinte: cada novo campo tem seu próprio arquivo com seu nome e os diversos pontos de monitoramento ficam dentro de um mesmo arquivo. 

Os arquivos gerados estão no padrão OpenFOAM de representação tensorial, veja o exemplo ilustrativo abaixo para o caso do vetor velocidade:

# Tempo      ponto de monit. 1           ponto de monit. 2
1.19998e-05 (1.44637e-05 -1.50596e-11 0) (1.44637e-05 -1.91593e-11 0)
2.63988e-05 (3.17809e-05 -1.25082e-11 0) (3.17809e-05 -1.14036e-12 0)
4.36766e-05 (5.2514e-05 9.46453e-12 0) (5.2514e-05 5.30116e-12 0)

Estes dados não estão prontos para o uso direto em softwares como xmgrace ou gnuplot. Para facilitar o tratamento desses dados um shell script foi criado (o Mitre começou  e eu incrementei mais algumas coisas posteriormente).  Este scrip opera sobre os arquivos de probe do OpenFOAM para que seja possível o uso desses dados em editores de gráficos. Além de gerar os arquivos de dados para programas de geração de gráficos, o script permite também, se o usuário pedir,  a criação automática de gráficos usando o xmgrace (estando o software corretamente instalado em sua máquina).  O shell script está disponível para download no link abaixo:

foamProbe

O uso do script segue a notação:

$foamProbe {diretório dos PM} {número de PM} {nome do campo} {opcional: 0 - abre no xmgrace, 1 - salva em arquivo eps}

Note que este arquivo deve ter propriedades de executável e caso voce não coloque ele em um diretório visível ao seu sistema, como o diretorio "bin", por exemplo, você poderá ter que usar: $./foamProbe

Para o caso mostrado aqui tem-se (estando dentro do diretório do caso):

  1. Para criar arquivos para 2 pontos de monitoramento para o campo U: 
    $foamProbe pontoMonit1/0/ 2 U
  2. ou para abrir no  xmgrace:
    $foamProbe pontoMonit1/0/ 2 U 0 
  3. ou para criar automaticamente .eps: 
    $foamProbe pontoMonit1/0/ 2 U 1 

Com isso o diretório probeU será criado dentro de pontoMonit1/0/ contendo os arquivos de dados prontos para serem usados com os programas gráficos preferidos.

Bem, espero que, este post + o script, ajude aos usuários do OpenFOAM na hora de fazerem o pós-processamento.

7 comments:

  1. Muito bom!! Sempre bom saber mais sobre o OpenFOAM! Sempre acompanho as atualizações do blog no meu leitor de feed (Google Reader). Agora, como sugestão, bem que o blog poderia possuir uma ferramenta como o Google Friend Connect.

    ReplyDelete
  2. Olá Roberto,

    Agradeço por acompanhar o blog do notas em cfd e quanto ao Google Friend Connect é uma idéia a se pensar.

    Jovani

    ReplyDelete
  3. Olá Jovani,

    Primeiro de tudo queria dar meus parabéns pelo excelente trabalho que você está fazendo com o OF!

    Tenho um problema, off-topic deste post, mas que arrisco lançar ainda assim: estou procurando um seu artigo ("Viscoelastic flow simulation: development of a methodology of analysis using the software OF and differential constitutive equations") mas não encontrei ainda; mais, não tenho assinatura do jornal onde, pelos vistos, tb já saiu.

    Pedido: pode me enviar pf esse artigo?

    Estou particularmente interessado ou no viscoelasticInterFoam ou em reproduzir algo semelhante...

    Grato pela atenção!

    Nelson

    ReplyDelete
  4. Olá Nelson,

    Primeiramente obrigado.

    O artigo que você mencionou foi apresentado no congresso PSE e por ser um trabalho de congresso não tem muita informação, não sei se ele te seria muito útil sabendo que recentemente saiu um artigo que tem resultados tanto do viscoelasticFluidFoam como do viscoelasticInterFoam, e que é o que você está interessado pelo que pude entender.

    Mas de qualquer forma ele está neste link:
    http://www.sciencedirect.com/science/article/B8G5G-4XCHJF2-5J/2/6f01f8d41f23e4490174749c69ade273


    Do viscoelasticInterFoam tem um artigo que foi apresentado no Escape20:

    http://www.sciencedirect.com/science/article/B8G5G-505XT0T-9/2/b1c4060452bdbd3382ca8189dde0d11f

    caso não consiga no link acima pega ele aqui:

    http://www.aidic.it/escape20/webpapers/87Favero.pdf

    E o que mais te interessa acredito eu:

    http://www.sciencedirect.com/science/article/B6TFT-50JHBWH-1/2/f3e11754e852b77e2bea8a846727e553

    Já em se tratando do viscoelasticFluidFoam na minha dissertação de mestrado é onde você encontrará algo mais detalhado.

    Bom, qualquer coisa entre novamente em contato.

    Jovani

    ReplyDelete
  5. Muito obrigado Jovani, pela gentileza da resposta.

    De fato, tenho acesso ao último trabalho que você refere!

    Paz,

    Nelson

    ReplyDelete
  6. Nao sabia que era tao facil inserir pontos de monitoramento, obrigado pela dica!
    A primeira vez que testei o codigo obtive o seguinte erro:
    keyword outputControl is undefined in dictionary "::pontoMonit1"
    Mas buscando pelos foruns consegui resolver adicionando o seguinte ao codigo:
    outputControl outputTime;
    outputInterval 1;

    Fica ai a dica se alguem estiver com o mesmo erro.
    (Minha versao é 1.7.x)

    Abraços e continue o otimo trabalho!

    ReplyDelete
  7. Guilherme,
    Valeu pela dica. Realmente não testei isso na versão 1.6 e 1.7 e como você percebeu tem alguma diferença entre versões. Pela lógica:

    outputControl outputTime;
    outputInterval 1;

    são parâmetros que dão uma maior flexibilidade ao usuário na hora da gravação de dados.
    Muito bom e valeu pela dica que sem dúvidas vai ajudar os usuários destas versões.

    Jovani

    ReplyDelete