| | | |

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

Em revisão

Existem dois tipos de estimativas do erro e:=uuh. Estimativas a priori, são aquelas em que o erro é dado em relação da solução u, enquanto que nas estimativas a posteriori o erro é expresso em relação a solução de elementos finitos uh.

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):=I(uuh)v𝑑x=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)a(uuh,v)=0, (1.88)

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.89)

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.90)
=I(uuh)(uv+vuh)𝑑x (1.91)
=I(uuh)(uv)𝑑x+I(uuh)(vuh)𝑑x (1.92)
=I(uuh)(uv)𝑑x (1.93)
(uuh)L2(I)(uv)L2(I). (1.94)

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.95)
Demonstração.

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

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

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

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

Exemplo 1.2.2.

A Figura 1.6 apresenta o esboço da evolução do erro (uuh)L2(I) da solução de elementos finitos do problema (1.82)-(1.83) para malhas uniformes com n=2,4,8,,128 células.

Refer to caption
Figura 1.6: Esboço dos gráficos das soluções referentes ao Exemplo 1.2.2.

Com o FEniCS, a computação do problema de elementos finitos pode ser feita com o seguinte código:

from __future__ import print_function, division
from fenics import *
import numpy as np
import matplotlib.pyplot as plt

def boundary(x,on_boundary):
    return on_boundary

def solver(n):
    # malha
    mesh = IntervalMesh(n,0,1)

    # espaco
    V = FunctionSpace(mesh, ’P’, 1)

    bc = DirichletBC(V,Constant(0.0),boundary)

    #MEF problem
    u = TrialFunction(V)
    v = TestFunction(V)
    f = Constant(1.0)
    a = u.dx(0)*v.dx(0)*dx
    L = f*v*dx

    #computa a sol
    u = Function(V)
    solve(a == L, u, bc)

    return u, mesh

#sol analitica
ua = Expression(’-x[0]*x[0]/2+x[0]/2’,
                degree=2)


lerrors=[]
for n in [2,4,8,16,32,64,128]:
    u, mesh = solver(n)
    e = errornorm(u,ua,norm_type=’H10’,mesh=mesh)
    lerrors.append(e)

plt.plot([2,4,8,16,32,64,128],lerrors)
plt.xscale(’log’,basex=2)
#plt.yscale(’log’,base=2)
plt.xlabel(r"$n$")
plt.ylabel(r"$|\!|(u-u_h)’|\!|_{L^2(I)}$")
plt.xlim((2,128))
plt.xticks([2,4,8,16,32,64,128],[2,4,8,16,32,64,128])
plt.grid(’on’)
plt.show()

1.2.4 Estimativa a posteriori

Em revisão

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

Teorema 1.2.4.

A solução de elementos finitos uh satisfaz

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

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

ηi(uh)=hifuh′′L2(Ii). (1.99)
Demonstração.

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

eL2(I)2=Ie(eπe)𝑑x=i=1nIie(eπe)𝑑x. (1.100)

Então, aplicando integração por partes

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

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.102)

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

eL2(I)2 i=1nf+uhL2(Ii)eπeL2(Ii)dx (1.103)
Ci=1nhif+uhL2(Ii)eL2(Ii) (1.104)
C(i=1nhi2f+uhL2(Ii)2)1/2(i=1neL2(Ii)2)1/2 (1.105)
=C(i=1nhi2f+uhL2(Ii)2)1/2eL2(I), (1.106)

donde segue o resultado desejado. ∎

Observação 1.2.1.

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

Em revisão

E. 1.2.1.

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

u′′+u=2senx,x(π,π), (1.107)
u(π)=u(π)=0. (1.108)

Código FENiCS.


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