Você está na página 1de 41

Programação de Elementos Finitos com MATLAB 1

12
Programação de Elementos Finitos com
MATLAB
O Capítulo 12 inclui uma introdução geral às funções do MATLAB, tópicos selecionados em álgebra linear com
MATLAB e uma coleção de programas de elementos finitos para: treliças (Capítulo 2), problemas unidimen-
sionais gerais (Capítulo 5), condução de calor em duas dimensões (Capítulo 8) e elasticidade em duas dimensões
(Capítulo 9). Este Capítulo está publicado somente no formato eletrônico por diversas razões:

1. a estrutura de dados do programa de elementos finitos será atualizada periodicamente para refletir as tecnologias
emergentes em elementos finitos e as mudanças de sintaxe no MATLAB;
2. para permitir que instrutores de curso utilizem o seu próprio MATLAB ou outros programas de elementos
finitos;
3. para criar um fórum onde estudantes e instrutores possam trocar idéias e propor alternativas de estruturas de dados
de programas de elementos finitos. O fórum (em inglês) está instalado no endereço: http://1coursefem.blogspot.
com/

12.1 Usando o MATLAB para o MEF1


12.1.1 As Janelas do MATLAB
Sobre a abertura do MATLAB você deve ver três janelas: a janela da área de trabalho, a janela de comando e a janela
do histórico como mostrado na Figura 12.1. Caso você não veja essas três janelas, ou veja mais do que três janelas,
você pode modificar o leiaute clicando na seguinte seleção do menu: View  desktop layout  default.

12.1.2 A Janela de Comando


Se você clicar na janela de comando um cursor irá aparecer para você datilografar e entrar com vários comandos. O
cursor está indicado por dois símbolos “maior do que” ().

Material opcional (pode ser omitido em sala de aula). Recomendado como leitura independente.
1
2 CAPÍTULO DOZE

Figura 12.1 As janelas do Matlab.

12.1.3 Expressões de Entrada


Após clicar na janela de comando, você pode entrar nos comandos que deseja que o MATLAB execute. Tente entrar
da seguinte forma: 84. Você verá que o MATLAB retornará: resposta  12.

12.1.4 Criando Variáveis


Tão logo os comandos dão entrada no MATLAB, as variáveis são criadas. O formato geral para a entrada de vari-
áveis é: variável  expressão. Por exemplo, entre com y  1 na janela de comando. O MATLAB retorna com:
y  1. Uma variável y foi criada e o valor de 1 foi atribuído a ela. Esta variável pode ser usada em vez do
número 1 em futuras operações matemáticas. Por exemplo, quando digitamos y*y na área de comando, obtemos:
resposta  1. O MATLAB é sensível a letras maiúsculas e minúsculas, de forma que y  1, e Y  5 criarão duas
variáveis independentes.

12.1.5 Funções
O MATLAB possui muitas funções matemáticas-padrão, tais como o seno (sen(x)) e o cosseno (cos(x)) etc. Também
possui pacotes de programas computacionais, chamados de caixa de ferramentas, com funções especiais para tópicos
específicos.

12.1.6 Obtendo Ajuda e Determinando Funções


A capacidade para determinar e implantar funções e ferramentas do MATLAB é a habilidade mais importante que o
principiante necessita desenvolver. O MATLAB contém muitas funções que podem ser úteis além daquelas descritas
a seguir.
Existem duas formas diferentes para obter ajuda:
• Clique no pequeno ícone que representa uma pergunta no topo da tela. Isto abrirá a janela de ajuda que possui
diversas teclas úteis para achar a informação.
• Digite “help” na linha de comando: o MATLAB retornará com uma lista de tópicos para os quais ele possui
funções. Na base da lista, ele diz como obter mais informações sobre um tópico. Como exemplo, se você digitar
“help sqrt” o MATLAB retornará com uma lista de funções disponíveis para a raiz quadrada.
Programação de Elementos Finitos com MATLAB 3

12.1.7 Álgebra Matricial com MATLAB


O MATLAB é um sistema computacional interativo para cálculos numéricos e gráficos. Como o nome sugere, o
MATLAB é especialmente projetado para cálculos matriciais. Além disso, ele possui uma variedade de capacidades
gráfica e de visualização, e pode ser estendido por meio de programas computacionais escritos em sua própria
linguagem de programação. Aqui, introduzimos somente alguns procedimentos básicos, de forma que você possa
realizar operações matriciais essenciais e a programação básica necessária para a compreensão e o desenvolvimento
do programa de elementos finitos.

12.1.8 Definição de Matrizes


Uma matriz é um arranjo de números ou variáveis m  n arranjados em m linhas e n colunas. Tal matriz é dita ter
dimensão m  n, conforme mostrado a seguir

As letras em negrito denotarão matrizes ou vetores. Os elementos de uma matriz a são denotados por aij, onde i é o
número da linha e j é o número da coluna. Observe que tanto na descrição da dimensão da matriz quanto nos subs-
critos que identificam o número da linha e da coluna, o número da linha é colocado primeiramente.
Um exemplo de uma matriz 33 é:

Essa matriz a é um exemplo de uma matriz quadrada, visto que o número de linhas é igual ao de colunas.
Os seguintes comandos mostram como entrar com matrizes no MATLAB ( é o comando MATLAB; ele pode
ser diferente em computadores diferentes ou em versões diferentes do MATLAB.)

