| | | |

Método dos Elementos Finitos

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

1.2 Problema modelo

Vamos fazer a introdução do método de elementos finitos pela aplicação no seguinte problema de valor de contorno (problema forte): encontrar u tal que

u′′=f,xI=[0,l], (1.63)
u(0)=u(l)=0, (1.64)

onde f é uma função dada (fonte).

1.2.1 Formulação fraca

A derivação de um método de elementos finitos inicia-se da formulação fraca444Uma representação integral da equação diferencial. do problema em um espaço de funções apropriado. No caso do problema (1.63)-(1.64), tomamos o espaço

V0={vH1(I):v(0)=v(l)=0}. (1.65)

Ou seja, vV0 é tal que vH1(I), i.e. vL2(I)< e vL2(I)<, bem como v satisfaz as condições de contorno do problema.

A formulação fraca é obtida multiplicando-se a equação diferencial (1.63) por uma função teste vV0 (arbitrária) e integrando-se por partes, i.e.

Ifv𝑑x=Iu′′v𝑑x (1.66)
=Iuvdxu(l)v(l)+u(0)v(0) (1.67)

Donde, das condições de contorno das funções de teste vV0, temos

Iuv𝑑x=Ifv𝑑x. (1.69)

Desta forma, o problema fraco associado a (1.63)-(1.64) lê-se: encontrar uV0 tal que

a(u,v)=L(v),vV0, (1.70)

onde

a(u,v)=Iuv𝑑x (1.71)
L(v)=Ifv𝑑x, (1.72)

são chamadas de forma bilinear e forma linear, respectivamente. A formulação fraca construida aqui é chamada de formulação de Galerkin555Boris Galerkin, 1871 - 1945, engenheiro e matemático soviético. Fonte: Wikipédia., em que o espaço da solução é igual ao espaço das funções teste.

1.2.2 Formulação de elementos finitos

Uma formulação de elementos finitos é um aproximação do problema fraco (1.70) em um espaço de dimensão finita. Aqui, vamos usar o espaço Vh,0 das funções afins por partes em I que satisfazem as condições de contorno, i.e.

Vh,0={vVh:v(0)=v(l)=0}. (1.73)

Então, substituindo o espaço V0 pelo subespaço Vh,0V0 em (1.70), obtemos o seguinte problema de elementos finitos: encontrar uhVh,0 tal que

a(uh,v)=L(v),vVh,0. (1.74)

Observemos que o problema (1.74) é equivalente a: encontrar uhVh,0 tal que

a(uh,φi)=L(φi), (1.75)

para todo i=0,1,,n, onde φi é a i-ésima função base de Vh,0. Então, como uhVh,0, temos

uh=j=0nξjφj, (1.76)

onde ξj, j=0,1,,n, são as n+1 incógnitas a determinar. I.e., ao computarmos ξj, j=0,1,,n, temos obtido a solução uh do problema de elementos finitos (1.74).

Agora, da forma bilinear (1.71), temos

a(uh,φi)=a(j=0nξjφj,φi) (1.77)
=j=0nξja(φj,φi). (1.78)

Daí, o problema (1.74) é equivalente a resolvermos o seguinte sistema de equações lineares

A𝝃=𝒃, (1.79)

onde A=[ai,j]i,j=0n é a matriz de rigidez com

ai,j=a(φj,φi)=Iφjφi𝑑x, (1.80)

𝝃=(ξ0,ξ1,,ξn) é o vetor das incógnitas e 𝒃=(b0,b1,,bn) é o vetor de carga com

bi=L(φi)=Ifφi𝑑x. (1.81)
Exemplo 1.2.1.

Consideramos o problema (1.63)-(1.64) com f10 e l=1, i.e.

u′′=10,xI=[0,1], (1.82)
u(0)=u(1)=0. (1.83)

Neste caso, a solução analítica u(x)=5x2+5x pode ser facilmente obtida por integração. Vamos computar uma aproximação de elementos finitos no espaço das funções afins por partes Vh,0={vVh;v(0)=v(1)=0} construído numa malha uniforme de 5 células no intervalo I=[0,1]. Para tanto, consideramos o problema fraco associado: encontrar uV0={vH1(I);v(0)=v(1)=0} tal que

a(u,v)=L(v), (1.84)

onde

a(u,v)=Iuv𝑑x,L(v)=I1v𝑑x. (1.85)

Então, a formulação de elementos finitos associada, lê-se: encontrar uhVh,0 tal que

a(uh,vh)=L(vh),vhVh,0. (1.86)

A Figura 1.5 apresenta o esboço dos gráficos da solução analítica u e da sua aproximação de elementos finitos uh (computada pelo Código 4). Verifique!

