Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Alunos:
Alex Duarte de Oliveira
Felipe di Napoli Garcia
Marzieh Paravi
Nathália Rodrigues Julião
Rio de Janeiro
Junho de 2017
SUMÁRIO
1 INTRODUÇÃO ................................................................................................... 1
2 METODOLOGIA ............................................................................................... 3
4 CONCLUSÕES ................................................................................................. 21
1 INTRODUÇÃO
Este trabalho constitui requisito parcial para a disciplina de Método dos Elementos Finitos I,
ministrada pelo professor Fernando Luiz Bastos Ribeiro, e foi elaborado utilizando um software
de elementos finitos disponibilizado pelo professor, durante o curso.
O primeiro objetivo deste trabalho é alterar o programa fornecido para incluir: (1) um elemento
quadrilátero bilinear, para problemas de elasticidade plana; (2) um solver iterativo, utilizando
o Método dos Gradientes Conjugados, com pré-condicionamento diagonal; e (3) uma rotina
para escrever o arquivo de saída no formato VTK, compatível com o software Paraview.
profil: Sub-rotina que monta o perfil da matriz de rigidez e o vetor apontador (jdiag), seguindo
o método de armazenamento Skyline.
pform: Sub-rotina que corrige o vetor de forças, através da introdução dos deslocamentos
prescritos. Também faz a definição da numeração global das equações dos elementos e
associação dos vetores locais aos vetores globais da estrutura.
2 METODOLOGIA
y h
1
2 2 1
3
4
x 3 4
( , )= ( , )
Onde:
uj é o deslocamento do nó.
( , )= ( , )
( , )= ( , )
As funções de interpolação (Ni) para um elemento quadrilátero são obtidas a partir do produto
de polinômios de Lagrange de grau p, em cada direção, resultando em elementos com (p + 1)²
nós. Desta forma, as funções para o elemento quadrilátero bi linear são dadas por:
1
= (1 + )(1 + )
4
1
= (1 − )(1 + )
4
1
= (1 − )(1 − )
4
1
= (1 + )(1 − )
4
E suas derivadas são dadas por:
= (1 + ), = (−1)(1 + ), = (−1)(1 − ) e = (1 − )
= (1 + ), = (1 − ), = (−1)(1 − ) e = (−1)(1 + )
[ ] = [ℒ][ ]
5
⎡ 0 0 0 0 ⎤
⎢ ⎥
⎢ ⎥
[ ]=⎢ 0 0 0 0 ⎥
⎢ ⎥
⎢ ⎥
⎣ ⎦
( , )
= +
( , )
= +
⎡ ⎤ ⎡ ⎤⎡ ⎤
⎢ ⎥=⎢ ⎥⎢ ⎥
⎢ ⎥ ⎢ ⎥
⎢ ⎥ ⎢ ⎥⎢ ⎥
⎣ ⎦ ⎣ ⎦⎣ ⎦
A matriz que relaciona as derivadas nos dois sistemas de coordenadas é a matriz Jacobiana:
⎡ ⎤
[ ] = ⎢⎢ ⎥
⎥
⎢ ⎥
⎣ ⎦
= e =
= e =
⎡ ⎤
=[ ] ⎢ ⎥
⎢ ⎥
⎢ ⎥
⎣ ⎦
= [ ( , )] ∙ [ ] ∙ ( , )
Sendo dΩ = dx dy
Pode-se provar que: dΩ = det[J].dξ.dη. Assim, a integral pode ser reescrita da forma:
= [ ( , )] ∙ [ ] ∙ ( , ) [ ]
Onde D é a matriz constitutiva do estado plano de deformação, dada pela seguinte expressão:
⎡ 1 1− ⎤ 0
(1 − ) ⎢ ⎥
= ⎢ 1 0 ⎥
(1 + )(1 − 2 ) ⎢1 − ⎥
⎢ 0 1−2 ⎥
0
⎣ 2(1 − )⎦
Numericamente, a integral acima pode ser resolvida como um somatório, aplicando a integração
numérica de Gauss, onde o domínio das coordenadas naturais (ξ, η) é alterado para o domínio
dos pontos de Gauss (ξi, ηi ), inserindo, na expressão, os pesos destes pontos de integração,
conforme a expressão abaixo:
= ( , ) = ,
7
, =[ ] ∙[ ]∙ ∙ []
≤ (2 − 1)
= [ ( , )] [ ] ( , )
= −0.577350269189626 = −0.577350269189626
= +0.577350269189626 = +0.577350269189626
{ } = [ ]{ }
Onde {F} é o vetor de forças nodais e [K] é a matriz de rigidez global da malha.
A matriz K do sistema de equações a ser resolvido é simétrica, o que permite que o seu
armazenamento seja feito considerando apenas a sua parte superior (ou inferior). Além de ser
simétrica, a matriz K também é esparsa, o que permite que o seu armazenamento seja feito
8
Após a matriz do sistema ser armazenada no formato Skyline, é criado um vetor apontador
(jdiag) que armazena as posições que os elementos da diagonal da matriz ocupam no vetor
Skyline. Este vetor apontador é utilizado para realizar as operações com a matriz do sistema,
na forma de produto entre vetores.
A resolução de sistemas lineares de equações algébricas pode ser dividida em dois grupos de
métodos: os diretos e os iterativos.
Os métodos iterativos têm por finalidade o melhoramento da solução aproximada até que esta
esteja precisa o suficiente. Esses métodos consistem em calcular uma sequência de
aproximações da solução do sistema linear, condicionados a uma aproximação inicial e uma
tolerância. O Método dos Gradientes Conjugados foi o método iterativo implementado neste
trabalho.
1
( )= − +
2
Onde:
9
b e x – são vetores;
c – é um escalar.
Ao longo das curvas de nível desta função, o valor de f(x) é constante. O gradiente de f(x)
representa a direção de maior crescimento da função, sendo, portanto, ortogonal às curvas de
nível e é expresso por:
f x f x
f x ,
x y
O ponto central das elipses formadas representa o ponto em que a derivada de f(x) é nula, ou
seja, f '(x) = 0 e, portanto, o gradiente da função neste ponto é nulo.
1 1
′( ) = + −
2 2
(x) = −
Para o cálculo do gradiente igual à zero, ou seja, ponto de máximo ou mínimo tem-se:
( )=0 ∴0= − ∴ =
A função quadrática terá um ponto de mínimo onde a derivada se anula sempre que a matriz A
for positiva definida, caso contrário, o ponto poderá será de máximo. Desta maneira, sempre
que A for simétrica e positiva definida, a função quadrática será um paraboloide voltado para
cima e, ao solucionar novamente o sistema A.x = b, é encontrado o ponto de mínimo da função.
Portanto, o método objetiva basicamente encontrar os pontos xi caminhando para o ponto de
mínimo do paraboloide, seguindo sempre a direção de maior decréscimo da função, que será a
direção de f '(xi).
Neste método, inicia-se a partir de um ponto xo ao longo da direção de maior variação da função
e geram-se uma sequência de pontos xi subsequentes para seguir a direção do vetor de f '(xi). O
resíduo em xi será ri = b – A.xi e o erro em xi será e = x* - xi. O resíduo pode ser visto como a
direção de máxima descida da função f(x) em xi, ou seja, ri = f '(x).
Dado xo pode-se encontrar um ponto xi que diminua o resíduo, ou seja, f '(x), dando um passo
na direção de –f'(xo). Em outras palavras, pode-se encontrar x1 definindo-o como x1 = xo + ∝.ro,
10
∝ =
= +∝ (próximo ponto)
(constante de Gram-Schmidt)
=
= − (search direction)
O processo é feito até que o xn se aproxime o suficiente da solução exata, de acordo com a
tolerância adotada e requerida no problema.
Embora essa formulação reduza o esforço por iteração, a desvantagem é que o cálculo de r(i +1)
é feito sem nenhum valor de retorno de xi, apenas de xo, fazendo com que este cálculo acumule
erros de arredondamento. Isto pode ser minimizado retornando-se periodicamente, a cada
determinado número de iterações, à equação inicial ri = b – A.xi para o novo cálculo do resíduo
correto.
– Pré-condicionador Diagonal;
– Pré-condicionador Lumped;
– Pré-condicionador ILUT.
O pré-condicionador diagonal, que foi utilizado neste trabalho, consiste em uma matriz
diagonal M que contém os valores da diagonal da matriz A.
()= ( ( ))
Uma matriz diagonal é simples de ser invertida, porém há de se observar que em boa parte dos
casos não remete aos pré-condicionadores ideais.
A base de código ParaView foi projetada de tal forma que todos os seus componentes podem
ser reutilizados para desenvolver aplicativos verticais. Essa flexibilidade permite que os
usuários desenvolvam rapidamente aplicativos que possuem funcionalidades específicas para
um problema específico. O ParaView é executado em sistemas de processamento de memória
compartilhada ou distribuída e utiliza o Visualization Toolkit (VTK) como o mecanismo de
processamento e renderização de dados.
12
O problema foi simulado utilizando elementos triangulares e quadriláteros, com cinco malhas
estruturadas diferentes para cada tipo elemento. Para um mesmo tipo de elemento, a diferença
entre as malhas utilizadas está no número de divisões das arestas, consequentemente, no número
de nós e elementos. As discretizações utilizadas foram de 8x8, 16x16, 32x32, 64x64 e 128x128.
Desta forma, para os dois tipos de elementos, foram utilizadas malhas com os mesmos números
de nós, variando apenas a quantidade de elementos. A Tabela 1 apresenta um resumo das
características das malhas utilizadas.
Para este problema, considerou-se que a norma de energia da solução exata seria igual a ‖u‖E
=1,379745. Este valor foi utilizado, juntamente com os valores da norma de energia obtidos nas
simulações, para calcular a norma de energia do erro de cada um dos casos simulados.
3.2 RESULTADOS
Os resultados obtidos serão apresentados nesta seção, em termos dos deslocamentos absolutos
e das normas de energia das soluções aproximadas. As Figuras 4 a 13 apresentam os
deslocamentos, visualizados pelo software ParaView, enquanto as normas de energia e os
valores de erro são apresentados na Tabela 3.
Analisando as Figuras 4 a 13, percebe-se que, nos dois tipos de elementos, os valores de
deslocamento absoluto aumentaram com o refinamento da malha, tendendo para um valor
limite máximo, que seria, teoricamente, o valor da solução exata.
Comparando os resultados entre os dois tipos de malha, percebe-se que a malha quadrangular
apresenta valores ligeiramente superiores para todos os casos, tendendo a atingir o valor
máximo teórico com um grau de refinamento menor que o da malha triangular (menor número
de nós e elementos).
A Tabela 2 apresenta os valores de norma de energia e erro percentual para todos os casos
18
simulados. Os valores da norma de energia das soluções aproximadas (||u||E), da norma dos
erros (||e||), e do erro relativo (h), apresentados na Tabela 3, foram calculados utilizando as
seguintes expressões, respectivamente:
‖û‖ = ( û) ( û) Ω =
‖ ‖ =‖ ‖ −‖ ‖
= 100 ∗ ‖ ‖ ⁄‖ ‖
A norma de energia da solução exata foi considerada igual a ||u||E = 1,379745. Este valor foi
obtido com uma malha de alto grau de refinamento e fornecido pelo professor.
Pela Tabela 2, percebe-se que a norma de energia da solução aumenta com o refinamento da
malha, enquanto a norma do erro e o erro relativo diminuem. Isso indica que a solução obtida
está se aproximando da solução exata do problema que, neste caso, foi assumida como sendo
igual a solução obtida com a malha de alto grau de refinamento. Além da influência do grau de
refinamento, também pode-se perceber a influência do tipo de elemento. Para todos os casos
simulados, as malhas com elementos quadriláteros apresentaram maiores valores de norma de
energia da solução e menores erros relativos que os elementos triangulares.
utilizadas nos elementos quadriláteros são bi lineares, enquanto as funções dos elementos
triangulares são apenas lineares.
A aproximação por MEF converge para a solução exata quando é atendida a expressão:
‖ ‖ ≤ ℎ
Onde:
C – constante independente;
h – dimensão do elemento;
μ – valor mínimo de p e λ;
λ – real positivo.
‖ ‖ ≤ ℎ
‖ ‖ ≤ −
2
Utilizando esta expressão e os dados da Tabela 3, foram plotados os gráficos apresentados na
Figura 14.
20
0,00
Elementos Triangulares
-0,20
-0,60
Log(|e|)
-0,80
-1,00
-1,20
y = -0,3621x + 0,1625
-1,40
-1,60
2,00 2,50 3,00 3,50 4,00 4,50 5,00
Log(neq)
4 CONCLUSÕES
O programa alterado foi empregado para simular um problema de elasticidade plana (estado
plano de deformações), utilizando 10 malhas diferentes. Os resultados obtidos foram
consistentes e dentro do esperado. Os valores obtidos com o Método dos Gradientes
Conjugados implementado, para as malhas triangulares e quadrangulares, foram iguais aos
valores obtidos com o método direto, originalmente implementado no programa. Isso indica
que as alterações feitas no programa foram bem-sucedidas
Observou-se também, como esperado, que, para o mesmo número de nós, as malhas de
elementos quadriláteros apresentaram sempre valores de deslocamento ligeiramente superiores
aos valores obtidos com as malhas triangulares. Consequentemente, os valores da norma de
energia do erro e o erro relativo foram sempre menores. Também foi verificado que a taxa de
convergência da malha de elementos quadriláteros é maior que a de elementos triangulares. Isso
ocorre porque as funções de interpolações do quadrilátero são bi lineares, enquanto as do
elemento triangular são lineares.
REFERÊNCIAS BIBLIOGRÁFICAS
RIBEIRO, F.L.B. Introdução ao Método dos Elementos Finitos. Notas de aula da disciplina
Elementos Finitos I (COC752). Programa de Engenharia Civil, COPPE/UFRJ.
ZIENKIEWICZ, O.C.; TAYLOR, R.L. (1989). The finite element method. 4thEdition, Vol.1:
Basic formulation and Linear Problems, MacGraw-Hill.
23
49: dN_eta(4)=(1-ksi_ksi)/4
50: c **** derivadas das funcoes de interpolacao em relacao a ksi
51: dN_ksi(1)=(1+eta_eta)/4
52: dN_ksi(2)=(1-eta_eta)/4
53: dN_ksi(3)=-(1-eta_eta)/4
54: dN_ksi(4)=-(1+eta_eta)/4
55: c **** montagem da matriz jacobiana
56: do k=1,2
57: xj(1,k)=0
58: xj(2,k)=0
59: do l=1,4
60: xj(1,k)=xj(1,k)+dN_eta(l)*x(k,l)
61: xj(2,k)=xj(2,k)+dN_ksi(l)*x(k,l)
62: enddo
63: enddo
64: c **** calculo do determinante da matriz jacobiana
65: detj = xj(1,1)*xj(2,2)-xj(2,1)*xj(1,2)
66: c **** obtendo a inversa da matriz jacobiana
67: xjinv(1,1)=xj(2,2)/detj
68: xjinv(1,2)=-xj(1,2)/detj
69: xjinv(2,1)=-xj(2,1)/detj
70: xjinv(2,2)=xj(1,1)/detj
71: c **** derivadas das funcoes de interpolacao com relacao a x e a y
33: vaux=x
34: call prodmatvet(jdiag,a,vaux,neq)
35: do k=1,neq
36: r(k)=b(k)-vaux(k)
37: enddo
38: else
39: do k=1,neq
40: r(k)=r(k)-alfa*q(k)
41: enddo
42: endif
43: do k=1,neq
44: s(k)=Minv(k)*r(k)
45: enddo
46: delta_antigo=delta_novo
47: delta_novo=prodvetvet(r,s,neq)
48: beta=delta_novo/delta_antigo
49: do k=1,neq
50: d(k)=s(k)+beta*d(k)
51: enddo
52: i=i+1
53: enddo
54: do k=1,neq
55: b(k)=x(k)
56: enddo
57: call normaenergia (a,b,jdiag,neq)
58: end
Sub-Rotina para Escrever o Arquivo de Saída no Formato VTK
24: if(nen.eq.3)write(nout,'(i10)') 5
25: if(nen.eq.4)write(nout,'(i10)') 9
26: enddo
27: write(nout,'(a,i8)') 'CELL_DATA ',numel
28: write(nout,'(a)') 'SCALARS mesh_mat int'
29: write(nout,'(a)') 'LOOKUP_TABLE default'
30: do i = 1, numel
31: write(nout,'(i10)') ix(nen+1,i)
32: enddo
33: write(nout,'(a,i8)') 'POINT_DATA ',nnode
34: write(nout,'(a)') 'VECTORS Deslocamentos double'
35: do i = 1, nnode
36: do j = 1, ndf
37: aux(j) = f(j,i)
38: k = id(j,i)
39: if(k .gt. 0) aux(j) = u(k)
40: enddo
41: write(nout,'(3e15.5)') (aux(j),j=1,ndf),0.0
42: enddo
43: return
44: end