Observe que as linhas de uma matriz são separadas por ponto e vírgula, enquanto as entradas sobre uma linha são
separadas por espaços (ou vírgulas). A ordem da matriz a pode ser determinada a partir de

A transposta de qualquer matriz é obtida pelo intercâmbio de linhas e colunas. Então, por exemplo, a transposta de

No MATLAB, a transposta de uma matriz é denotada por uma apóstrofe (ʹ).


Se aT  a, a matriz a é simétrica.
Uma matriz é chamada de matriz coluna ou um vetor se n = 1, como por exemplo
4 CAPÍTULO DOZE

No MATLAB, matrizes com subscritos únicos são consideradas matrizes linhas ou vetores linha.
Portanto, um vetor coluna em MATLAB é definido por

Observe a transposta usada para definir b como uma matriz coluna. As componentes do vetor b são b1, b2 e b3. A
transposta de b é um vetor linha

ou no MATLAB

Uma matriz é chamada de uma matriz diagonal se somente as componentes da diagonal são diferentes de zero,
isto é, aij  0, i 1 j. Por exemplo, a matriz a seguir é uma matriz diagonal:

Uma matriz diagonal em MATLAB é construída primeiramente pela definição de um vetor linha b  [1 5 6], e
em seguida colocando esse vetor linha sobre a diagonal

Uma matriz diagonal em que todas as componentes na diagonal são iguais a um é chamada de uma identidade ou
matriz unitária e é denotada por I. Por exemplo, a matriz identidade 2  2 é dada por

A expressão em MATLAB para uma matriz unitária de ordem n é

eye(n)

Portanto, a expressão em MATLAB I  eye(2) fornece essa matriz.

Uma matriz na qual todos os componentes são zero é chamada de uma matriz zero e é indicada por 0. No MATLAB,
B  zeros (m, n) cria m  n matrizes B de zeros. Uma matriz aleatória m  n pode ser criada por rand m,n). No método
dos elementos finitos, as matrizes são frequentemente esparsas, isto é, elas contêm muitos zeros. O MATLAB possui
a habilidade para estocar e manipular matrizes esparsas, com aumento crescente de sua utilidade para problemas
reais. O comando parse (m,n) estoca uma matriz zero m  n em um formato esparso, no qual somente as entradas
diferentes de zero e seus locais são ordenados.
As entradas diferentes de zero podem então ser colocadas uma a uma ou usando um loop.
Programação de Elementos Finitos com MATLAB 5

Observe que o visor em qualquer declaração em MATLAB pode ser suprimido ao finalizar uma linha por ponto e
vírgula.
A inversa de uma matriz quadrada é definida por

se a matriz a não for singular. A expressão em MATLAB para a inversa é inv(a). Equações algébricas lineares podem
também ser resolvidas pela utilização do operador de barra oblíqua invertidas, o que evita cálculos da inversa, sendo,
portanto, mais rápido.
A matriz a não é singular se o seu determinante, indicado por det (a), não é igual a zero. Um determinante de
uma matriz 22 é definido por

A expressão em MATLAB para o determinante é

det(a)

Por exemplo,

12.1.9 Operação com Matrizes

Adição e Subtração

Um exemplo de matriz adição em MATLAB é dado a seguir:


6 CAPÍTULO DOZE

Multiplicação

1. Multiplicação de uma matriz por um escalar

2. Produto escalar de dois vetores coluna

No MATLAB, o produto escalar, como definido por essa equação, é dado tanto por a * bc como por dot(a,b).

O comprimento de um vetor a é indicado por |a| e é dado por

O comprimento de um vetor também é chamado de sua norma.

3. Produto de duas matrizes

O produto de duas matrizes a (m  k) e b (k  n) é definido como

Alternativamente podemos escrever essa equação como


Programação de Elementos Finitos com MATLAB 7

Observe que a entrada i,j de c é o produto escalar da linha i de a com a coluna j de b.

O produto c de duas matrizes a e b é definido somente se o número de colunas em a é igual ao número de linhas em b.
Em outras palavras, se a é uma matriz (m  k), então b deve ser uma matriz (k  n), onde k é arbitrário. O produto c
terá então o mesmo número de linhas que a e o mesmo número de colunas que b, isto é, será uma matriz (m  n).

Um fato importante a lembrar é que a multiplicação de matrizes não é comutativa, isto é, ab 1 ba exceto em circuns-
tâncias não usuais.

A expressão em MATLAB para a multiplicação de matrizes é

c  a * b.

Considere as mesmas matrizes a e c como antes. Um exemplo de multiplicação de matrizes com MATLAB é

4. Outras operações com matrizes


a) A transposta do produto: (ab)T  bT aT
b) O produto com a matriz identidade: aI  a
c) O produto com a matriz zero: a0  0

12.1.10 Solução do Sistema de Equações Lineares


Considere o seguinte sistema de n equações com n incógnitas, dk, k  1,2,L, n

Podemos reescrever esse sistema de equações na notação matricial como se segue

em que

a solução simbólica desse sistema de equações pode ser achada multiplicando-se ambos os lados pela inversa de K,
que leva a

