| | | | |

1.2 Problema Modelo

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

Em revisão

Nesta seção, discutimos sobre a aplicação do método de elementos finitos para o seguinte problema de valor de contorno: encontrar u tal que

u′′ =f,xI=[0,L], (1.59)
u(0) =u(L)=0, (1.60)

onde f é uma função dada.

1.2.1 Formulação Fraca

Em revisão

A derivação de um método de elementos finitos inicia-se da formulação fraca do problema em um espaço de funções apropriado. No caso do problema (1.59)-(1.60), tomamos o espaço

V0={vH1(I):v(0)=v(1)=0}. (1.61)

Ou seja, se vH1(I), então vL2(I)<, vL2(I)<, bem como v satisfaz as condições de contorno do problema.

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

Ifv𝑑x =Iu′′v𝑑x (1.62)
=Iuv𝑑xu(L)v(L)+u(0)v(0) (1.63)

Donde, das condições de contorno, temos

Iuv𝑑x=Ifv𝑑x. (1.65)

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

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

onde

a(u,v) =Iuv𝑑x (1.67)
L(v) =Ifv𝑑x, (1.68)

são chamadas de forma bilinear e forma linear, respectivamente.

1.2.2 Formulação de Elementos Finitos

Em revisão

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

Vh,0={vVh:v(0)=v(L)=0}. (1.69)

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

a(uh,v)=L(v),vVh,0. (1.70)
Observação 1.2.1.

A formulação de elementos finitos não é única, podendo-se trabalhar com outros espaços de funções. No caso em que o espaço da solução é igual ao espaço das funções testes, a abordagem é chamada de método de Galerkin44endnote: 4Boris Grigoryevich Galerkin, matemático e engenheiro soviético. Fonte: Wikipédia..

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

a(uh,φi)=L(φi),i=1,,n1, (1.71)

onde φi, i=1,,n1, são as funções base de Vh,0. Então, como uhVh,0, temos

uh=j=1n1ξjφj, (1.72)

onde ξj, j=1,2,,n1, são incógnitas a determinar. I.e., ao computarmos ξj, j=1,2,,n1, temos obtido a solução uh do problema de elementos finitos 1.70.

Agora, da forma bilinear (1.67), temos

a(uh,φi) =a(j=1n1ξjφj,φi) (1.73)
=j=1n1ξja(φj,φi). (1.74)

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

Aξ=b, (1.75)

onde A=[ai,j]i,j=1n1 é a matriz de rigidez com

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

ξ=(ξ1,ξ2,,ξn1) é o vetor das incógnitas e b=(bi)i=1n1 é o vetor de carregamento com

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

Consideramos o problema (1.59)-(1.60) com f1 e L=1, i.e.

u′′ =1,xI=[0,1], (1.78)
u(0) =u(1)=0. (1.79)

Neste caso, a solução analítica u(x)=x2/2+x/2 pode ser facilmente obtida por integração.

Agora, vamos computar uma aproximação de elementos finitos no espaço das funções lineares por partes Vh,0={vP1(I);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: encontrar uV0={vH1(I);v(0)=v(L)=0} tal que

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

onde

a(u,v)=Iuv𝑑x,L(v)=Ifv𝑑x. (1.81)

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

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

A Figura LABEL:fig:ex_modelo apresenta o esboço dos gráficos da solução analítica u e da sua aproximação de elementos finitos uh.

Refer to caption
Figura 1.5: Esboço dos gráficos das soluções referentes ao Exemplo 1.2.1.
Código 3: ex_mef1d_modelo.py
1from mpi4py import MPI
2
3# malha
4from dolfinx import mesh
5domain = mesh.create_unit_interval(MPI.COMM_WORLD,
6                                   nx = 5)
7# espaço
8from dolfinx import fem
9V = fem.functionspace(domain, ('P', 1))
10
11# condição de contorno
12import numpy as np
13uD = fem.Function(V)
14uD.interpolate(lambda x: np.full(x.shape[1], 0.))
15
16tdim = domain.topology.dim
17fdim = tdim - 1
18domain.topology.create_connectivity(fdim, tdim)
19boundary_facets = mesh.exterior_facet_indices(domain.topology)
20boundary_dofs = fem.locate_dofs_topological(V, fdim,
21                                            boundary_facets)
22bc = fem.dirichletbc(uD, boundary_dofs)
23
24# problema mef
25import ufl
26from dolfinx import default_scalar_type
27from dolfinx.fem.petsc import LinearProblem
28u = ufl.TrialFunction(V)
29v = ufl.TestFunction(V)
30
31f = fem.Constant(domain, default_scalar_type(1.))
32
33a = ufl.dot(ufl.grad(u), ufl.grad(v)) * ufl.dx
34L = f * v * ufl.dx
35
36problem = LinearProblem(a, L, bcs=[bc])
37uh = 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.70) satisfaz a seguinte propriedade de ortogonalidade

a(uuh,v):=I(uuh)v𝑑x=0,vVh,0, (1.83)

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

Demonstração.

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

a(u,v)=L(v)=a(uh,v)a(uuh,v)=0, (1.84)

para todo vVh,0. ∎

Teorema 1.2.2.

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

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

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

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.86)
=I(uuh)(uv+vuh)𝑑x (1.87)
=I(uuh)(uv)𝑑x+I(uuh)(vuh)𝑑x (1.88)
=I(uuh)(uv)𝑑x (1.89)
(uuh)L2(I)(uv)L2(I). (1.90)

Teorema 1.2.3.

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

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

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

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

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

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

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.78)-(1.79) 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.59)-(1.60).

Teorema 1.2.4.

A solução de elementos finitos uh satisfaz

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

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

ηi(uh)=hifuh′′L2(Ii). (1.95)
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.96)

Então, aplicando integração por partes

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

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

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

eL2(I)2 i=1nf+uhL2(Ii)eπeL2(Ii)dx (1.99)
Ci=1nhif+uhL2(Ii)eL2(Ii) (1.100)
C(i=1nhi2f+uhL2(Ii)2)1/2×(i=1neL2(Ii)2)1/2 (1.101)
=C(i=1nhi2f+uhL2(Ii)2)1/2eL2(I), (1.102)

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

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.103)
u(π)=u(π)=0. (1.104)
Resposta.

Código FENiCS.


Envie seu comentário

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. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!