Refer to caption
Figura 1.5: Soluções aproximada uh versus analítica u=5x2+5x do problema (1.82)-(1.83).
Código 4: ex_mef1d_modelo.py
1from mpi4py import MPI
2import numpy as np
3import ufl
4from dolfinx import mesh
5from dolfinx import default_scalar_type
6from dolfinx.fem.petsc import LinearProblem
7
8# malha
9domain = mesh.create_unit_interval(MPI.COMM_WORLD,
10 nx = 5)
11# espaço
12from dolfinx import fem
13V = fem.functionspace(domain, ('P', 1))
14
15# condição de contorno
16uD = fem.Function(V)
17uD.interpolate(lambda x: np.full(x.shape[1], 0.))
18
19tdim = domain.topology.dim
20fdim = tdim - 1
21domain.topology.create_connectivity(fdim, tdim)
22boundary_facets = mesh.exterior_facet_indices(domain.topology)
23boundary_dofs = fem.locate_dofs_topological(V, fdim,
24 boundary_facets)
25bc = fem.dirichletbc(uD, boundary_dofs)
26
27# problema mef
28u = ufl.TrialFunction(V)
29v = ufl.TestFunction(V)
30
31f = fem.Constant(domain, default_scalar_type(10.))
32
33a = ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
34L = f * v * ufl.dx
35
36problem = LinearProblem(a, L, bcs=[bc],
37 petsc_options_prefix="ex_mef1d_modelo")
38uh = problem.solve()

1.2.3 Estimativa a priori

As estimativas de erro são classificadas como a priori, quando o erro é dado em relação a solução u. E, quando expresso em relação à solução de elementos finitos uh, é classificada como a posteriori. A seguir, apresentamos algumas propriedades de uh que nos permitem obter uma estimativa a priori do erro (uuh)L2(I).

Teorema 1.2.1.(Ortogonalidade de Galerkin)

A solução de elementos finitos uh de (1.74) satisfaz a seguinte propriedade de ortogonalidade

a(uuh,v)=0,vVh,0, (1.87)

onde u é a solução de (1.70).

Demonstração.

De (1.74), (1.70) e lembrando que Vh,0V0, temos

a(u,v)=L(v)=a(uh,v) (1.88)
a(uuh,v)=0, (1.89)

para todo vVh,0. ∎

Teorema 1.2.2.(A melhor aproximação)

A solução de elementos finitos uh dada por (1.74) satisfaz a seguinte propriedade de melhor aproximação

(uuh)L2(I)(uv)L2(I),vVh,0, (1.90)

onde u é a solução de (1.70).

Demonstração.

Escrevendo uuh=uv+vuh para qualquer vVh,0 e usando a ortogonalidade de Galerkin (Teorema 1.2.1), temos

(uuh)L2(I)2 =I(uuh)(uuh)𝑑x (1.91)
=I(uuh)(uv+vuh)𝑑x (1.92)
=I(uuh)(uv)𝑑x+I(uuh)(vuh)𝑑x (1.93)
=I(uuh)(uv)𝑑x (1.94)
(uuh)L2(I)(uv)L2(I). (1.95)

Teorema 1.2.3.(Estimativa a priori)

O erro em se aproximar a solução u de (1.70) pela solução de elementos finitos uh dada por (1.74) satisfaz a seguinte estimativa a priori

(uuh)L2(I)2Ci=1nhi2u′′L2(Ii)2. (1.96)
Demonstração.

Tomando v=πu no teorema da melhor aproximação (Teorema 1.2.2), obtemos

(uuh)L2(I)(uπu)L2(I). (1.97)

Daí, da estimativa do erro de interpolação (Proposição 1.1.2), temos

(uuh)L2(I)2Ci=1nhi2u′′L2(Ii)2. (1.98)

Observação 1.2.1.(Estimativa do erro na norma L2)

Lembrando que e(0)=e(1)=0 para o problema modelo (1.63)-(1.64), a desigualdade de Poincaré666Henri Poincaré, 1854 - 1912, matemático francês. Fonte: Wikipédia: Henri Poincaré. garante que

uuhL2(I)C(uuh)L2(I). (1.99)

Assim, a estimativa a priori do erro uuhL2(I) pode ser obtida a partir da estimativa (1.96), ou seja,

uuhL2(I)Chu′′L2(I), (1.100)

assumindo uma malha uniforme, i.e. hi=h para todo i=1,2,,n. Verifique!

Como observaremos no próximo Exemplo 1.2.2, esta não é uma estimativa a priori ótima. Na verdade, para elementos finitos P1, pode-se mostrar que [1, Section 5.4]

uuhL2(I)Ch2u′′L2(I), (1.101)

sob hipóteses adicionais sobre a regularidade da solução u.

Exemplo 1.2.2.

A Tabela 1.3 apresenta uma análise numérica da convergência de malha na solução de elementos finitos do problema (1.82)-(1.83).

Tabela 1.3: Análise da convergência de malha na solução de elementos finitos do problema (1.82)-(1.83).
n uuhL2[0,1] taxa (uuh)L2[0,1] taxa
5 3.65e2 5.77e1
10 9.13e3 2.00 2.89e1 1.00
20 2.28e3 2.00 1.44e1 1.00
40 5.71e4 2.00 7.22e2 1.00

O cálculo dos erros uuhL2(I) e (uuh)H1(I) pode ser feito pelo seguinte código, considerando uh computado pelo Código 4. Verifique!