A expressão em MATLAB para a solução do sistema de equações é

ou
8 CAPÍTULO DOZE

Um exemplo de solução do sistema de equações com o MATLAB é dado a seguir

Como mencionado anteriormente, o operador de barra oblíqua invertida proporciona uma forma rápida para resolver
equações e deve sempre ser usado para sistemas grandes. A razão para isto é que o operador de barra oblíqua invertida
usa a eliminação para resolver com apenas um segundo membro, enquanto a determinação da inversa de uma matriz
n x n envolve a solução do sistema usando n segundos membros. Portanto, o operador de barra oblíqua invertida deve
sempre ser usado para resolver grandes sistemas de equações.

12.1.11 Cadeias em MATLAB


As variáveis em MATLAB também podem ser definidas como variáveis do tipo cadeia de caracteres. Um caractere
de cadeia é um texto acompanhado por notas únicas. Por exemplo:

É também possível criar uma série de cadeias pela criação de uma matriz na qual cada linha seja uma cadeia separada.
Igualmente com todas as matrizes-padrão, a linha precisa ser do mesmo comprimento. Assim

As cadeias são utilizadas para definir nomes de arquivos, títulos de gráficos e formatos de dados. Funções especiais
para manipulação de cadeias estão disponíveis no MATLAB, de forma a permitir que você trabalhe com cadeias.
Nos programas computacionais fornecidos neste livro fazemos uso de cadeias para comparar funções. Por exemplo,
a função strcmpi compara duas cadeias
Programação de Elementos Finitos com MATLAB 9

Uma declaração verdadeira resulta em 1 e uma falsa em 0. Para obter uma lista de todas as funções especiais para
manipulação de cadeias em MATLAB, digite

Outra função usada nos programas computacionais é fprintf. Essa função permite ao usuário imprimir na tela (ou
para um arquivo) cadeias e informação numérica em forma de tabela. Por exemplo

O primeiro argumento para a função chama o MATLAB para imprimir a mensagem na tela. O segundo argumento
é uma cadeia, onde %d define um caractere decimal com o valor de 10 e o \n define uma nova linha. Para ter uma
descrição completa digite

12.1.12 Programando com MATLAB


O MATLAB é muito conveniente para escrever programas simples em elementos finitos. Ele fornece a construção-
padrão, tal como laços e condicionais; tais construções podem ser utilizadas interativamente para reduzir o tédio de
tarefas repetitivas, ou coletadas em programas estocados no “m-files” (nada mais do que um texto com extensão
“.m”).

12.1.12.1 Condicional e Laços


O MATLAB possui um padrão condicional if-else.

A forma geral Um exemplo


 t  0,76;
if expression1  if t  0,75
statements1 s  0;
elseif expression2 elseif t  0,25
statements2 s  1;
... else
... s  1-2*(t-0,25);
... end
else  s
statements s
end 0

O MATLAB fornece dois tipos de loops, um loop “for” (comparável a um loop “do” em Fortran ou a um
loop “for” em C) e um loop “while”. Um loop “for” repete a instrução no loop enquanto o índice do loop toma
os valores em um dado vetor linha; o loop “while” se repete enquanto a expressão dada for verdadeira (dife-
rente de zero)

A forma geral Exemplos


 for i1:1:3
disp(i^2)
for index  start:increment:end
stataments end
end 1
4
9
 x1;
 while 11x1
while expression x  x/2;
statements end
end  x
x
1,1102e-16
10 CAPÍTULO DOZE

12.1.12.2 Funções
As funções permitem ao usuário criar novos comandos no MATLAB. Uma função é definida em um m-file que
começa com uma linha da seguinte forma

O restante do m-file consiste em comandos normais do MATLAB que calculam os valores das saídas e realizam
outras ações desejadas. A seguir, apresentamos um exemplo simples de uma função que calcula a função quadrática
f(x) = x2 – 3x –1. Os seguintes comandos devem ser estocados no arquivo fcn.m (o nome da função no MATLAB é
o nome do m-file, sem a extensão)

12.1.13 Gráficos Básicos


O MATLAB é uma excelente ferramenta para visualizar e traçar gráficos de resultados. Para traçar um gráfico, o
usuário especifica o vetor da coordenada x assim como o vetor da coordenada y, usando a seguinte sintaxe

Esses comandos gerarão

Figura 12.2 Saída típica do gráfico da função (x, y).

Diversos tipos de linhas, símbolos gráficos e cores podem ser obtidos com o gráfico (x, y, s) em que s é uma cadeia
de caracteres que consiste em elementos de qualquer combinação das 3 seguintes colunas

b azul . ponto - sólido


g verde o círculo : pontilhado
r vermelho x marca de x -. traço e ponto
c azul-esverdeado + mais -- tracejada
m carmesim * estrela (nenhuma) sem linha
y amarelo s quadrado
k preto d diamante

Para adicionar um título, uma legenda para x e y, o usuário deve usar as seguintes funções MATLAB. Observe
que os argumentos para as funções são cadeias
Programação de Elementos Finitos com MATLAB 11

Figura 12.3 Saída típica da função patch (x, y, c).

No programa computacional para elementos finitos MATLAB fornecido no livro, usamos também dois gráficos espe-
cializados. O primeiro gráfico é a função patch. Tal função é usada para visualizar polígonos em 2D com cores. As
cores são interpoladas a partir de nós do polígono para criar uma superfície colorida. O exemplo seguinte gera um
quadrado preenchido. As cores ao longo do eixo x são as mesmas, enquanto as cores ao longo do eixo y são interpo-
ladas entre os valores [0, 1].

Usaremos a função patch para visualizar temperaturas, tensões e outras variáveis obtidas nas soluções dos elementos
finitos. Outra função para gráfico especializado é a quiver. Essa função é usada para visualizar gradientes de funções
como um gráfico de setas. O exemplo seguinte demonstra o uso da função quiver para traçar os gradientes para a
função y  x2

O comando hold on é usado para guardar o gráfico atual e todas as propriedades dos eixos, de forma que os comandos
gráficos subseqüentes serão executados sobre o gráfico existente.
Usando a função text, o usuário pode adicionar a um gráfico uma mensagem de texto. Por exemplo

O primeiro e o segundo argumentos definem a posição do texto sobre o gráfico, enquanto a cadeia fornece o texto.

Figura 12.4 Saída típica da função quiver (x, y, cx, cy).


12 CAPÍTULO DOZE

12.1.14 Observações
a) Na prática o número n de equações pode ser muito grande. Atualmente, os PC podem resolver milhares de
equações em uma questão de minutos, se as equações forem esparsas (como elas estão em uma análise pelo
MEF — você lerá sobre isso mais tarde), porém, algumas vezes, milhões de equações são necessárias, como
para um porta-aviões ou um modelo completo para um avião; nesses casos, computadores em paralelo são
necessários.
b) Soluções técnicas eficientes que tiram vantagem da esparsidade e de outras propriedades vantajosas das equações
do MEF são essenciais para o tratamento, mesmo em sistemas moderadamente grandes. A discussão de como
resolver eficientemente grandes sistemas não será considerada neste curso.
c) Neste curso, iremos ver que
• A matriz correspondente ao sistema de equações que aparece do MEF (denotada como K) não é singular
(frequentemente é chamada de regular), isto é, K1 existe se as condições de contorno corretas são prescritas
e os elementos finitos são formulados adequadamente. Além disso, para bons modelos, a matriz é normalmente
bem condicionada, isto é, ela não é muito sensível a erros de arredondamento.
• K é simétrica, isto é, KT  K.
• K é definida positiva, isto é, xT Kx  0 “ x (significando para qualquer valor de x). Alternativamente,
K é dita para ser definida positiva, se todos os autovalores forem estritamente positivos. O problema do
autovalor consiste em achar os autovalores y diferentes de zero e os autovalores correspondentes l que
satisfaçam a

A expressão em MATLAB para o problema dos autovalores é

12.2 Programação em Elementos Finitos com MATLAB para Treliças


No Capítulo 2, a estrutura básica do método dos elementos finitos para estruturas de treliças foi ilustrada. Nesta seção,
apresentamos um programa de elementos finitos simples que utiliza a linguagem de programação MATLAB. Visto
que o MATLAB manipula matrizes e vetores com relativa facilidade, o leitor pode enfocar as idéias fundamentais
em vez dos detalhes do algoritmo.
O programa computacional é escrito para seguir de perto a formulação dada neste capítulo. De forma a entender
melhor como o programa funciona, a Figura 2.8 e o Problema Exemplo 2.2 no Capítulo 2 foram incluídos como
exemplos resolvidos pelo programa. Avançar pelo programa com este guia e os problemas exemplos é um método
efetivo para compreender o programa.
As principais rotinas no programa computacional de elementos finitos são
1. Pré-processamento que inclui dados de entrada e montagem adequada dos arranjos, vetores e matrizes.
2. Cálculos das matrizes de rigidez dos elementos e vetores força.
3. Montagem direta das matrizes e vetores.
4. Partição e solução.
5. Pós-processamento para variáveis secundárias.
A explanação para várias rotinas em MATLAB (estocadas em *.m files) é descrita por meio de comentários dentro
de cada sub-rotina.

12.2.1 Notações e Definições


12.2.1.1 Fornecido pelo Usuário
Programação de Elementos Finitos com MATLAB 13

nsd: número de dimensões espaciais (1 para problema 1D)


ndof: número de graus de liberdade por nó
nnp: número de pontos nodais
nel: número de elementos
nen: número de nós do elemento (2 nesse caso)
nd: número de deslocamentos (conhecidos) prescritos
CArea: área da seção transversal
Área  CArea (número do elemento)
E: Módulo de Young
Young  E (número de elemento)
leng: comprimento do elemento
Length  leng (número de elemento)
phi: ângulo do eixo xc para o eixo x para cada elemento especificado em graus. Lembre-se xc
é sempre do nó local 1 para 2
phi  phi (número de elemento)
IEN: matriz informação de conectividade
número do nó global  IEN (número do nó local, número do elemento)

d_bar: vetor de deslocamento prescrito d na Eq.
Erro! Fonte de referência não encontrada.
f_hat: vetor força dado f̂ na Eq. Erro! Fonte de referência não encontrada.

plot_truss: string for output control: [‘yes’] to plot truss elements


plot_nod: string for output control: [‘yes’] to plot truss global node numbers
plot_stress: string for output control: [‘yes’] to plot stresses

