| | | |

Método dos Elementos Finitos

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

3.1 Equação de advecção-difusão

Vamos considerar a equação de advecção-difusão em 2D, dada por:

κΔu+𝐚u=fem Ω, u=0em Γ, (3.1)

onde κ>0 é o coeficiente de difusão, 𝒂 é o campo de velocidade, f é a fonte e Γ é a fronteira do domínio Ω. Por simplicidade, consideramos que 𝒂 é um campo de velocidade constante; os desenvolvimentos a seguir podem ser estendidos a campos com divergência nula, i.e.

𝒂=0. (3.2)

Além disso, assumimos condições de contorno de Dirichlet homogêneas

u=0em Γ. (3.3)

A formulação variacional fraca para este problema é: encontrar uH01(Ω) tal que

κ(u,v)+(𝒂u,v)=(f,v)vH01(Ω). (3.4)

Tomando v=u em (3.4), a parte de advecção pode ser reescrita usando a identidade de Gauss111Johann Carl Friedrich Gauss, 1777 - 1855, matemático alemão. Fonte: Wikipédia: Carl Friedrich Gauss.:

(𝒂u,u)=Ω(𝒂u)u𝑑x
=12Ω(𝒂u2)dx
=12Γ𝒂𝒏u2ds
12Ω(𝒂)u2𝑑x=0.

Com isso, a expressão em (3.4) pode ser limitada, à esquerda, por Poincaré222Henri Poincaré, 1854 - 1912, matemático francês. Fonte: Wikipédia: Henri Poincaré.–Friedrichs333Kurt Otto Friedrichs, 1901 - 1982, matemático estadunidense-alemão. Fonte: Wikipédia: Kurt Otto Friedrichs. e, à direita, por Cauchy444Augustin-Louis Cauchy, 1789-1857, matemático francês. Fonte: Wikipédia: Augustin-Louis Cauchy.–Schwarz555Karl Hermann Amandus Schwarz, 1843-1921, matemático alemão. Fonte: Wikipédia: Hermann Amandus Schwarz., resultando em:

κCuH012κu2=(f,u)fufuH01. (3.5)

Assim, temos a estimativa de estabilidade

uH011κCf. (3.6)

Esta estimativa mostra que a constante de estabilidade depende inversamente do coeficiente de difusão κ. Como consequência, temos a indicação de que para valores pequenos de κ, pequenas perturbações em f podem levar a grandes variações em u (instabilidade).

Classicamente, o problema de elementos finitos associado é: encontrar uhVh tal que

κ(uh,vh)+(𝒂uh,vh)=(f,vh)vhVh. (3.7)

Este problema herda a instabilidade do problema fraco, o que pode levar a soluções oscilatórias, especialmente para valores pequenos de κ (regime de advecção-dominante).

Exemplo 3.1.1.

Vamos considerar o seguinte problema de advecção-difusão em 2D:

κΔu+𝒂u=0,em (0,1)2, (3.8)
u(0,y)=1,y(0.8,1), (3.9)
u(0,y)=0,y(0,0.8), (3.10)
u(x,1)=1,x(0,1), (3.11)
uy(x,0)=0,x(0,1), (3.12)
ux(1,y)=0,y(0,1), (3.13)

onde 𝒂=(2/2,2/2) e κ=103. A solução deste problema apresenta uma camada de fronteira ao longo da diagonal do quadrado, o que pode levar a oscilações na solução numérica se o método de elementos finitos clássico for utilizado.

A Figura 3.1 mostra a solução numérica obtida utilizando o método de elementos finitos clássico implementado no Código 18. A malha utilizada é uma triangularização uniforme sob uma partição de 10×10 células.

Refer to caption
Figura 3.1: Solução numérica do problema de advecção-difusão utilizando o método de elementos finitos clássico.
Código 18: ad_mef2d.py
1from dolfinx import default_scalar_type
2from dolfinx.fem import (
3 Constant,
4 Function,
5 functionspace,
6 dirichletbc,
7 form,
8 locate_dofs_geometrical
9)
10from dolfinx.fem.petsc import LinearProblem
11from dolfinx.mesh import create_unit_square
12
13from mpi4py import MPI
14from ufl import (
15 SpatialCoordinate,
16 TestFunction,
17 TrialFunction,
18 dot,
19 ds,
20 dx,
21 grad
22)
23
24import numpy as np
25
26# espaço
27mesh = create_unit_square(MPI.COMM_WORLD, 10, 10)
28V = functionspace(mesh, ("Lagrange", 1))
29u = TrialFunction(V)
30v = TestFunction(V)
31
32# forma bilinear
33kappa = Constant(mesh, 1e-3)
34a = Constant(mesh, np.array([np.sqrt(2)/2, -np.sqrt(2)/2], dtype=default_scalar_type))
35a_form = kappa * dot(grad(u), grad(v)) * dx + dot(a, grad(u)) * v * dx
36
37# forma linear
38zero = Constant(mesh, 0.0)
39L_form = zero * v * dx
40
41# condições de Dirichlet
42x = SpatialCoordinate(mesh)
43
44def boundary_left_top(x):
45 return np.logical_and(np.isclose(x[0], 0), x[1] >= 0.8)
46dofs_bc1 = locate_dofs_geometrical(V, boundary_left_top)
47one = Constant(mesh, 1.0)
48bc1 = dirichletbc(one, dofs_bc1, V)
49
50def boundary_left_bottom(x):
51 return np.logical_and(np.isclose(x[0], 0), x[1] < 0.8)
52dofs_bc2 = locate_dofs_geometrical(V, boundary_left_bottom)
53bc2 = dirichletbc(zero, dofs_bc2, V)
54
55def boundary_top(x):
56 return np.isclose(x[1], 1)
57dofs_bc3 = locate_dofs_geometrical(V, boundary_top)
58bc3 = dirichletbc(one, dofs_bc3, V)
59
60bcs = [bc1, bc2, bc3]
61
62# problema linear
63solver_options = {
64 "ksp_type": "gmres",
65 "ksp_rtol": 1.0e-8,
66 "ksp_atol": 1.0e-10,
67 "ksp_max_it": 1000,
68 "ksp_monitor": None,
69 "ksp_converged_reason": None,
70 "pc_type": "jacobi",
71}
72problem = LinearProblem(
73 a_form,
74 L_form,
75 bcs=bcs,
76 petsc_options_prefix="ad_mef2d",
77 petsc_options=solver_options
78)
79uh = problem.solve()
80
81# plot 3D surface
82import pyvista
83from dolfinx.plot import vtk_mesh
84
85topology, cell_types, geometry = vtk_mesh(V)
86
87grid = pyvista.UnstructuredGrid(topology, cell_types, geometry)
88grid.point_data["uh"] = uh.x.array.real
89surface = grid.warp_by_scalar("uh", factor=1.0)
90
91plotter = pyvista.Plotter()
92plotter.add_mesh(surface, show_edges=False, scalars="uh",
93 scalar_bar_args={"title": "uh", "vertical": True})
94plotter.view_vector((1, 1, 1))
95plotter.add_axes()
96plotter.view_vector((-2, 0, 1))
97plotter.show()

