Cavidade Quadrada

Introdução

Esse tutorial irá descrever como pre-processar, executar e pós-processar um exemplo (caso) do escoamento isotérmico, incompressível em um domínio bidimensional quadrado. A geometria é mostrada na figura 1, em que todas as fronteiras são paredes quadradas. A parede superior move-se na direção- \(x\) à velocidade de 1 m/s, enquanto as outras três são estacionárias. Inicialmente, o escoamento laminar é assumido e será resolvido em uma malha uniforme usando o solver icoFoam para escoamento laminar, isotérmico, incompressível. Ao longo do tutorial, o efeito do aumento da resolução de malha e o refino de malha próximo à parede será investigado. Finalmente, o número de Reynolds será aumentado e o solver pisoFoam é empregado para escoamento turbulento, isotérmico e incompressível.

Figura 1 – Geometria da cavidade quadrada

Pré-Processamento

Casos são configurados no OpenFOAM através da edição de arquivos de configuração. Para isso, é recomendável escolher um editor de texto como emacs, vi, gedit, nedit, etc. A edição é possível porque o I/O do OpenFOAM usa um formato de dicionário com palavras-chave que transmitem significado suficiente para serem entendidos pelos usuários.

O caso simulado compreende dados para a malha, campos, propriedades, parâmetros de controle, etc. Esses dados são armazenados em um conjunto de arquivos dentro do diretório do caso ao invés de estar dentro de um único arquivo, como acontece em outros pacotes de CFD. A esse diretório do caso é atribuído um nome suficientemente descritivo. Esse tutorial consiste de um conjunto de casos localizados no diretório $FOAM_TUTORIALS/incompressible/icoFoam/cavity, o primeiro sendo denominado apenas de cavity. No primeiro passo, o usuário deve copiar o diretório do caso cavity para seu diretório de execução.

cd $FOAM_RUN 
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .  
cd cavity

Geração de malha

OpenFOAM sempre opera em um sistema de coordenadas tridimensional cartesiano e todas as geometrias são geradas em três dimensões. OpenFOAM soluciona o caso em três dimensões na sua configuração padrão, no entanto pode ser configurado para solucionar em duas dimensões ao especificar uma condição de contorno especial empty nas fronteiras normais à terceira dimensão, para a qual nenhuma solução é necessária.

O domínio cavity consiste de um quadrado de lado \(d\) no plano \(x-y\). Uma malha uniforme de 20 x 20 volumes é inicialmente usada. A estrutura de bloco é mostrada na figura 2.

Figura 2 – Estrutura de bloco para a cavidade quadrada

O gerador de malhas fornecido com OpenFOAM, blockMesh, gera malhas a partir da descrição especificada em um dicionário de entrada, blockMeshDict, localizado no diretório system (ou constant/polyMesh) para um dado caso. A entrada do blockMeshDict para esse caso é fornecido abaixo.

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  5                                     |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 0.1;

vertices
(
    (0 0 0)
    (1 0 0)
    (1 1 0)
    (0 1 0)
    (0 0 0.1)
    (1 0 0.1)
    (1 1 0.1)
    (0 1 0.1)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    movingWall
    {
        type wall;
        faces
        (
            (3 7 6 2)
        );
    }
    fixedWalls
    {
        type wall;
        faces
        (
            (0 4 7 3)
            (2 6 5 1)
            (1 5 4 0)
        );
    }
    frontAndBack
    {
        type empty;
        faces
        (
            (0 3 2 1)
            (4 5 6 7)
        );
    }
);

mergePatchPairs
(
);

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

O arquivo contém alguma informação no cabeçalho (linhas 1 a 7), seguido de informação contida no subdiretório FoamFile, delimitado por chaves ({…}). No restante desse tutorial os cabeçalhos dos arquivos de entrada serão omitidos para fins de clareza.

Primeiro o arquivo especifica as coordenadas dos vértices do bloco; então ele define os blocos (aqui no caso apenas um) a partir do número dos vértices e de células dentro do bloco; e finalmente o arquivo define a posição das fronteiras.

A malha é gerada ao executar o commando blockMesh no arquivo blockMeshDict. Do diretório do caso, isso é feito ao digitar no terminal:

blockMesh

O status de execução do blockMesh é exibido na janela do terminal. Qualquer erro no arquivo blockMeshDict é identificado e a respectiva mensagem de erro direciona o usuário à linha do arquivo onde o problema foi detectado. Para prosseguir, não deve haver nenhuma mensagem de erro após a execução do comando.