12.2.1.2 Calculado ou Deduzido pelo Programa

neq: número total de equações


K: matriz de rigidez global
d: vetores de deslocamento global estocado como:
para problemas 1D para problemas 2D

f: vetor força global (excluindo as reações) é estocado como:


para problemas 1D para problemas 2D

e: número do elemento
ke: matriz de rigidez do elemento
de: vetor de deslocamento do elemento
para problemas 1D para problemas 2D

LM: matriz reunião


A matriz reunião é usada para extrair os graus de liberdade do elemento e do local. Ela possui a seguinte estrutura:

grau de liberdade global  LM (grau de liberdade local, número do elemento)

Quando ndof  1 (veja exemplo na Figura 2.8) IEN e LM são definidos como mostrado a seguir:
14 CAPÍTULO DOZE

Quando ndof  2 (veja exemplo no Problema 2.2) IEN e LM são definidos como:

Em ambos os exemplos, as colunas indicam os elementos e as linhas indicam os graus de liberdade global.

K_E: partição da matriz de rigidez global K baseada na Eq.


Erro! Fonte de referência não encontrada.
K_EF: partição da matriz de rigidez global K baseada na Eq.
Erro! Fonte de referência não encontrada.
K_F: partição da matriz de rigidez global K baseada na Eq.
Erro! Fonte de referência não encontrada.
d_F: incógnita (livre) parte do vetor de deslocamento global d baseado na Eq.
Erro! Fonte de referência não encontrada.
d_E: partição da matriz de rigidez global K baseada na Eq.
Erro! Fonte de referência não encontrada.
f_E: partição da matriz de rigidez global K baseada na Eq.
Erro! Fonte de referência não encontrada.
stress: tensão para cada elemento

Observação: Neste capítulo, os nós em que os deslocamentos são prescritos devem ser numerados primeiramente.

12.2.1.3 Programa MATLAB para Elementos Finitos em Treliças


Programação de Elementos Finitos com MATLAB 15
16 CAPÍTULO DOZE
Programação de Elementos Finitos com MATLAB 17
18 CAPÍTULO DOZE

12.3 Funções de Forma e Quadratura de Gauss com o MATLAB


No Capítulo 2, a estrutura básica para programação em elementos finitos foi introduzida para análise em uma e duas
dimensões para estrutura de treliças. Nesta seção, damos as funções para a construção das funções de forma do elemento
em uma dimensão e suas derivadas. As funções de forma são definidas no sistema físico de coordenadas.

12.3.1 Notações e Definições

xe: coordenadas em x do elemento nodal


xt: coordenada em x na qual as funções são avaliadas
N: arranjo das funções de forma
B: arranjo das derivadas das funções de forma
gp: arranjo da posição dos pontos de Gauss no domínio de referência do elemento

arranjo dos pesos

12.3.2 Programa MATLAB para Funções de Forma e Derivadas


Programação de Elementos Finitos com MATLAB 19

12.3.3 Programa MATLAB para Quadratura de Gauss

12.4 Programação de Elementos Finitos em uma Dimensão com o MATLAB


Na Seção 12.2, a estrutura básica para programação em elementos finitos foi introduzida para análise em uma e
duas dimensões para estrutura de treliças. Em 12.3, as funções do programa para o cálculo das funções de forma do
elemento, suas derivadas e quadratura de Gauss em uma dimensão foram introduzidas. Nesta seção, introduzimos
uma estrutura mais geral para programação em elementos finitos para problemas unidimensionais que, em principio,
é similar àquela em multidimensões a ser desenvolvida nas Seções 12.5 e 12.6 para problemas de condução de calor
e elasticidade, respectivamente.
No Capítulo 2, discutimos diversas metodologias para impor condições de contorno. Na abordagem baseada
na partição, os então chamados nós-E (nos quais os deslocamentos são prescritos) são primeiramente numerados.
Entretanto, em geral, os nós e as numerações dos elementos são definidos inicialmente por geradores de malhas e
subsequentemente renumerados para maximizar a eficiência de resolver um sistema de equações lineares. Em nossa
implantação, identificamos os nós localizados sobre o contorno natural ou contorno essencial. Os nós sobre um
contorno natural são designados flag1, enquanto os nós sobre um contorno essencial são identificados como flag=2.
Subsequentemente, os nós são renumerados pelo programa, de forma que os nós E são primeiramente numerados.
Isto é realizado por meio da construção dos arranjos ID e LM na função setup_ID_LM. Com algumas modificações
menores, o programa para problemas de elasticidade unidimensional pode ser alterado para analisar os problemas
de condução de calor.
A explanação para várias rotinas em MATLAB é dada como comentário no interior de cada função.
Somente a nomenclatura e as definições que foram modificadas a partir dos capítulos anteriores estão inclu-
ídas a seguir. A maioria do programa é igual ou muito similar àquele desenvolvido na Seção 12.2. Um arquivo de
entrada para o Exemplo 5.2, no Capítulo 5, modelado com dois elementos quadráticos é dado a seguir. Arquivos
adicionais de entrada para uma malha de elemento quadrático e quatro malhas de elementos quadráticos são forne-
cidos no disco.

12.4.1 Notações e Definições


12.4.1.1 Fornecido pelo Usuário