3.1.1 SUPG

Uma formulação de elementos finitos estabilizada para o problema de advecção-difusão (3.1) é a formulação SUPG (Streamline Upwind Petrov666Georgi Iwanowitsch Petrov, 1912 - 1987, engenheiro soviético. Fonte: Wikipedia: Georgi Iwanowitsch Petrov.-Galerkin777Boris Galerkin, 1871 - 1945, engenheiro e matemático soviético. Fonte: Wikipédia: Boris Galerkin.). A formulação SUPG é dada por: encontrar uhVh tal que

κ(uh,vh)+(𝒂uh,vh)+KτK(κΔuh+𝒂uh,𝒂vh)K
=(f,vh)+KτK(f,𝒂vh)K, (3.14)

onde τK é um parâmetro de estabilização que depende do tamanho do elemento K. Os termos adicionais na formulação SUPG atuam como um mecanismo de estabilização, reduzindo as oscilações na solução numérica pela adição de um termo de difusividade artificial ao longo das linhas de fluxo do campo de velocidade 𝒂. Existem várias formas de escolha do parâmetro τK, sendo uma escolha comum a seguinte [5, Subseção 2.4.3]:

τK=((2𝒂hK)2+9(4κhK2)2)12, (3.15)

onde hK é o tamanho do elemento K. Para a justificativa desta escolha e de outras alternativas, consulte [5].

Exemplo 3.1.2.

Vamos considerar o mesmo problema do Exemplo 3.1.1, mas agora utilizando a formulação SUPG. A Figura 3.2 mostra a solução numérica obtida utilizando a formulação SUPG com uma triangularização sob uma malha uniforme de 10×10 células.

Refer to caption
Figura 3.2: Solução numérica do problema de advecção-difusão utilizando a formulação SUPG.

O Código 18 pode ser facilmente modificado pela inclusão do termo de estabilização SUPG. Consulte a implementação do termo de estabilização no Código 19 e verifique a solução implementando-a no Código 18.

Código 19: ad_mef2d_supg.py
1from ufl import CellDiameter, sqrt
2# SUPG stabilization
3h = CellDiameter(mesh) # local cell size h_K
4a_norm = sqrt(dot(a, a))
5tau0 = Constant(mesh, 1.0)
6tau = tau0 / sqrt((2.0 * a_norm / h)**2 + 9.0 * (4.0 * kappa / h**2)**2)
7a_form += tau * dot(a, grad(u)) * dot(a, grad(v)) * dx

3.1.2 Exercícios

Em revisão

E. 3.1.1.

Obtenha aproximações de elementos finitos da solução do seguinte problema de advecção-difusão em 1D:

κu′′+au=10e5x4ex,em (0,1), (3.16)
u(0)=0,u(1)=1. (3.17)

Verifique a estabilidade da solução numérica para diferentes valores do número de Péclet PeK=ahK2κ=0.25,,5. Use a formulação SUPG (com escolha de τK análoga à (3.15)) para obter soluções estáveis e compare os resultados com a formulação clássica de elementos finitos. Por fim, faça uma análise de convergência de malha para ambos os métodos.

E. 3.1.2.

Para problemas de advecção-difusão em 1D, uma escolha apropriada do parâmetro de estabilização τK na formulação SUPG é dada por

τK=hK2a(coth(PeK)1PeK), (3.18)

onde PeK=ahK2κ é o número de Péclet local. Implemente esta escolha de τK para o problema do E.3.1.1 e compare os resultados com a escolha de τK análoga à (3.15).

E. 3.1.3.

Faça uma análise de convergência de malha para o problema de advecção-difusão em 2D apresentado no Exemplo 3.1.1, utilizando tanto a formulação clássica de elementos finitos quanto a formulação SUPG. Uma escolha alternativa para o parâmetro de estabilização τK na formulação SUPG é dada por

τK=(2ah+4κh2)1. (3.19)

Para o problema em questão, esta escolha é melhor que a sugerida em (3.15)? Justifique sua resposta.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |