Tutorial de geração de malha em um perfil NACA0012 – bidimensional
Tutorial de geração de malha em um perfil NACA0012 – bidimensional
Observações:
- Este tutorial tem função meramente didática, visando auxiliar usuários iniciantes, e não representa garantias de qualidade de resultados da simulação. A verificação e validação dos resultados, assim como estudos de refino de malha e demais análises, são de responsabilidade do usuário final.
- This offering is not approved or endorsed by OpenCFD Limited, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM® and OpenCFD® trade marks.
- Este tutorial foi criado dentro do contexto de um projeto de extensão da UFSC e não é homologado pelos desenvolvedores dos códigos GMESH e OpenFOAM®.
- Este tutorial foi elaborado pelos alunos de graduação Juliano Simon, Eduardo de Bittencourt Ribeiro e Widmark Kauê Silva Cardoso sob supervisão de Filipe Dutra da Silva.
- Ao utilizar este material, solicita-se que sejam dadas as devidas referências à esta página. Dúvidas e sugestões podem ser enviadas aos endereços de contato da página.
Este tutorial apresentará o procedimento para a construção de uma malha (C-grid) estruturada 2D para um aerofólio NACA 0012, utilizando o código Gmsh. O Gmsh pode ser utilizado de duas formas: através dos comandos da interface gráfica do programa ou editando o script, na forma do arquivo .geo, gerado pelo programa. Este tutorial abordará ambas as formas de uso do programa. Para abrir o script, vá para Modules→Geometry
e clique em Edit script
.
Inicialmente é preciso carregar os pontos que darão forma ao perfil. Esses pontos devem ser escritos no arquivo .geo no formato:
Point(nº) = {x, y, z, 1.0};
Pode se utilizar algum código externo para escrever as coordenadas no formato necessário, considerando a grande quantidade de pontos. Para esse tutorial, a sequência de pontos formatada para o Gmsh encontra-se no link naca.
Agora é necessário criar os pontos que formarão as fronteiras do domínio computacional. Esse domínio será na forma da figura apresentada no início do tutorial. Para facilitar a possível necessidade de alteração do tamanho dessa parte da malha, vários parâmetros serão definidos através de variáveis.
// VARIÁVEIS DE MODELAGEM
// variáveis de domínio
a = 10;
b = 10;
t = 1;
// nº de elementos
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
// taxa de crescimento
A = 0;
B = 0;
C = 0;
D = 0;
//====================================================
As variáveis de número de elementos e taxa de crescimento serão abordadas mais para frente neste tutorial, por conta disso são inicializadas com valor nulo. Os pontos do aerofólio podem ser adicionados logo abaixo desse primeiro trecho de código.
Agora é possível construir os pontos que formarão o domínio computacional, no arquivo .geo, escreva:
// DOMÍNIO
// Pontos
Point(199) = {a, -b, 0, t};
Point(201) = {a, b, 0, t};
Point(202) = {0, b, 0, t };
Point(204) = {0, -b, 0, t};
Point(205) = {1, -b, 0, t};
Point(206) = {1, b, 0, t};
Point(207) = {a, 0, 0, t};
O próximo passo é a conexão dos pontos que definem a malha. Pode ser feito indo em Modules→Geometry → Elementary entities → Add → Line
e selecionando os dois pontos que deseja-se conectar. Conecte os pontos da maneira mostrada nas imagens.
E o código no .geo ficará:
// Contorno
Line(207) = {204,205};
Line(208) = {205,199};
Line(210) = {201,206};
Line(211) = {206,202};
Line(213) = {204, 185};
Line(214) = {15, 202};
Line(215) = {100, 206};
Line(216) = {205,100};
Line(220) = {199, 207};
Line(221) = {207, 201};
Line(222) = {207, 100};
Para completarmos a parte frontal da malha será feito um semi-círculo. Para tal, selecione Modules → Geometry → Elementary entities → Add → Circle arc
e selecione o ponto superior, o ponto central e o ponto inferior.
//+
Circle(223) = {204,1,202};
//===================================================
Em seguida, serão criadas as splines que farão o contorno do aerofólio. Vá em Modules → Geometry → Elementay entities → Add → Spline
e selecione os conjuntos de pontos, na sequência mostrada nas figuras abaixo.
O arquivo .geo deverá apresentar a seguinte estrutura:
// CURVA DO PERFIL
Spline(217) = {185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 194 , 196 , 198, 1 , 2 , 4 , 6 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15}; //+
Spline(218) = {15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29, 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100}; //+
Spline(219) = { 100 , 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 , 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 , 142 , 143 , 144 , 145 , 146 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170, 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 , 182 , 183 , 184 , 185}; //+
//===================================================
Agora, deve-se aplicar a condição de Transfinite nas arestas da malha. Isso definirá o número de elementos em cada aresta do bloco e a taxa de crescimento dos elementos. Para isso vá em Modules → Mesh → Define → Transfinite → Curve
e selecione as arestas nessa ordem:
- As arestas da frontal do aerofólio e o limite frontal da malha.
- As arestas verticais.
- As arestas laterais do aerofólio e os limites da malha.
- E as arestas horizontais.
O arquivo .geo deverá ficar da seguinte forma:
// MALHA
//Superfícies
Transfinite Curve {217, 223} = 10 Using Progression 1;
Transfinite Curve {220, 216, 213, 221, 215, 214} = 10 Using Progression 1;
Transfinite Curve {211, 218, 219, 207} = 10 Using Progression 1;
Transfinite Curve {210, 222, 208} = 10 Using Progression 1;
Em seguida, deve-se ajustar o número de volumes em cada parte da malha e o espaçamento desses volumes. Para tal utilize as variáveis criadas anteriormente, aplique essas modificações no .geo na área de variáveis:
// nº de elementos
n1 = 150;
n2 = 125;
n3 = 200;
n4 = 250;
// taxa de crescimento
A = 1;
B = 1.05;
C = 1;
D = 1.015;
Mude os Transfinites das arestas da seguinte forma:
// MALHA
// Superfícies
Transfinite Curve {217, 223} = n1 Using Progression A;
Transfinite Curve {220, 216, 213, 221, 215, 214} = n2 Using Progression B;
Transfinite Curve {211, 218, 219, 207} = n3 Using Progression C;
Transfinite Curve {210, 222, 208} = n4 Using Progression D;
Agora é necessário definir os planos. Para isso vá em Modules → Geometry → Elementary entities → Add → Plane surface
e selecione as arestas que compõem cada plano pressionando “e” para confirmar a seleção. Exemplo:
Como resultado, após repetir o processo para cada plano:
O arquivo .geo deverá ficar da seguinte forma:
//+
Curve Loop(1) = {210, -215, -222, 221};
Curve Loop(2) = {222, -216, 208, 220};
Curve Loop(3) = {207, 216, 219, -213};
Curve Loop(4) = {218, 215, 211, -214};
Curve Loop(5) = {223, 213, 217, 214};
//+
Plane Surface(2) = {2};
Plane Surface(3) = {3};
Plane Surface(4) = {4};
Plane Surface(5) = {5};
Agora deve-se aplicar a condição de Transfinite nas faces da malha. Para isso vá em Modules → Mesh → Define → Transfinite → Surface
e selecione as faces apertando “e” para confirmar a seleção. No .geo:
//+
Transfinite Surface {1};
Transfinite Surface {2};
Transfinite Surface {3};
Transfinite Surface {4};
Transfinite Surface {5};
Em seguida vá em Modules → Mesh → Define → Recombine
e selecione todas as faces e aperte “e” por último. No .geo:
//+
Recombine Surface {1, 2, 3, 4, 5};
//===================================================
Agora a geometria será extrudada. Para isso vá em Modules → Geometry → Elementary entities → Extrude → Translate,
selecione todas as faces e aperte “e”. Como resultado obtem-se:
No .geo, altere a função da maneira mostrada abaixo:
//EXTRUSÃO E NOME DAS FRONTEIRAS
Extrude {0, 0, 1} {
Surface{5}; Surface{3}; Surface{2}; Surface{1}; Surface{4};
Layers{1};
Recombine;
}
Por último, deve-se nomear cada superfície da malha que irão servir como condição de contorno. Vá em Modules → Geometry → Physical Groups → Add → Surface
. Selecione e nomeie nessa ordem:
- inlet
- outlet
- airfoil
- front and back
Para selecionar os volumes vá em Modules → Geometry → Physical Groups → Add → Volume
e selecione todos volumes:
O resultado no .geo deverá se mostrar da seguinte forma:
//+
Physical Surface("inlet") = {232, 328, 298, 284, 254};
Physical Surface("oulet") = {310, 288};
Physical Surface("aerofolio") = {240, 320, 262};
Physical Surface("frontandback") = {245, 289, 267, 311, 333, 4, 1, 5, 3};
Physical Volume("volume") = {1, 2, 3, 4, 5};
Por último, Adicione o comando “Mesh 3;” no arquivo .geo e a criação da malha está completa. Para criar o arquivo que será utilizado no OpenFOAM clique em File → Expor
t, escolha o local em que deseja salvar o arquivo e salve-o com a extensão .msh. Em seguida aparecerá uma janela “MSH Options”, selecione para o formato “Version 2 ASCII” e clique em salvar.