nd: número de nós sobre o contorno essencial (nós E)


ngp: número de pontos de Gauss
body: vetor de valores das forças de campo — definido nos nós e interpolado usando as funções de forma
E: vetor dos valores nodais do módulo de Young
CArea: vetor dos valores nodais da área da seção transversal
flags: Arranjo de sinal denotando as condições de contorno essencial e natural

sinais (Número do nó inicial global)  valor do sinal


Os valores do sinal são: 1 — contorno natural; 2 — contorno essencial

x: vetor das coordenadas nodais em x


y: vetor das coordenadas nodais em y (usado somente para gráficos)
e_bc: vetor das condições de contorno essenciais (deslocamento ou temperaturas)
n_bc: vetor das condições de contorno naturais (trações ou fluxo no contorno)
P: vetor das forças pontuais (fontes pontuais em condução de calor)
xp: vetor das coordenadas em x, em que as forças pontuais são aplicadas
np: número de forças pontuais (fontes pontuais em condução de calor)
nplot: número de pontos usados para traçar deslocamentos e tensões (temperaturas e fluxos em condução de calor)
IEN: matriz locação
20 CAPÍTULO DOZE

A matriz locação relaciona o número global inicial do nó e os número dos nós no local do elemento.
Subseqüentemente, os nós são remunerados (veja setup–ID–LM.m), de forma que os nós E são primeiramente
numerados. A matriz IEN possui a seguinte estrutura:

Número do nó global inicial  IEN (número do nó local, número do elemento)

12.4.1.2 Calculado pelo Programa de EF

ID: Arranjo destino

Número do nó global reordenado  ID (número do nó global inicial)

LM: Matriz locação

Número do nó global reordenado  LM (Número do nó local, número do elemento)

Observe que a matriz LM está relacionada com a matriz IEN por

LM (I, e)  ID(IEN(I,e))

12.4.2 Programa de Elementos Finitos em MATLAB para Problemas Unidimensionais


Programação de Elementos Finitos com MATLAB 21
22 CAPÍTULO DOZE
Programação de Elementos Finitos com MATLAB 23

12.5 Programa de Elementos Finitos em MATLAB para Condução de Calor em 2D


Na Seção 12.2, a estrutura básica para programa de elementos finitos foi introduzida para análise em uma e duas
dimensões de estruturas de treliças. Na Seção 12.3, uma estrutura mais geral para programas de elementos finitos
para problemas em uma dimensão foi desenvolvida. Nesta seção, descrevemos um programa de elementos finitos
para problemas de campo escalar em duas dimensões focando sobre a condução de calor. Você notará que a estrutura
do programa é muito similar àquela introduzida para problemas em uma dimensão. Uma breve discussão de várias
funções é fornecida a seguir.

Programa Principal: heat2D.m


O programa principal é dado no arquivo heat2D.m. A estrutura do programa de elementos finitos consiste nos
seguintes passos:
- pré-processamento
- determinação das matrizes de condutância do elemento, vetores fonte nodais do elemento e sua montagem
- adicionar contribuição a partir das fontes pontuais e do vetor fluxo de contorno nodal
- solução do sistema de equações algébricas
- pós-processamento
24 CAPÍTULO DOZE

Pré-processamento: preprocessor.m
Na fase de pré-processamento, o arquivo de entrada (input_file), que define as propriedades do material, dados de
malha, inicializações de vetor e matrizes, condições essenciais e naturais, fontes pontuais e a saída requerida, é defi-
nido pelo usuário. Na implantação fornecida aqui, os fluxos são prescritos ao longo das bordas do elemento e são
definidos pelos valores nodais interpolados usando funções de forma. O arranjo n_bc é usado para a estrutura de
fluxos de dados. Para o problema de condução de calor dado no Exemplo 8.1 com 16 elementos quadrilaterais (veja
Figura 8.9), o arranjo n_bc é definido como mostrado a seguir

O número de colunas corresponde ao número de bordas (especificado por nbe) sobre o contorno natural; a primeira e
a segunda linhas indicam o primeiro e o segundo número de nós que definem a borda do elemento; a terceira e quarta
linhas correspondem aos respectivos valores de fluxos nodais. Observe que uma descontinuidade nos contornos dos
elementos poderia ser prescrita. Os arquivos de entrada para as malhas do elemento 1 e do elemento 64 são dadas
no site da web.
Na fase de pré-processamento, a malha finita é gerada e os arranjos de trabalho IEN e ID e LM são definidos. A
função de geração de malha mesh2d utiliza a função integrada no MATLAB linspace (veja Capítulo 1) para bisseção
de linhas.
Programação de Elementos Finitos com MATLAB 25
24 CAPÍTULO DOZE

Pré-processamento: preprocessor.m
Na fase de pré-processamento, o arquivo de entrada (input_file), que define as propriedades do material, dados de
malha, inicializações de vetor e matrizes, condições essenciais e naturais, fontes pontuais e a saída requerida, é defi-
nido pelo usuário. Na implantação fornecida aqui, os fluxos são prescritos ao longo das bordas do elemento e são
definidos pelos valores nodais interpolados usando funções de forma. O arranjo n_bc é usado para a estrutura de
fluxos de dados. Para o problema de condução de calor dado no Exemplo 8.1 com 16 elementos quadrilaterais (veja
Figura 8.9), o arranjo n_bc é definido como mostrado a seguir