Código 5: ex_mef1d_modelo_erro.py
1# solução analítica
2V2 = fem.functionspace(domain, ('P', 2))
3ua = fem.Function(V2)
4ua.interpolate(lambda x: 5. * x[0] * (1 - x[0]))
5
6# erro L2
7error_L2_local = fem.assemble_scalar(fem.form((uh - ua)**2 * ufl.dx))
8error_L2 = np.sqrt(domain.comm.allreduce(error_L2_local, op=MPI.SUM))
9print(f"Erro L2: {error_L2:.2e}")
10
11# erro H1
12error_H1_local = fem.assemble_scalar(fem.form(ufl.dot(ufl.grad(uh - ua), ufl.grad(uh - ua)) * ufl.dx))
13error_H1 = np.sqrt(domain.comm.allreduce(error_H1_local, op=MPI.SUM))
14print(f"Erro H1: {error_H1:.2e}")

1.2.4 Estimativa a posteriori

Vamos obter uma estimativa a posteriori para o erro e=uuh da solução de elementos finitos uh do problema modelo (1.63)-(1.64).

Teorema 1.2.4.(Estimativa a posteriori)

A solução de elementos finitos uh satisfaz

(uuh)L2(I)2Ci=1nηi2(uh), (1.102)

onde ηi(uh) é chamado de elemento residual e é dado por

ηi(uh)=hif+uh′′L2(Ii). (1.103)
Demonstração.

Tomando e=uuh e usando a ortogonalidade de Galerkin (Teorema 1.2.1) temos

eL2(I)2=Ie(eπe)𝑑x (1.104)
=i=1nIie(eπe)dx. (1.105)

Então, aplicando integração por partes

eL2(I)2=i=1nIi(e′′)(eπe)𝑑x+[e(eπe)]xi1xi. (1.106)

Daí, observando que eπe=0 nos extremos dos intervalos Ii e que e′′=(uuh)′′=u′′+uh′′=f+uh′′, temos

eL2(I)2=i=1nIi(f+uh′′)(eπe)𝑑x. (1.107)

Agora, usando as desigualdades de Cauchy-Schwarz e a estimativa padrão de interpolação (1.25), obtemos

eL2(I)2 i=1nf+uh′′L2(Ii)eπeL2(Ii)dx (1.108)
Ci=1nhif+uh′′L2(Ii)eL2(Ii) (1.109)
C(i=1nhi2f+uh′′L2(Ii)2)1/2(i=1neL2(Ii)2)1/2 (1.110)
=C(i=1nhi2f+uh′′L2(Ii)2)1/2eL2(I), (1.111)

donde segue o resultado desejado. ∎

Observação 1.2.2.

No caso da solução de elementos finitos no espaço das funções lineares por partes, temos uh′′=0. Logo, o elemento residual se resume em ηi(uh)=hifL2(Ii).

1.2.5 Exercícios

E. 1.2.1.

Obtenha uma aproximação por elementos finitos P1 da solução de

u′′=π2sen(πx),x(0,1), (1.112)
u(0)=u(1)=0. (1.113)

Faça o esboço dos gráficos da solução analítica u=sen(πx) e da sua aproximação de elementos finitos uh. Então, faça uma análise da convergência de malha e verifique as taxas de convergência dos erros uuhL2(I) e (uuh)H1(I).

E. 1.2.2.

Obtenha uma aproximação por elementos finitos P2 da solução do problema dado no E.1.2.1. Faça o esboço dos gráficos da solução analítica u=sen(πx) e da sua aproximação de elementos finitos uh. Então, faça uma análise da convergência de malha e estime as taxas de convergência dos erros uuhL2(I) e (uuh)H1(I).

E. 1.2.3.

Obtenha uma aproximação por elementos finitos P1 da solução de

u′′+u=2senx,x(π,π), (1.114)
u(π)=u(π)=0. (1.115)

Faça o esboço dos gráficos da solução analítica u=senx e da sua aproximação de elementos finitos uh. Então, faça uma análise da convergência de malha e estime as taxas de convergência dos erros uuhL2(I) e (uuh)H1(I).

E. 1.2.4.

Considere o seguinte problema de difusão-advecção

ϵu′′+u=10,x(0,1), (1.116)
u(0)=u(1)=0, (1.117)

onde ϵ>0. A solução analítica deste problema é dada por

u(x)=10x10(ex/ϵ1)e1/ϵ1. (1.118)

Estude aproximações por elementos finitos para este problema com diferentes valores de ϵ. O que acontece com a solução de elementos finitos quando ϵ é muito pequeno? Faça uma análise da convergência de malha para ϵ1.

E. 1.2.5.

Estude aproximações por elementos finitos para o seguinte problema de difusão-advecção-reação com coeficientes variáveis

[(1+x)u]+xu+u=f(x),x(0,1), (1.119)
u(0)=u(1)=0, (1.120)

onde f(x)=π(x1)cos(πx)+[1+π2(1+x)]sen(πx). A solução analítica deste problema é dada por u(x)=sen(πx). Faça uma análise da convergência de malha e estime as taxas de convergência dos erros uuhL2(I) e (uuh)H1(I).


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
| | | |