O número de colunas corresponde ao número de bordas (especificado por nbe) sobre o contorno natural; a primeira e
a segunda linhas indicam o primeiro e o segundo número de nós que definem a borda do elemento; a terceira e quarta
linhas correspondem aos respectivos valores de fluxos nodais. Observe que uma descontinuidade nos contornos dos
elementos poderia ser prescrita. Os arquivos de entrada para as malhas do elemento 1 e do elemento 64 são dadas
no site da web.
Na fase de pré-processamento, a malha finita é gerada e os arranjos de trabalho IEN e ID e LM são definidos. A
função de geração de malha mesh2d utiliza a função integrada no MATLAB linspace (veja Capítulo 1) para bisseção
de linhas.
Programação de Elementos Finitos com MATLAB 27

Fontes pontuais e função fluxo de contorno nodal: src_and_flux.m


Tal função adiciona as contribuições das fontes pontuais P (prescrita somente nos nós) e o vetor fluxo de contorno
ao vetor fluxo global. O arranjo ID é usado para relacionar as numerações dos nós inicial e reordenada. Para calcular
o vetor fluxo de contorno nodal, a função é executada em loop sobre todas as bordas de contorno nbe e realiza uma
integração em uma dimensão usando a quadratura de Gauss. A integração é realizada pela transformação da borda de
contorno sobre o domínio de referência. O vetor fluxo de contorno é então montado para o vetor fluxo nodal global
usando o arranjo ID.

O pós-processamento: postprocessor.m
O pós-processamento é a fase final no método dos elementos finitos. Os resultados estão traçados nas Figuras 8.10
a 8.12 no Capítulo 8.
28 CAPÍTULO DOZE
Programação de Elementos Finitos com MATLAB 29

Funções que são idênticas àquelas do Capítulo 5:


setup_ID_LM.m, assembly.m, solvedr.m.
30 CAPÍTULO DOZE

Funções fornecidas no Capítulo 4: Nmatrix1D.m, Bmatrix1D.m, gauss.m


Funções fornecidas no Capítulo 2: solvedr.m

12.6 Programa de Elementos Finitos para Problemas de Elasticidade em Bidimensionais


com o MATLAB
Neste capítulo, introduzimos o programa de elementos finitos para problemas de elasticidade linear em duas dimen-
sões. Somente o elemento quadrilateral com quatro nós é implantado. Nos problemas 9.6 e 9.7, no Capítulo 9, os
estudantes têm a tarefa de implantar os elementos triangulares com 3 e 6 nós.

Programa principal: elasticity2D.m


O programa principal é dado no arquivo elasticity2D.m. A estrutura do programa de elementos finitos consiste
nos seguintes passos:
- pré-processamento
- avaliação das matrizes de rigidez do elemento e dos vetores força de campo do elemento e montagem
- montagem das forças pontuais (somente forças pontuais definidas nos nós)
- avaliação e montagem do vetor força no contorno nodal
- solução do sistema de equações algébricas
- pós-processamento
Programação de Elementos Finitos com MATLAB 31

Arquivo de entrada: input_file.m


Os dados para a condição de contorno natural são fornecidos no arranjo n_bc. Por exemplo, para a malha de 16
elementos no Exemplo 9.3 no Capítulo 9, o arranjo n_bc é dado como

O número de colunas indica o número de bordas posicionadas sobre o contorno natural (especificado por nbe). A
primeira e a segunda linhas indicam o primeiro e o segundo nós que definem a borda de um elemento. A terceira e
a quarta linhas correspondem aos valores apropriados de tração nas direções x e y no primeiro nó, respectivamente,
enquanto a quinta e sexta linhas correspondem às trações nas direções x e y especificadas no segundo nó. Os arquivos
de entrada para as malhas com 1 e 64 elementos são dados no programa no site da web.
32 CAPÍTULO DOZE

Renumeração de nós: setup_ID_LM.m


A geração do arranjo ID é similar àquela no problema de condução de calor, exceto que nd define o número de
graus de liberdade sobre o contorno essencial. O arranjo LM é um indicador para os graus de liberdade da renu-
meração. Para isto, tratamos cada nó como sendo um bloco que consiste em dois graus de liberdade. Definimos
um apontador, indicado como blk para o início de cada bloco e o loop sobre todos os graus de liberdade ndof
naquele bloco.

Função de rigidez e forças do elemento: elast2Delem.m


A função elast2Delem.m para a integração numérica da matriz de rigidez do elemento e do vetor força de campo
nodal do elemento permanece a mesma que para o programa computacional de condução de calor, exceto para as
funções de forma NmatElast2D e suas derivadas BmatElast2D.
Programação de Elementos Finitos com MATLAB 33

Função vetor forças pontuais e força no contorno nodal: point_and_trac.m


A função executa loops sobre as bordas nbe no contorno essencial e realiza uma integração em uma dimensão
usando a quadratura de Gauss. A integração é realizada pela transformação da borda no contorno para o sistema de
coordenadas matriz x Ì [0, 1]. O vetor força de contorno nodal é então montado para o vetor força global usando
o arranjo ID. Similarmente, forças pontuais definidas nos nós são montadas no vetor força nodal global usando
o arranjo ID.
34 CAPÍTULO DOZE

Pós-processamento: postprocessor.m
A função pós-processamento chama primeiramente a função displacements para traçar a configuração deformada
baseada nos deslocamentos nodais. O usuário estabelece um fator de escala no arquivo de entrada para representar
em escala a deformação como mostrado na Figura 9.13, no Capítulo 9.
Para obter o contorno ou as bordas dos gráficos das tensões, estas são calculadas nos nós dos elementos e então a
média é feita sobre os elementos conectados ao nó. Alternativamente, as tensões podem ser calculadas nos pontos de
Gauss onde elas são mais precisas e, em seguida, interpoladas nos nós. Frequentemente, o usuário está interessado
não somente nas componentes individuais da tensão, mas em alguns valores de tensão global, tais como a tensão de
Von Mises. No caso de tensão no plano, a tensão de Von Mises é dada por , em que 1 e 2 são

as tensões principais dadas por . A Figura 9.14, no Capítulo 9, mostra o contorno

da tensão xx para a malha de 64 elementos.


Programação de Elementos Finitos com MATLAB 35
36 CAPÍTULO DOZE
Programação de Elementos Finitos com MATLAB 37

Funções que são idênticas àquelas no Capítulo 8:


preprocessor.m, mesh2d.m, plotmesh.m, assembly.m, solvedr.m.

12.7 Programa de Elementos Finitos com MATLAB para Vigas em Duas Dimensões
Nesta seção, descrevemos um programa de elementos finitos para vigas em duas dimensões. A estrutura do programa
é muito similar àquela introduzida para problemas em uma dimensão, na Seção 12.3, com uma diferença fundamental,
usar dois graus de liberdade por nó. Uma breve descrição das várias funções é fornecida a seguir.

beam.m
O programa principal é dado no arquivo beam.m. Pode-se ver que ele é quase idêntico àquele na Seção 12.3.

preprocessor.m
A função preprocessor lê o arquivo de entrada e gera os arranjos ID e LM. A estrutura do arranjo ID é idêntica àquela
para o problema de campo escalar (veja, por exemplo, o programa no Capítulo 5); o arranjo LM relaciona elementos
(colunas) ao número de equações após a renumeração. O arranjo LM para Exemplo do Problema 10.1 é
38 CAPÍTULO DOZE

input_file_example10_1.m
A área de seção transversal é prescrita nos nós e interpolada usando funções de forma lineares. O módulo de Young
e as forças de campo são considerados constantes dentro de um elemento; estes são prescritos para cada elemento.
As condições de contorno essencial e natural são prescritas para cada grau de liberdade sobre os contornos natural
e essencial, respectivamente.
Programação de Elementos Finitos com MATLAB 39
40 CAPÍTULO DOZE

Funções que são idênticas àquelas no Capítulo 5 são: assembly.m, solvedr.m, gauss.m.

Problemas–Álgebra Linear
Problema 1.1
Escreva um programa em MATLAB para gerar um conjunto de equações algébricas lineares Ax = b em que A é
uma matriz n x n dada por
Programação de Elementos Finitos com MATLAB 41

e calcule A . Em seguida, verifique o quão perto B  A A corresponde a I. Faça isso para n  5, 10, 1.000 e para
1 1

um valor maior que você escolher. A precisão do produto calculado pode ser comparada aos resultados corretos pelo
cálculo da norma do erro dada por

Repita este procedimento com a matriz A definida por

Repita esse procedimento para n  3, 4, 5, 6, 7.... Pare quando o erro for maior do que um, visto que a solução é,
neste caso, sem sentido.
Essa equação é da forma que iremos ver nas equações em elementos finitos. Elas podem ser resolvidas com
precisão, mesmo para sistemas muito grandes para os quais não é suscetível a erros de arredondamento. Elas são
conhecidas como bem condicionadas. A segunda matriz é chamada de matriz de Hilbert. Ela é um exemplo de uma
matriz extremamente mal condicionada.

Problema 1.2
Considere um sistema de equações lineares

a) Escreva o sistema de equações na notação matricial Ax  b e resolva para a incógnita x usando o MATLAB.
b) Suponha que impomos uma restrição adicional sobre a solução g(x)  x1  x2  x  1  0. Usando o MATLAB,
determine um novo vetor xnovo de forma que ele satisfará exatamente a equação de restrição g(xnovo) e minimizará
o erro err (xnovo)  (Axnovo  b)T (Axnovo  b).

Problema 1.3
Considere as seguintes matrizes simétricas K:

Em que k, k1, k2 são constantes positivas.


a) Verifique se essas três matrizes são definidas positivas. Lembre-se de que se para qualquer vetor x1 0 temos
xTKx  0, então a matriz K é chamada de Simétrica Positiva Definida (SPD). Se, por outro lado, xTKx3 0 para
qualquer vetor x1 0, então a matriz K é simétrica semipositiva definida. Escolha uma das matrizes semipositivas
definidas apresentadas anteriormente e mostre que, para qualquer vetor f do segundo membro, o sistema de equa-
ções Kd  f não possui uma única solução.
b) Verifique os seus resultados pelo cálculo dos eigenvalores para as três matrizes dadas.