Vibrações lineares

77
ALEXANDRE DA SILVA GALVÃO ESTUDO DIRIGIDO Rio de Janeiro, 1 o semestre de 2001 ANÁLISE DE SISTEMAS RETICULADOS ESBELTOS PUC - RIO PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO DEPARTAMENTO DE ENGENHARIA CIVIL Co-orientador: Ricardo Azoubel da Mota Silveira ESCOLA DE MINAS / UFOP Orientador: Paulo Batista Gonçalves PUC - RIO

description

Estudo dirigido sobre Vibrações Livres em Estruturas reticuladas.

Transcript of Vibrações lineares

Page 1: Vibrações lineares

ALEXANDRE DA SILVA GALVÃO

ESTUDO DIRIGIDO

Rio de Janeiro, 1o semestre de 2001

ANÁLISE DE SISTEMAS RETICULADOS ESBELTOS

PUC -RIOPONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO DE JANEIRO

DEPARTAMENTO DE ENGENHARIA CIVIL

Co-orientador: Ricardo Azoubel da Mota SilveiraESCOLA DE MINAS / UFOP

Orientador: Paulo Batista GonçalvesPUC - RIO

Page 2: Vibrações lineares

2

1INTRODU��O

1.1 – OBJETIVO DO TRABALHO

O programa computacional que servirá de base ao presente trabalho começou a

ser desenvolvido por Silveira (1995) que introduziu rotinas capazes de efetuar análises

lineares e não-lineares (não-linearidade geométrica) de sistemas estruturais formados

por elementos de pórtico plano. Neste programa, para as análises não-lineares, utilizou-

se uma formulação de pórtico plano baseada no trabalho de Alves (1993), foram

também dadas ao usuário opções de estratégias de solução não-linear (incremento de

carga e de iteração) e impressão de resultados (arquivos de pós-processamento).

Galvão (2000) implementou e estudou diferentes formulações geometricamente

não-lineares para pórticos planos, fazendo um estudo comparativo dessas formulações

através de vários exemplos numéricos.

Alem de possibilitar a análise de estruturas reticuladas planas com forte não-

linearidade como, por exemplo, o pórtico em L (Galvão et.al, 2000), as citadas

implementações permitiram que Gentil (2000), em sua dissertação de mestrado, fizesse

um estudo detalhado de diferentes estratégias de solução não-linear.

A continuidade natural do presente trabalho será a expansão do programa para

realizar análises linear estática e linear dinâmica de treliças e pórticos (2D e 3D), e

análise não-linear estática e não-linear dinâmica de treliças e pórticos (2D e 3D);

Por hora, o objetivo é acrescentar ao programa as seguintes opções:

(i) análise linear estática:

(i.i) elementos de treliça 2D e 3D;

(i.ii) elementos de pórtico 2D e 3D.

(ii) cálculo das freqüências naturais e os respectivos modos de vibração:

(i.i) elementos de treliça 2D e 3D;

(i.ii) elementos de pórtico 2D e 3D.

Page 3: Vibrações lineares

3

1.2 – PROGRAMA COMPUTACIONAL

Nesta se��o ser� apresentado, de forma esquem�tica, o programa principal que �

respons�vel pelo gerenciamento das diversas subrotinas implementadas. As subrotinas

referentes ao presente trabalho ser�o mostradas detalhadamente no Cap�tulo 3.

A organiza��o do programa pode ser resumida conforme o esquema apresentado

pela Figura 1.1.

FIM

SA�DA de RESULTADOS(P�s-processador)

AN�LISE do PROBLEMA(Subrotina SOLUC)

ENTRADA de DADOSIN�CIO

SOLU��O N�O-LINEAR(Subrotina SOLNL)

P�rtico

SOLU��O LINEAR(Subrotina SOLL)

Est�tica-treli�a 2D-treli�a 3D-p�rtico 2D-p�rtico 3D

Din�mica-treli�a 2D-treli�a 3D-p�rtico 2D-p�rtico 3D

Figura 1.1 – Programa computacional.

O primeiro procedimento realizado pelo programa principal � a leitura do primeiro

arquivo de dados de entrada. Esses dados definem a geometria do modelo estrutural

com o n�mero de pontos nodais, de elementos e condi��es de contorno; as propriedades

f�sicas dos materiais que comp�em a estrutura; e o carregamento externo atuante.

Caso se deseje realizar uma an�lise linear est�tica, os passos seguintes s�o a

montagem do vetor de for�as externas F e da matriz de rigidez linear KL, podendo

assim calcular os deslocamentos nodais atrav�s de KL u = F. Para a an�lise linear

din�mica, deve-se obter ainda a matriz de massa Km, e resolver o problema de auto-

valor ( KL - 2Km )u, obtendo assim as freq��ncias naturais e os modos de vibra��o da

estrutura.

Page 4: Vibrações lineares

4

Caso a análise não-linear seja escolhida pelo usuário, o passo seguinte é a leitura

dos dados de entrada complementares, onde estão as informações necessárias a esse tipo

de análise, como, por exemplo, a formulação não-linear a ser empregada, a estratégia de

solução, o valor inicial do parâmetro de carga, o número de incrementos, o critério de

convergência, o número máximo de iterações por incremento, e outros parâmetros

relativos à estratégia de solução escolhida.

Após a leitura dos dados é chamada a subrotina LOADF para montagem do vetor

de cargas de referência Fr. Entra-se então no processo incremental-iterativo de solução,

que é resumido a seguir:

chama a subrotina MATRIG para montar a matriz de rigidez K, de acordo com a

formulação escolhida, e obtém-se os deslocamentos nodais tangenciais Tu ;

calcula em SCALUP a solução predita, 00 ue , de acordo com a estratégia de

incremento de carga escolhida;

corrige a solução predita pelo processo iterativo na subrotina ITER;

em NEXINC são feitas as atualizações dos parâmetros para o próximo incremento

de carga;

se o número de passos de carga é menor do que o desejado recomeça-se o processo.

Os resultados são então apresentados em arquivos de saída. O arquivo gerado com

extensão (.dat) pode ser lido, por exemplo, pelo software GRAPHER, que possibilita a

impressão das diversas curvas necessárias à visualização da análise; o arquivo neutro

DEPOS pode ser utilizado no pós-processador gráfico, implementado em linguagem

FORTRAN por Silveira (1995), para a visualização das configurações deformadas do

sistema estrutural analisado; o arquivo de saída RELAT.S contém informações sobre as

ocorrências do processo de solução.

Page 5: Vibrações lineares

5

1.3 – ORGANIZA��O DO TRABALHO

No Capítulo 2 serão apresentados os elementos finitos de treliça e de pórtico,

planos e espaciais. Neste Capítulo serão definidas as matrizes de rigidez, de massa e de

rotação para cada tipo de elemento.

As implementações computacionais do presente trabalho serão abordadas no

Capítulo 3, com um melhor detalhamento das principais subrotinas.

No Capítulo 4 serão analisados alguns exemplos numéricos encontrados na

literatura para validar as implementações discutidas no Capítulo 3.

Page 6: Vibrações lineares

6

2ELEMENTOS FINITOS

2.1 – INTRODU��O

Com vista em estruturas reticuladas de comportamento linear-elástico, dois tipos

de problemas serão abordados neste trabalho:

i) Análise Estática: a solução desse tipo de problema consiste em resolver

um sistema de NGL equações, onde NGL é o número de graus de liberdade do sistema

estrutural em questão. Para haver equilíbrio estático numa estrutura, a soma das forças

externas Fi e o dos esforços internos Fii, correspondentes ao mesmo grau de liberdade

genérico i, devem se anular. No método da rigidez o problema é colocado da seguinte

forma:

uKF L (1)

onde F é o vetor de forças externas, KL é a matriz de rigidez linear e u são os

deslocamentos nodais a serem obtidos.

ii) Análise Dinâmica: no presente trabalho pretende-se obter as freqüências

naturais i e os modos de vibração correspondentes ui para os diversos tipos de

elementos propostos. Para isso, basta resolver um problema de vibração livre do tipo:

0uMKL )-( 2 (2)

que é um problema de auto-valor. Para esse problema, alem da matriz de rigidez KL,

deve-se definir a matriz de massa M da estrutura analisada.

Para permitir que um sistema estrutural genérico seja resolvido deve-se definir à

priori as matrizes de rigidez e de massa elementares num sistema local. As matrizes do

sistema são montadas fazendo-se a somatória das matrizes elementares, devidamente

transformadas para o sistema global através da matriz de rotação R, e levando-se em

conta as restrições de cada problema.

Page 7: Vibrações lineares

7

Uma forma de se obter as componentes da matriz de rigidez linear de um

elemento finito através da energia interna de deformação é através da expressão:

ji

L2

L uuUk

ij

(3)

Sendo que UL é a parcela linear da energia de deformações internas em termos dos

deslocamentos nodais ui. Isto é feito obtendo-se os deslocamentos em função dos

deslocamentos nodais através de funções de interpolação.

A matriz de massa consistente pode ser obtida através da seguinte expressão:

dvolT

volffM (4)

onde é a densidade de massa do material e f é a matriz que contém as funções de

interpolação.

A seguir serão apresentadas as matrizes de rigidez, de massa e de rotação para

cada elemento finito considerado no estudo.

2.2 – TRELI�A PLANA

A Figura 2.1 ilustra o elemento de treliça plana, destacando os seus 6 graus de

liberdade.

34

2

yx

Figura 2.1: elemento de treliça plana.

Para aproximar os deslocamentos desse elemento são utilizadas funções de forma

lineares, que são agrupadas em f da seguinte maneira:

x0x-L0

0x0x-Lf(5)

Page 8: Vibrações lineares

8

2.2.1 – Matriz de Rigidez

0000010100000101

LEA

LK

(6)

2.2.2 – Matriz de Massa

2010020110200102

6ALM

(7)

2.3 – P�RTICO PLANO

O elemento de pórtico plano é sujeito a deformações axiais e de flexão. Os 6 graus

de liberdade desse elemento são mostrados na Figura 2.2.

y x

Figura 2.2: elemento de pórtico plano.

Para que haja continuidade de deslocamentos e rotação nos bordos dos elementos

adjacentes, é suficiente considerar, para aproximar o deslocamento axial, uma função

linear, enquanto para a componente transversal deve ser usada uma função do terceiro

grau.

2L

3x

L

2x-3L

32x-2L

23x02L

3x+

L

22x-x3L

32x+2L

23x-10

00L

x00

L

x-1

f

(8)

Page 9: Vibrações lineares

9

2.3.1 – Matriz de Rigidez

L

EI4

2L

EI63L

EI12

00L

EAS

L

EI22L

EI60

L

EI4

2L

EI63L

EI1202L

EI63L

EI12

00L

EA00

L

EA

imétricaLK

(9)

2.3.2 – Matriz de Massa

2L4

L2256100401S

23L-3L102L4

213L-4502L2561

007000140

420AL

imétricaM

(10)

Page 10: Vibrações lineares

10

2.4 – TRELI�A ESPACIAL

O elemento de treliça espacial apresenta 6 graus de liberdade conforme está

mostrado na Figura 2.3.

1

4Y

X

Z

xy

z

2

3

5

6

Figura 2.3: elemento de treliça espacial.

Assim como foi feito para o elemento finito de treliça plana, para o elemento de

treliça espacial são utilizadas funções de forma lineares, que são agrupadas em f da

seguinte maneira:

L

x00

L

x-100

0L

x00

L

x-10

00L

x00

L

x-1

f

(10)

2.4.1 – Matriz de Rigidez

000000000000001001000000000000001001

LEA

LK

(11)

Page 11: Vibrações lineares

11

2.4.2 – Matriz de Massa

202002S100201002001002

6AL

imétricaM

(12)

2.5 – P�RTICO ESPACIAL

O elemento de pórtico espacial possui graus de liberdade axiais, flexionais e de

rotação em torno do eixo longitudinal, num total de 12 graus de liberdade conforme

ilustrado na Figura 2.4.

1

Y

X

Z

xy

z

2

34

5

6

108

9

11

12

7

Figura 2.4: elemento de pórtico espacial.

Da mesma forma que para o elemento de pórtico plano, será usada uma função

linear para os deslocamentos axiais e uma função do terceiro grau para as componentes

transversais. É conveniente agrupar as funções lineares que aproximam os

deslocamentos de torção em um vetor fT.

Page 12: Vibrações lineares

12

Tf

f2f1f

00x/L00000x/L-1000

(13)

onde:

02L

3x-

L

22xx-03L

32x+2L

23x-100

2L

3x+

L

22x-x0003L

32x+2L

23x-10

00000L

x-1

f1

(14)

02L

3x

L

2x03L

32x-2L

23x00

2L

3x

L

2x-0003L

32x-2L

23x0

00000L

x

2f

(15)

A matriz de massa do elemento de pórtico plano pode ser obtida pela seguinte

expressão: L0 T

TT

L0

T dxJdxA ffffM .

Page 13: Vibrações lineares

13

2.5.1 – Matriz de Rigidez

L

EIz4

0L

EIy4

00L

GIx

02L

EIy60

3L

EIy12

2L

EIz6-000

3L

EIz12

00000L

EA

L

EIz2000

2L

EIz60

L

EIz4Simétrica

0L

EIy20

2L

EIy6000

L

EIy4

00L

GIx00000

L

GIx

02L

EIy60

3L

EIy12-000

2L

EIy60

3L

EIy12

2L

EIz6000

3L

EIz120

2L

EIz6000

3L

EIz12

00000L

EA00000

L

EA

LK

(16)

Page 14: Vibrações lineares

14

2.5.2 – Matriz de Massa

24L

024L

00A

140Ix

0L220156

22L-000156

00000140

23L-0003L1024LSimétrica

023L013L-00024L

00A

70Ix00000

A

140Ix

0L13054000L220156

13L-00045022L000156

000007000000401

420

ALM

(17)

2.6 – ROTA��O DOS ELEMENTOS

Como já dito acima, para se fazer transformações entre os sistemas locais de cada

elemento e o sistema global da estrutura é necessário se definir para cada elemento da

estrutura a sua matriz de rotação.

2.6.1 – Rota��o de Elementos Finitos Planos

A matriz de rotação de elementos planos pode ser obtida de forma trivial

conforme ilustra a Figura 2.5.

Y

X

v1

y x

u1

v2

u2

y x

y

x

Figura 2.5: Rotação de eixos no plano.

Page 15: Vibrações lineares

15

Assim, tem-se de forma geral:

Rs0

0RsR(18)

sendo os cossenos diretores:

cosCx senCy (19)

que podem ser colocados em função das coordenadas nodais como:

Lxx

Cx 12 L

yyCy 12

(20)

onde xi e yi são as coordenadas do nó i e L é o comprimento do elemento finito.

tem-se para um elemento de treliça plana:

xCCyCyCxsR

(21)

Para um elemento de pórtico plano deve-se incluir a parcela referente às rotações

que, por serem planas, não sofrerão rotação, tem-se, portanto:

1000x CCy0CyCx

sR(22)

Page 16: Vibrações lineares

16

2.6.2 – Rota��o de Elementos Finitos Espaciais

A Figura 2.6 mostra que o eixo local x pode ser definido pelos dois �ngulos e ,

entretanto, para o elemento ser totalmente determinado no espa�o � necess�rio se saber

a “rota��o” dos eixos transversais y e z em torno do eixo axial x.

Y

X

Z

y

x N1

N2

y

z

x

z

Figura 2.6: Rota��o do eixo x no espa�o.

A seguir � mostrada a forma de gerar a matriz de rota��o para elementos

reticulados n�o verticais, sugerida por Weaver e Gere (1980).

Inicialmente � calculada a matriz de rota��o para um elemento rotacionado de

em torno do eixo Y, cujo sistema local � o formado por x,y e z como mostra a Figura

2.7.

Y

X

Z

x

y

z

Figura 2.7.rota��o em torno de Y.

Page 17: Vibrações lineares

17

Fazendo-se:

22 CyCxCxz (23)

tem-se:

CxzCxcos

CxzCzsen

(24)

e a matriz de rotação Rsé dada por:

CxzCx0

CxzCz-

010CxzCz0

CxzCx

sR

(25)

Em seguida, é calculada a matriz de rotação, para o elemento rotacionado de em

torno do eixo z,como mostra a Figura 2.8.

Y

x

y

z

x

y

z

Figura 2.8:rotação em torno de z.

Sabendo-se que:

Cxzcos e Cysen (26)

a matriz de rotação Rsé dada por:

1000xzCCy0Cy xzC

sR(27)

Page 18: Vibrações lineares

18

Deve-se, agora considerar uma rotação em torno do eixo axial x,como mostra a Figura

2.9.

y

z

y

z

z

Figura 2.9:rotação em torno de x.

Sabendo-se que:

cosC e senS (28)

a matriz de rotação Rsé dada por:

CS-0SC0001

sR(29)

Finalmente, a matriz de rotação de um elemento de pórtico espacial não-vertical é

dada por:

Rs0000Rs0000Rs0000Rs

R

(30)

onde Rs = RsRsRsou seja:

Cxz

CxCCyCzSCxzS-

Cxz

CzCCxCySCxz

CxSCyCzCCCxz

Cxz

CzSCxCyCCzCy Cx

Rs

(31)

Page 19: Vibrações lineares

19

Se Cxz = 0 o elemento é vertical, ou seja, os eixos x e Y são paralelos, a matriz de

rotação, conforme mostra a Figura 2.10, é dada por:

C0SSS0CS0S0

Rs(32)

onde S = Sinal de (y2-y1).

Y

X

Z z

y

N1

N2

x

Figura 2.10: elemento vertical.

A matriz de rotação para um elemento de treliça é obtida através de:

Rs0

0RsR(33)

Como um elemento de treliça só está sujeito à esforços e deslocamentos axiais, a

orientação dos eixos da seção transversal não importa, assim, Rs através da expressão

(31) ou (32), assumindo-se = 0.

Page 20: Vibrações lineares

20

3PROGRAMA COMPUTACIONAL

3.1 – INTRODU��O

No Cap�tulo 1 foi apresentado um esquema geral do programa utilizado como

base do trabalho. A Figura 3.1 ilustra mais uma vez esse programa.

Neste cap�tulo pretende-se detalhar melhor as subrotinas de solu��o linear

desenvolvidos no presente trabalho.

LEITURA de DADOS-1

MONTAGEM da MATRIZ de RIGIDEZ

LINEAR KL

(subrotina STIFK0)

C�LCULO dos DESLOCAMENTOS

NODAIS u

ARQUIVOS de SA�DA

Solu��o Linear Solu��o n�o-linear

LEITURA de DADOS-2

MONTAGEM da MATRIZ de RIGIDEZ K

(Subrotina MATRIG)

C�LCULO de e u(Subrotina SCALUP)

0 0

PROCESSO ITERATIVO(Subrotina ITER)

C�LCULO DE PAR�METROS do PR�XIMO INCREMENTO

(Subrotina NEXINC)

Proc

esso

incr

emen

tali

tera

tivo

MONTAGEM do VETOR de CARGAS de REFER�NCIA Fr

MONTAGEM do VETOR de FOR�AS EXTERNAS F

(subrotina LOADF)

A

Solução Estática

Solução Dinâmica

MONTAGEM da MATRIZ de MASSA Km

C�LCULOdas

FREQUENCIAS NATURAIS

e MODOS de

VIBRA��O

Figura 3.1 – Programa principal.

Page 21: Vibrações lineares

21

3.2 – SUBROTINA SOLL

Essa subrotina é responsável pelo gerenciamento dos algoritmos de solução linear.

Monta a matriz de rigidez global do sistema através da subrotina STIFK0.

Se a análise for linear estática:

monta o vetor de carregamento externo.

Calcula os deslocamentos nodais resolvendo o sistema KL u = F através

de fatorização de Crout.

calcula os esforços em cada barra e imprime no arquivo de saída,

subrotina STRESF.

Se a análise for de vibração livre:

monta a matriz de massa global do sistema, subrotina MATMAS.

calcula as freqüências naturais e os modos de vibração do sistema,

resolvendo o problema de autovalor ( KL -2Km )u, subrotina EIGG.

Imprime as freqüências naturais e os modos de vibração no arquivo de

saída.

Retorna ao programa principal.

3.3 – SUBROTINA STIFK0

Essa subrotina é responsável pelo montagem da matriz de rigidez global do

sistema.

Monta a matriz de rigidez de cada elemento:

Calcula a matriz de rotação do elemento (Equações 6, 9, 11 ou 16).

Calcula a matriz de rigidez do elemento no sistema local (Equações 18,

30 ou 33).

Calcula a matriz de rigidez do elemento no sistema global através da

matriz de rotação: Kg = Rt K R.

Armazena a matriz elementar Kg na matriz de rigidez global do sistema.

Fim da subrotina STIFK0.

Page 22: Vibrações lineares

22

3.4 – SUBROTINA STRESF

Subrotina para calcular e imprimir as forcas resultantes nos elementos.

Elementos de treliça (2D ou 3D):

Para cada elemento da estrutura:

Identifica a numeração do grau de liberdade inicial de cada nó.

Calcula os cossenos diretores da barra.

Obtém os deslocamentos em coordenadas globais

Calcula os esforços normais na barra.

Calcula as reações globais nos nós.

Imprime no arquivo de saída os esforços axiais e as reações nodais.

Elementos de pórtico (2D e 3D)

Para cada elemento da estrutura:

Identifica a numeração do grau de liberdade inicial de cada nó.

Calcula a sub-matriz de transformação Rs da barra.

Obtém os deslocamentos em coordenadas globais

Calcula os deslocamentos no sistema local através de Rs.

Obtém a matriz de rigidez local da barra.

Calcula os esforços locais na barra.

Obtém os esforços em coordenadas globais através de Rs.

Calcula as reações globais nos nós.

Imprime no arquivo de saída os esforços nas barras e as reações nodais.

Fim da subrotina STRESF.

3.5 – SUBROTINA MATMAS

Essa subrotina retorna a matriz de massa do sistema.

Para cada elemento da estrutura:

Identifica a numeração do grau de liberdade inicial de cada nó.

Calcula a matriz de rotação.

Calcula a matriz de massa no sistema local

Através da matriz de rotação do elemento calcula a matriz de massa no

sistema global.

Armazena na matriz de massa global do sistema.

Page 23: Vibrações lineares

23

Fim da subrotina MATMAS.

3.6 – SUBROTINA EIGG

Subrotina para o cálculo de autovalores e autovetores.

Inverte a matriz de massa usando o método de Choleski.

Calcula A = Km-1 KL

Calcular os autovalores e autovetores de A pelo método de Jacobi

Fim da subrotina EIGG.

As subrotinas em código FORTRAN serão apresentadas nos APÊNDICES.

Page 24: Vibrações lineares

24

4EXEMPLOS NUM�RICOS

4.1 – INTRODU��O

Para avaliar a eficiência das implementações computacionais, neste capítulo serão

analisados alguns problemas estruturais encontrados na literatura.

Para avaliar a implementação da solução linear estática, na Seção 4.2 será

analisado um exemplo para cada tipo de elemento finito implementado.

O mesmo procedimento é feito na Seção 4.3 para avaliar a solução da análise de

vibração livre implementada.

4.2 – AN�LISES EST�TICAS

4.2.1 – Treli�a plana

O primeiro exemplo analisado é a treliça plana mostrada na Figura 4.1.

Os resultados obtidos no presente trabalho são apresentados na Figura 4.2 e

concordam exatamente com os obtidos numericamente por Smith e Griffiths (1999).

1

2 3

4

56

7

8 9

10

1

2

3

5 6

4

4 4 4

3 10

E = 2 x 10A = 1.0

5

Figura 4.1: treliça plana.

Page 25: Vibrações lineares

25

Figura 4.2: Treliça plana: resultados.

Page 26: Vibrações lineares

26

4.2.2 – P�rtico Plano

A análise do pórtico plano da Figura 4.3 no presente trabalho apresentou

exatamente os mesmos resultados apresentados por Brebbia e Ferrante(1986) e são

mostrados na Figura 4.4

E = 21000000A1 = A3 = 400A2 = A4 = A5 = A6 = A7 = 200I1 = I3 = 6666I2 = I4 = I5 = I6 = I7 = 13333

11

2 430000

40000 40000

1000 1000

250

6007

3 6

5 82 3

4 5 6 7

Figura 4.3: pórtico plano.

Page 27: Vibrações lineares

27

Figura 4.4: pórtico plano: resultados.

4.2.3 Treliça espacial

A treliça espacial ilustrada na Figura 4.5 apresentou no presente trabalho os

resultados mostrados na Figura 4.6, que são exatamente iguais aos obtidos por Smith e

Griffiths (1999).

(0,0,0)

E = 5 x 10A = 1.0

5

z

x

y

Q

42

5

1

3

1

23

4

(3.5,2,0)(4,1,0)

(1.25,3,0)

(2,1.5,3)

(20,-20,30)

Figura 4.5: treliça espacial.

Page 28: Vibrações lineares

28

Figura 4.5: treliça espacial: resultados.

Page 29: Vibrações lineares

29

4.2.4 Pórtico espacial

A análise do pórtico espacial mostrado na Figura 4.6 apresentou no presente

trabalho os resultados mostrados na Figura 4.7, que são iguais aos obtidos por Smith e

Griffiths (1999).

E = 1000000G = 1000000A = 4.0L = 5.0Ix = 0.3Iy = 1.0Iz = 0.3

1

2

4

32

3

100

1

1 = 002 = 0 0

3 = 900

y

xz

L

Figura 4.6: pórtico espacial.

Figura 4.7: pórtico espacial: resultados.

Page 30: Vibrações lineares

30

4.3 – AN�LISES DE VIBRA��O LIVRE

Nos exemplos seguintes, foi admitido um erro limite igual a 10-12 no cálculo dos

autovalores pelo método de Jacobi.

4.3.1 – Treli�a plana

O primeiro exemplo analisado é a treliça plana mostrada na Figura 4.8. A Figura 4.9

mostra as freqüências naturais e os modos de vibração encontrados. Esses resultados

coincidem com os obtidos por Mario Paz (1997).

E = 30000000A = 10 = 0.01

1 3

60

2

60

12

3

Figura 4.8: Treliça plana.

Figura 4.9: Treliça plana: resultados.

Page 31: Vibrações lineares

31

4.3.2 – P�rtico plano

O pórtico plano da Figura 4.10 foi analisado e as freqüências naturais e os modos

de vibração encontrados são mostrados na Figura 4.11. Esses resultados são bem

próximos dos obtidos por Brebbia e Ferrante (1986).

E = 2500000 = 0.0025A1 = A2 = A5 = A6 = 100I1 = I2 = I5 = I6 = 833.33A3 = A4 = 150I3 = I4 = 2812.5

11

2

4

7

3

6

52

3 45

6

6

4

Figura 4.10: Pórtico plano.

Page 32: Vibrações lineares

32

Page 33: Vibrações lineares

33

Figura 4.11: Pórtico plano: resultados.

Page 34: Vibrações lineares

34

4.3.3 – Treli�a espacial

O próximo exemplo analisado é a treliça espacial mostrada na Figura 4.12. A

Figura 4.13 mostra as freqüências naturais e os modos de vibração encontrados. Esses

resultados são bem próximos dos obtidos por Mario Paz (1997).

E = 30000000A= 10.0= 0.01

z

x

y

4

2

1

3

1

4

2

5

67

3

4

50

100

100

50

100

Figura 4.12: Treliça espacial.

Figura 4.13: Treliça espacial: resultados.

Page 35: Vibrações lineares

35

4.3.4 – P�rtico espacial

O pórtico espacial mostrado na Figura 4.14 foi analisado, e os resultados obtidos

no presente trabalho são mostrados na Figura 4.15. Esses resultados são bem próximos

dos obtidos por Mario Paz (1997).

E = 30000000G = 12000000A1 = A3 = 50.0A2 = A4 = 28.0L = 200.0Ix1 = Ix3 = 40.0Ix2 = Ix4 = 12.8Iy1 = Iy3 = 200.0Iy2 = Iy4 = 64.0Iz1 = Iz3 = 200.0Iz2 = Iz4 = 64.81 = 3 = 0.004002 = 4 = 0.00357

4 x

z

y

1

2

5

3

13

2

4 L

LL

L

Figura 4.14: Pórtico espacial.

Page 36: Vibrações lineares

36

Figura 4.14: Pórtico espacial: resultados.

Page 37: Vibrações lineares

37

5CONCLUS�ES

5.1 – CONCLUS�O

Neste trabalho foram implementadas rotinas computacionais clássicas para

realizar análises lineares estática e de vibração livre em sistemas estruturais

formados por elementos de treliça plana, treliça espacial, pórtico plano e pórtico

espacial.

Resumidamente, para a análise linear estática, os procedimentos implementados

foram a montagem do vetor de forças externas F e da matriz de rigidez linear KL,

e em seguida o cálculo dos deslocamentos nodais através de KL u = F. Para a

análise de vibração livre é calculada a matriz de massa consistente Km, e em

seguida resolvido o problema de auto-valor ( KL -2Km )u pelo método de Jacobi,

obtendo assim as freqüências naturais e os modos de vibração da estrutura.

Estas implementações foram abordadas no Capítulo 3 e sua eficiência foi testada

através de exemplos numéricos com resultados conhecidos na literatura.

Page 38: Vibrações lineares

38

REFERÊNCIAS BIBLIOGRÁFICAS

A.S. Galv�o, (2000), Formula��es N�o-Lineares de Elementos Finitos para

An�lise de Sistemas Estruturais Met�licos Reticulados Planos, Disserta��o de Mestrado,

UFOP, Ouro Preto.

A. S. Galv�o, R.A. M. Silveira, and P.B. Gon�alves, (2000), Buckling And Post-

Buckling Behavior Of L-Frames, CILAMCE, Rio de Janeiro.

Brebbia, C.A., Ferrante, A.J. (1986). “Computational Methods For The Solution Of

Engineering Problems”, Third revised Edition, John Wiley & Sons, Inc.

Mario Paz (1997). “Structural Dynamics – Theory and Computation”, Fourth Edition,

Speed Scientific School University of Louisville, KY, Chapman & Hall.

Rocha, G., 2000, Estrat�gias Num�ricas para An�lise de Elementos Estruturais

Esbeltos Met�licos, Disserta��o de Mestrado, UFOP, Ouro Preto.

Silveira, R.A.M. (1995). An�lise de Elementos Estruturais Esbeltos com Restri��es

Unilaterais de Contato. Tese de Doutorado. PUC-RJ, Rio de Janeiro, RJ.

Smith, I.M., Griffiths, D.V. (1999). “Programming the Finite Element Method”, Third

Edition, John Wiley & Sons.

Weaver Jr., W, Johnston P.R. (1987). “Structural Dynamics by Finite Elements”,

Prentice-Hall, Englewood Cliffs, New Jersey.

Page 39: Vibrações lineares

39

APÊNDICE A

SUBROTINAS PARA EXECUTAR A SOLUÇÃO LINEAR

cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA SOLUCAO LINEAR DO PROBLEMA *c *===============================================================*c * *c *****************************************************************c

subroutine soll (neq,coord,gama,ndsup,nddof,idel,mats,secs,$ eload,szero,dr,qfi,ptt,d,il,kgl,kmgl,ql,qll,cc)

cimplicit none

cc--- VARIAVEIS GLOBAIS

integer neq, npoin, nelem, ndime, nmats, npmat, nsecs integer npsec, ncase, ntype, nplot, nnode, ndofn, ineqinteger idel(4,*), ndsup(ndofn,*), nddof(ndofn,*), il(npoin,*)

creal*8 coord(ndime,*),gama(*), secs(npsec,*), mats(npmat,*)real*8 eload(nelem,*), szero(nelem,*), dr(ndime,*), qfi(*)real*8 ptt(ndofn,*), d(*), kgl(neq,*), kmgl(neq,*) real*8 ql(*), qll(ndofn,*), ERR

ccharacter*4 cc

cc--- VARIAVEIS LOCAIS

integer icase, iwrit, iwr , rel, ndofe, i, jcc--- VARIAVEIS ALOCÁVEIS

real*8 REAC[ALLOCATABLE] (:),$ TK [ALLOCATABLE] (:,:),$ TM [ALLOCATABLE] (:,:),$ H [ALLOCATABLE] (:,:), $ V [ALLOCATABLE] (:), $ X [ALLOCATABLE] (:)

cc--- BLOCOS DE COMMONS

common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,$ntype,nplot,nnode,ndofn

cc--- DEFINIÇÕES

ndofe = npoin*ndofnERR = 1.d-12

cc--- ALOCAÇÃO DE VARIÁVEIS

Page 40: Vibrações lineares

40

ALLOCATE (REAC(ndofe))ALLOCATE (TK(neq,neq))ALLOCATE (TM(neq,neq))ALLOCATE (H(neq,neq))ALLOCATE (V(neq)) ALLOCATE (X(neq))

cc--- INICIALIZAÇAO DE VARIÁVEIS

CALL RZERO(REAC,ndofe)CALL RZERO(SZERO,nelem*ndofn)CALL RZERO(ELOAD,nelem*ndofn)CALL RZERO(qfi,neq)

c c--- MONTAGEM DA MATRIZ DE RIGIDEZ

CALL STIFK0 (neq,coord,gama,nddof,idel,mats,secs,kgl)cc--- MONTAGEM DO VETOR DE CARGAS

DO icase=1,ncaseif ((cc == 'load')) then

write(2,223)223 format

(6x,'___________________________________________________$________________________________________________',//,$' FIXED LOAD',/,$ ' ==========',/)

CALL LOADF (icase,coord,nddof,idel,eload,szero,qfi,gama)

end ifcc--- ANÁLISE LINEAR ESTÁTICA ----------------------------------------

IF (ntype .le. 3) THENcc--- FAZ A FATORIZACAO DE CROUT

iwrit = 0iwr = 2rel = 1CALL CROUT (kgl,d,neq,iwrit,iwr,rel)

cc--- RELACIONA QFI COM QL (para o POS-3D)

do ineq=1,neqql(ineq) = qfi(ineq)

end docc--- APLICA A SUBSTITUICAO "FORWARD" E "BACKWARD" NO VETOR QFI USANDO KGL

CALL SOLVCR (kgl,d,qfi,neq,iwrit,iwr,rel)cc--- IMPRIME OS DESLOCAMENTOS DOS NOS

CALL WRDISP (npoin,nddof,ndofn,qfi,ntype)cc--- CALCULA OS ESFORCOS NA BARRA

CALL STRESF (nelem,npoin,ndime,nddof,idel,mats,npmat,secs, $

npsec,szero,qfi,ndofn,nnode,ntype,coord,gama,REAC)cc--- PLOTA A MALHA E/OU A DEFORMADA

CALL GERAP (npoin,ndofn,nddof,qfi,ptt)CALL GERAP (npoin,ndofn,nddof,ql,qll)

Page 41: Vibrações lineares

41

if((nplot.ne.0).and.(ndime.eq.2)) thenCALL PPLOTF (coord,idel,ptt,il,dr,ndofn,ndime,nnode,4)

end ifcc--- GERA ARQUIVO NEUTRO PARA O POS-3D

if((nplot.ne.0).and.(ndime.eq.2)) thenCALL POS3D (ndsup,coord,idel,mats,secs,qll,ptt,szero)

end if cc--- ANÁLISE VIBRAÇÃO LIVRE ----------------------------------------

ELSE IF (ntype .gt. 3) THENcc--- MONTA A MATRIZ DE MASSA

call matmas (neq,coord,gama,nddof,idel,mats,secs,kmgl)cc--- CALCULA OS MODOS E AS FREQUENCIAS NATURAIS

do i=1,neqdo j = 1,neq

TK(i,j) = kgl(i,j)TM(i,j) = kmgl(i,j)

end doend do

ccall EIGG(TK,TM,H,V,ERR,neq,neq,X,D,3)call printEV (TK,TM,neq)

END IFc

END DODEALLOCATE (REAC)

creturnend

ccccc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA IMPRIMIR OS DESLOCAMENTOS NODAIS *c *===============================================================*c * *c *****************************************************************c

subroutine wrdisp (npoin,nddof,ndofn,fu,ntype)cc--- VARIAVEIS GLOBAIS

integer npoin,ndofn,ntypeinteger nddof(ndofn,*)real*8 fu(*)

cc--- VARIAVEIS LOCAIS

integer n,ireal*8 nddisp[ALLOCATABLE] (:)

cc--- ALOCA VARIAVEIS

ALLOCATE (nddisp(ndofn))c

Page 42: Vibrações lineares

42

c--- IMPRIME NO ARQUIVO DE SAÍDAif ((ntype .eq.0).or.(ntype .eq.10)) write(2,100)if ((ntype .eq.1).or.(ntype .eq.11)) write(2,101)if ((ntype .eq.2).or.(ntype .eq.12)) write(2,102)if ((ntype .eq.3).or.(ntype .eq.13)) write(2,103)

c100 format

(6x,'______________________________________________________$_____________________________________________',//,$' NODAL DISPLACEMENTS :',/,$ ' ===================',//,' NODE',$4X,'DISP. X',8X,'DISP. Y',/)

c101 format

(6x,'______________________________________________________$_____________________________________________',//,$' NODAL DISPLACEMENTS :',/,$ ' ===================',//,' NODE',$4X,'DISP. X',8X,'DISP. Y',8X,'ROTACAO',/)

c102 format

(6x,'______________________________________________________$_____________________________________________',//,$' NODAL DISPLACEMENTS :',/,$ ' ===================',//,' NODE',$4X,'DISP. X',8X,'DISP. Y',8X,'DISP. Z',/)

c103 format

(6x,'______________________________________________________$_____________________________________________',//,$' NODAL DISPLACEMENTS :',/,$ ' ===================',//,' NODE',$4X,'DISP. X',8X,'DISP. Y',8X,'DISP. Z',8X'ROT. X',8X,'ROT. Y',$8X,'ROT. Z',/)

cc--- IMPRIME OS DESLOCAMENTOS

do n=1,npoincall dispnd(n,nddof,fu,nddisp,ndofn)write(2,110) n,(nddisp(i),i=1,ndofn)

end doc

110 format(4x,i5,6e15.6)c

DEALLOCATE (nddisp)c

returnend

cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA IMPRIMIR AS FREQUENCIAS NATURAIS *c * E OS MODOS DE FLAMBAGEM *c *===============================================================*c * *c *****************************************************************c

Page 43: Vibrações lineares

43

subroutine printEV (TK,TM,neq)cc--- VARIAVEIS GLOBAIS

integer neqreal*8 TK(neq,*),TM(neq,*), Treal*8 c,d

cc--- VARIAVEIS LOCAIS

integer i,jreal*8 Pi

cc--- DEFINE Pi

pi = 4.d0 * datan(1.0d0)cc--- CALCULA E IMPRIME AS FREQUENCIAS NATURAIS

write(2,100)do i=1,neq

TK(i,i) = dsqrt(TK(i,i))T = 2.d0*Pi / TK(i,i)write(2,200) i,TK(i,i),T

end do c

100 format (6x,'______________________________________________________

$_____________________________________________',//,$' NATURAL FREQUENCIES:',/,$ ' ====================',//,$' N FREQUENCIES PERIODS',/)

c200 format(4x,i5,2e15.6)

cc--- IMPRIME OS MODOS NATURAIS

write(2,300)do i=1,neq

write(2,400) i,(TM(j,i),j=1,neq)end do

c300 format

(6x,'______________________________________________________$_____________________________________________',//,$' NATURAL MODES:',/,$ ' ==============')

c400 format(/' MODE NUMBER: ',i4,/(2x,5e15.6))

c500 format

(6x,'______________________________________________________$_____________________________________________')

cc--- IMPRIME OS MODOS NATURAIS NORMALIZADOS

write(2,600)c

600 format (6x,'______________________________________________________

$_____________________________________________',//,$' NORMALISED NATURAL MODES:',/,$' ========================')

c

Page 44: Vibrações lineares

44

do i=1,neqd = 0.d0

cdo j = 1,neq

c = TM(j,i)if ((dabs(c) .gt. d).and.(c /= 0.d0)) d = dabs(c)

end doc

write(2,400) i,(TM(j,i)/d,j=1,neq)end do

cwrite(2,500)

creturnend

c

Page 45: Vibrações lineares

45

APÊNDICE B

SUBROTINAS PARA CALCULAR A MATRIZ DE RIGIDEZ LINEAR

GLOBAL DO SISTEMA.cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA MONTAR A MATRIZ DE RIGIDEZ GLOBAL *c *===============================================================*c * *c *****************************************************************c

subroutine stifk0 (neq,coord,gama,nddof,idel,mats,secs,kgl)cc--- VARIAVEIS GLOBAIS

integer neq, npoin, nelem, ndime, nmats, npmat, nsecs, npsecinteger ncase, ntype, nplot, nnode, ndofninteger idel(4,*), nddof(ndofn,*)real*8 coord(ndime,*),gama(*), secs(npsec,*), mats(npmat,*)real*8 kgl(neq,*)real*8 E, G, A, Jt, Iy, Iz

cc--- VARIAVEIS LOCAIS

integer noi, noj, sc, mt, ielem, ndofereal*8 length

creal*8 trn[ALLOCATABLE] (:,:),

$ kel[ALLOCATABLE] (:,:),$ kegl[ALLOCATABLE] (:,:),$ keg[ALLOCATABLE] (:,:)

cc--- BLOCO DE COMMON

common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,$ntype,nplot,nnode,ndofn

cc--- ALOCA AS MATRIZES

ndofe = nnode*ndofnALLOCATE (trn(ndofe,ndofe))ALLOCATE (kel(ndofe,ndofe))ALLOCATE (kegl(ndofe,ndofe))ALLOCATE (keg(ndofe,ndofe))

cc--- INICIALIZACAO DE KGL

call rzero (kgl,neq*neq) cc--- MONTA A MATRIZ DE RIGIDEZ DE CADA ELEMENTO

DO IELEM=1,NELEMcc--- IDENTIFICA OS NOS I e J, A SEÇÃO e O MATERIAL DE CADA ELEMENTO

Page 46: Vibrações lineares

46

noi = idel(1,ielem)noj = idel(2,ielem)sc = idel(3,ielem)mt = idel(4,ielem)

cc--- CALCULA A MATRIZ DE ROTAÇÃO

call brtnr (noi,noj,coord,gama(ielem),trn,length,$ ndofe,ntype,ndime)

cc--- INICIALIZA VARIAVEIS

E = 0.d0G = 0.d0A = 0.d0Jt = 0.d0Iy = 0.d0Iz = 0.d0

cc--- CALCULA A MATRIZ DE RIGIDEZ DO ELEMENTO NO SISTEMA LOCAL

if ((ntype .eq. 0).or.(ntype .eq. 2).or.$ (ntype .eq. 4).or.(ntype .eq. 6)) then

E = mats(1,mt)A = secs(1,sc)

else if ((ntype .eq. 1).or.(ntype .eq. 5)) thenE = mats(1,mt)A = secs(1,sc)Iz = secs(2,sc)

else if ((ntype .eq. 3).or.(ntype .eq. 7)) thenE = mats(1,mt)

G = mats(2,mt)A = secs(1,sc)Jt = secs(2,sc)Iy = secs(3,sc)Iz = secs(4,sc)

end ifcall brkel (E,G,A,Jt,Iy,Iz,length,kel,ndofe,ntype)

cc--- CALCULA A MATRIZ DE RIGIDEZ DO ELEMENTO NO SISTEMA GLOBAL:c [keg] = [trn]t . [kel] . [trn]

call mtrans (ndofe,ndofe,kel,trn,keg,kegl)cc--- ARMAZENA [keg] NA MATRIZ DE RIGIDEZ GLOBAL DO SISTEMA [KGL]

call assemb (ielem,neq,nnode,ndofn,nelem,idel,nddof,kgl,keg)cc--- ARMAZENA [kegl] = [R]t.[kel] EM DISCO NO ARQUIVO F3.tmp

write(3) keglc

END DOc

DEALLOCATE (trn)DEALLOCATE (kel)DEALLOCATE (kegl)DEALLOCATE (keg)

creturn end

Page 47: Vibrações lineares

47

cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA AVALIAR A MATRIZ DE RIGIDEZ LOCAL *c *===============================================================*c * *c *****************************************************************c

subroutine brkel (E,G,A,Jt,Iy,Iz,L,kel,ndofe,ntype)cc--- VARIAVEIS GLOBAIS

integer ndofe,ntypereal*8 E,G,A,Jt,Iy,Iz,I,L,kel(ndofe,ndofe)

cc--- VARIAVEIS LOCAIS

integer k,jreal*8 a1, a2, a3, a4, a5, a6, a7, a8

cc--- DEFINICAO DOS ELEMENTOScc--- INICIALIZANDO kel

call rzero (kel,ndofe*ndofe)cc--- PARA ELEMENTO DE TRELIÇA PLANA -------------------------------------c

IF ((ntype.eq.0).or.(ntype .eq. 4)) thenc

kel(1,1) = e*a/lkel(1,3) = -e*a/lkel(3,1) = -e*a/lkel(3,3) = e*a/l

cc--- PARA ELEMENTO DE PÓRTICO PLANO ----------------------------------c

ELSE IF ((ntype.eq.1).or.(ntype .eq. 5)) thenc

I = Izc

kel(1,1) = e*a/lkel(4,1) = - kel(1,1)

ckel(2,2) = 12.d0*e*i/l**3.d0kel(3,2) = 6.d0*e*i/l**2.d0kel(5,2) = - kel(2,2)kel(6,2) = kel(3,2)

ckel(2,3) = 6.d0*e*i/l**2.d0kel(3,3) = 4.d0*e*i/lkel(5,3) = - kel(2,3)kel(6,3) = 2.d0*e*i/l

cdo j=4,5

do k=1,6kel(k,j) = - kel(k,j-3)

Page 48: Vibrações lineares

48

end doend do

ckel(2,6) = 6.d0*e*i/l**2.d0kel(3,6) = 2.d0*e*i/lkel(5,6) = - kel(2,6)kel(6,6) = 4.d0*e*i/l

cc--- PARA ELEMENTO DE TRELIÇA 3D -------------------------------------c

ELSE IF ((ntype.eq.2).or.(ntype .eq. 6)) thenc

kel(1,1) = e*a/lkel(1,4) = -e*a/lkel(4,1) = -e*a/lkel(4,4) = e*a/l

cc--- PARA ELEMENTO DE PÓRTICO 3D -------------------------------------c

ELSE IF ((ntype.eq.3).or.(ntype .eq. 7)) thenc

a1 = e*a/la2 = 12.d0*e*iz/l**3.d0a3 = 12.d0*e*iy/l**3.d0a4 = 6.d0*e*iz/l**2.d0a5 = 6.d0*e*iy/l**2.d0a6 = 4.d0*e*iz/la7 = 4.d0*e*iy/la8 = g*jt/l

c kel(1,1) = a1 kel(1,7) = -a1

c kel(2,2) = a2 kel(2,6) = a4 kel(2,8) = -a2kel(2,12) = a4

c kel(3,3) = a3kel(3,5) = -a5 kel(3,9) = -a3 kel(3,11)= -a5

ckel(4,4) = a8 kel(4,10)= -a8

ckel(5,5) = a7 kel(5,9) = a5kel(5,11) = 0.5d0*a7

ckel(6,6) = a6kel(6,8) = -a4kel(6,12)= 0.5d0*a6

c kel(7,7) = a1

c kel(8,8) = a2kel(8,12)= -a4

Page 49: Vibrações lineares

49

c kel(9,9) = a3 kel(9,11)= a5

c kel(10,10)= a8

c kel(11,11)= a7

c kel(12,12)= a6

cc--- Obtém a parte triangular inferior da matriz KEL

do j=1,12do k=j,12

kel(k,j) = kel(j,k)end do

end do c

END IFc

returnend

c

Page 50: Vibrações lineares

50

APÊNDICE CSUBROTINAS PARA CALCULAR A MATRIZ DE MASSA DO SISTEMA.

cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA MONTAR A MATRIZ DE MASSA GLOBAL *c *===============================================================*c * *c *****************************************************************c

subroutine matmas (neq,coord,gama,nddof,idel,mats,secs,kmgl)cc--- VARIAVEIS GLOBAIS

integer neq, npoin, nelem, ndime, nmats, npmat, nsecs, npsecinteger ncase, ntype, nplot, nnode, ndofninteger idel(4,*), nddof(ndofn,*)real*8 coord(ndime,*),gama(*), secs(npsec,*), mats(npmat,*)real*8 kmgl(neq,*)real*8 DENS, A, Jt

cc--- VARIAVEIS LOCAIS

integer noi, noj, sc, mt, ielem, ndofereal*8 length

creal*8 trn[ALLOCATABLE] (:,:),

$ kmel[ALLOCATABLE] (:,:),$ kmegl[ALLOCATABLE] (:,:),$ kmeg[ALLOCATABLE] (:,:)

cc--- BLOCO DE COMMON

common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,$ntype,nplot,nnode,ndofn

cc--- ALOCA AS MATRIZES

ndofe = nnode*ndofnALLOCATE (trn(ndofe,ndofe))ALLOCATE (kmel(ndofe,ndofe))ALLOCATE (kmegl(ndofe,ndofe))ALLOCATE (kmeg(ndofe,ndofe))

cc--- INICIALIZACAO DE KGL

call rzero (kmgl,neq*neq) cc--- MONTA A MATRIZ DE RIGIDEZ DE CADA ELEMENTO

DO IELEM=1,NELEMcc--- IDENTIFICA OS NOS I e J, A SEÇÃO e O MATERIAL DE CADA ELEMENTO

noi = idel(1,ielem)noj = idel(2,ielem)sc = idel(3,ielem)mt = idel(4,ielem)

Page 51: Vibrações lineares

51

cc--- CALCULA A MATRIZ DE ROTAÇÃO

call brtnr (noi,noj,coord,gama(ielem),trn,length,$ ndofe,ntype,ndime)

c--- INICIALIZA VARIAVEISA = secs(1,sc)Jt = 0.d0

cc--- CALCULA A MATRIZ DE MASSA DO ELEMENTO NO SISTEMA LOCAL

if ((ntype .eq. 4).or.(ntype .eq. 5).or.(ntype .eq. 6)) thenDENS = mats(2,mt)

else if ((ntype .eq. 7)) thenDENS = mats(3,mt)Jt = secs(2,sc)

end ifcall brkmel (DENS,A,Jt,length,kmel,ndofe,ntype)

c

cc--- CALCULA A MATRIZ DE MASSA DO ELEMENTO NO SISTEMA GLOBAL:c [kmeg] = [trn]t . [kmel] . [trn]

call mtrans (ndofe,ndofe,kmel,trn,kmeg,kmegl)cc--- ARMAZENA [kmeg] NA MATRIZ DE MASSA GLOBAL DO SISTEMA [KmGL]

call assemb (ielem,neq,nnode,ndofn,nelem,idel,nddof,kmgl,kmeg)c

END DOc

DEALLOCATE (trn)DEALLOCATE (kmel)DEALLOCATE (kmegl)DEALLOCATE (kmeg)

creturn end

cc *****************************************************************c * *c *===============================================================*c * SUBROTINA PARA AVALIAR A MATRIZ DE MASSA LOCAL *c *===============================================================*c * *c *****************************************************************c

subroutine brkmel (DENS,A,Jt,L,kmel,ndofe,ntype)c

implicit nonecc--- VARIAVEIS GLOBAIS

integer ndofe,ntypereal*8 DENS,A,Jt,I,L,kmel(ndofe,ndofe)

cc--- VARIAVEIS LOCAIS

integer k,jreal*8 coef, rg, jp

cc--- DEFINICAO DOS ELEMENTOS

Page 52: Vibrações lineares

52

cc--- INICIALIZANDO kmel

call rzero (kmel,ndofe*ndofe)cc--- PARA ELEMENTO DE TRELIÇA PLANA -------------------------------------c

IF (ntype.eq.4) thenc

coef = dens * A * L / 6.d0c

do i=1,4kmel(i,i) = 2.d0 * coefif ((i+2) .le. 4) kmel(i,i+2) = 1.d0 * coef

end do cc--- PARA ELEMENTO DE PÓRTICO PLANO ----------------------------------c

ELSE IF (ntype.eq.5) thenc

coef = dens * A * L / 420.d0c

kmel(1,1) = 140.d0 * coefkmel(1,4) = 70.d0 * coef

ckmel(2,2) = 156.d0 * coefkmel(2,3) = 22.d0 * coef * Lkmel(2,5) = 54.d0 * coefkmel(2,6) = -13.d0 * coef * L

ckmel(3,3) = 4.d0 * coef * L * Lkmel(3,5) = 13.d0 * coef * Lkmel(3,6) = -3.d0 * coef * L * L

ckmel(4,4) = 140.d0 * coef

ckmel(5,5) = 156.d0 * coefkmel(5,6) = -22.d0 * coef * L

ckmel(6,6) = 4.d0 * coef * L * L

cdo j=1,6

do k=j,6kmel(k,j) = kmel(j,k)

end doend do

cc--- PARA ELEMENTO DE TRELIÇA 3D -------------------------------------c

ELSE IF (ntype.eq.6) thenc

coef = dens * A * L / 6.d0c

do i=1,6kmel(i,i) = 2.d0 * coefif ((i+3) .le. 6) kmel(i,i+3) = 1.d0 * coef

end do

Page 53: Vibrações lineares

53

cc--- PARA ELEMENTO DE PÓRTICO 3D -------------------------------------c

ELSE IF (ntype.eq.7) thenc

jp = jtrg = dsqrt(jp/A)

ccoef = dens * A * L / 420.d0

c kmel(1,1) = 140.d0*coef kmel(1,7) = 70.d0*coef

c kmel(2,2) = 156.d0*coef kmel(2,6) = 22.d0 * L *coef kmel(2,8) = 54.d0 kmel(2,12) =-13.d0 * L*coef

c kmel(3,3) = 156.d0 *coef kmel(3,5) = -22.d0 * L *coefkmel(3,9) = 54.d0 *coef kmel(3,11)= 13.d0 * L *coef

ckmel(4,4) = 140.d0 * rg**2.d0 *coef kmel(4,10)= 70.d0 * rg**2.d0 *coef

ckmel(5,5) = 4.d0 * L**2.d0 *coef kmel(5,9) = -13.d0 * L *coef kmel(5,11) =-3.d0 * L**2.d0 *coef

ckmel(6,6) = 4.d0 * L**2.d0 *coefkmel(6,8) = 13.d0 * L *coefkmel(6,12)= -3.d0 * L**2.d0 *coef

c kmel(7,7) = 140.d0 *coef

c kmel(8,8) = 156.d0 *coefkmel(8,12)= -22.d0 * L *coef

c kmel(9,9) = 156.d0 *coef kmel(9,11)= 22.d0 * L *coef

c kmel(10,10)=140.d0 * rg**2.d0 *coef

c kmel(11,11)=4.d0 * L**2.d0*coef

c kmel(12,12)=4.d0 * L**2.d0*coef

cdo j=1,12

do k=j,12kmel(k,j) = kmel(j,k)

end doend do

cEND IF

creturnend

Page 54: Vibrações lineares

54

APÊNDICE D

SUBROTINAS PARA CALCULAR E IMPRIMIR AS FORCAS RESULTANTES

NOS ELEMENTOS.

cc *****************************************************************c * * c *===============================================================*c * SUBROTINA PARA CALCULAR E IMPRIMIR *c * AS FORCAS RESULTANTES NOS ELEMENTOS *c *===============================================================*c * * c *****************************************************************c

subroutine stresf (nelem,npoin,ndime,nddof,idel,mats,npmat,secs, $ psec,szero,fu,ndofn,nnode,ntype,coord,gama,REAC)

cc--- VARIAVEIS GLOBAIS

integer nelem, npoin, ndime, ndofn, nnode, ntype, npsec, npmatreal*8 coord(ndime,*),secs(npsec,*), mats(npmat,*), gama(*)integer idel(4,*), nddof(ndofn,*)real*8 szero(nelem,*), fu(*), REAC(*)

cc--- VARIAVEIS LOCAIS

integer ndofereal*8 dg[ALLOCATABLE] (:),$ fl[ALLOCATABLE] (:)

cc--- ALOCA AS MATRIZES

ndofe = nnode*ndofnALLOCATE (dg(ndofe))ALLOCATE (fl(ndofe))

c if ((ntype.eq.0).or.(ntype.eq.10))then

CALL forceTP (nelem,npoin,ndime,nddof,dg,idel,mats, $ npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

celse if ((ntype.eq.1).or.(ntype.eq.11))then

CALL forceFP (nelem,npoin,ndime,nddof,dg,idel,szero,fu,$ ndofn,coord,REAC)

celse if ((ntype.eq.2))then

CALL forceTE (nelem,npoin,ndime,nddof,dg,idel,mats, $ npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

celse if ((ntype.eq.3))then

CALL forceFE (nelem,npoin,ndime,nddof,dg,idel,szero,fu,$ ndofn,coord,gama,REAC)

Page 55: Vibrações lineares

55

cend if

cDEALLOCATE (dg)DEALLOCATE (fl)

creturnend

ccc *****************************************************************c * * c *===============================================================*c * SUBROTINA PARA CALCULAR E IMPRIMIR *c * AS FORCAS RESULTANTES NOS ELEMENTOS *c *===============================================================*c * ELEMENTO DE TRELIÇA PLANO * c *****************************************************************c

subroutine forceTP (nelem,npoin,ndime,nddof,dg,idel,mats, $ npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

cimplicit none

cc--- VARIAVEIS GLOBAIS

integer nelem,npoin,ndime,ndofn,npsec,npmatinteger idel(4,*), nddof(ndofn,*) real*8 coord(ndime,*), secs(npsec,*), mats(npmat,*)real*8 szero(nelem,*), fu(*), dg(*), REAC(*)

cc--- VARIAVEIS LOCAIS

integer IELEM, IPOIN, j, k1, k2integer noi, noj, sc, mtreal*8 EA, S, C, dx, dy, Lreal*8 ug1,vg1,ug2,vg2

creal*8 FORC[ALLOCATABLE] (:)

cc--- ALOCA AS MATRIZES

ALLOCATE (FORC(nelem))cc--- ZERA A MATRIZ SZERO

CALL RZERO (SZERO,NELEM*4)cc--- INÍCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA------------------------

DO IELEM=1,NELEMcc--- INDENTIFICA OS NÓS E AS PRORIEDADES DO ELEMENTO IELEM

noi = idel(1,ielem)noj = idel(2,ielem)sc = idel(3,ielem)mt = idel(4,ielem)

cc--- INDENTIFICA A NUMERAÇÃO DO GRAU DE LIBERDADE INICIAL DE CADA NÓ

k1 = ndofn*(noi-1)k2 = ndofn*(noj-1)

c

Page 56: Vibrações lineares

56

c--- CALCULA EAEA =mats(1,mt) * secs(1,sc)

cc--- CALCULA O COMPRIMENTO L DA BARRA

dx = coord(1,noj) - coord(1,noi)dy = coord(2,noj) - coord(2,noi)L = (dx*dx + dy*dy)**0.5d0

cc--- CALCULA O SENO E O COSSENO

S = dy/LC = dx/L

cc--- CALCULA OS DESLOCAMENTOS EM COORD.GLOBAIS: c {dg}t=[ug1,vg1,ug2,vg2]

call dispnd(noi,nddof,fu,dg(1),ndofn)call dispnd(noj,nddof,fu,dg(3),ndofn)ug1 = dg(1)vg1 = dg(2)ug2 = dg(3)vg2 = dg(4)

cc--- CALCULA O ESFORÇO NORMAL NA BARRA IELEM

FORC(ielem)= EA/L*( (ug2-ug1)*C + (vg2-vg1)*S )cc--- CALCULA AS REAÇOES GLOBAIS NOS NÓS

REAC (k1+1) = REAC (k1+1) - FORC (ielem)*CREAC (k1+2) = REAC (k1+2) - FORC (ielem)*SREAC (k2+1) = REAC (k2+1) + FORC (ielem)*CREAC (k2+2) = REAC (k2+2) + FORC (ielem)*S

cc---ARMAZENA AS REAÇOES GLOBAIS EM c {SZERO[ielem]} = {[ Pxi Pyi Pxj Pyj ]}

SZERO(ielem,1) = REAC (k1+1)SZERO(ielem,2) = REAC (k1+2)SZERO(ielem,3) = REAC (k2+1)SZERO(ielem,4) = REAC (k2+2)

cc--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

END DOcc--- IMPRESSÃO DAS REAÇOES NODAIS

write (2,10)

10 format (6x,'______________________________________________________

$_____________________________________________',//,$' NODAL REACTIONS:',/,$ ' =============== ',//,' NODE',10X,$'Rx',13X,'Ry',/)

20 format(4x,i5,6F15.4)c

DO ipoin = 1,npoink1 = ndofn*(ipoin-1)+1k2 = k1 + ndofn - 1write (2,20) ipoin, (REAC(j), j=k1,k2)

END DOc

Page 57: Vibrações lineares

57

c--- IMPRESSÃO DAS FORÇAS AXIAISwrite (2,30)

30 format (6x,'______________________________________________________

$_____________________________________________',//,$' MEMBER FORCES:',/,$ ' =============',//,' MEMBER',2X,$'AXIAL FORCE ',/)

c 40 format

(6x,'______________________________________________________$_____________________________________________')

cDO ielem = 1,nelem

write (2,20) ielem, FORC(ielem)END DOwrite(2,40)

cDEALLOCATE (FORC)

creturnend

ccc *****************************************************************c * * c *===============================================================*c * SUBROTINA PARA CALCULAR E IMPRIMIR *c * AS FORCAS RESULTANTES NOS ELEMENTOS *c *===============================================================*c * ELEMENTO DE PORTICO PLANO * c *****************************************************************c

subroutine forceFP (nelem,npoin,ndime,nddof,dg,idel,szero,fu,$ ndofn,coord,REAC)

cimplicit none

cc--- VARIAVEIS GLOBAIS

integer nelem,npoin,ndime,ndofninteger idel(4,*), nddof(ndofn,*) real*8 coord(ndime,*)real*8 szero(nelem,*), fu(*), dg(*), REAC(*)

cc--- VARIAVEIS LOCAIS

integer IELEM, IPOIN, i, j, k1, k2, I1, I2, J1, J2integer noi, nojreal*8 F(6),FL(6),FG(6),R(3,3),kegl(6,6), dx, dy, L, S, C

creal*8 FORC[ALLOCATABLE] (:)

cc--- ALOCA AS MATRIZES

ALLOCATE (FORC(nelem*6))cc--- RECORRE AO ARQUIVO TEMPORÁRIO F3.tmp

rewind(3)c

Page 58: Vibrações lineares

58

c--- INÍCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

DO IELEM=1,NELEMcc--- LE A MATRIZ ELEMENTAR [kegl] = [R]t.[kel]c ANTERIORMENTE ARMAZENADA EM F3.tmp

read(3) keglcc--- Calcula as componentes dos deslocamentos em coord. globais

noi = idel(1,ielem)noj = idel(2,ielem)call dispnd(noi,nddof,fu,dg(1),ndofn)call dispnd(noj,nddof,fu,dg(4),ndofn)

cc--- INDENTIFICA A NUMERAÇÃO DO GRAU DE LIBERDADE INICIAL DE CADA NÓ

k1 = ndofn*(noi-1)k2 = ndofn*(noj-1)

cc--- CALCULA O COMPRIMENTO L DA BARRA

dx = coord(1,noj) - coord(1,noi)dy = coord(2,noj) - coord(2,noi)L = (dx*dx + dy*dy)**0.5d0

cc--- CALCULA O SENO E O COSSENO

S = dy/LC = dx/L

cc--- DEFINIÇÃO DA SUB-MATRIZ DE TRANSFORMAÇÃO R(3,3)

R(1,1) = CR(1,2) = SR(1,3) = 0.D0R(2,1) =-SR(2,2) = CR(2,3) = 0.D0R(3,1) = 0.D0R(3,2) = 0.D0R(3,3) = 1.D0

Cc t t tc--- Calcula {fl} = [kegl].{dg} = [kel].([R].{dg}) = [kel].{uel} = c = [kel].{uel}c e armazena na matriz SZERO e no vetor F

call matmlt (6,6,1,kegl,dg,fl)do i=1,6

SZERO(ielem,i) = SZERO(ielem,i) + fl(i)F(i) = SZERO(ielem,i)

end docc--- Armazena as forças locais no vetor Forc

I1 = 6*(ielem - 1)do i=1,6

I2 = I1+iForc(I2) = F(i)

end docc--- ARMAZENA AS FORÇAS GLOBAIS NO VETOR FG

do i=1,3FG(i) = 0.d0

Page 59: Vibrações lineares

59

FG(i+3) = 0.d0do j=1,3

FG(i) = FG(i) + R(j,i) * F(j)FG(i+3) = FG(i+3) + R(j,i) * F(j+3)

end doend do

cc--- CALCULA AS REAÇOES GLOBAIS NOS NÓS

do i=1,3J1 = k1 + iJ2 = k2 + iREAC(J1) = REAC(J1) + FG(i)REAC(J2) = REAC(J2) + FG(i+3)

end docc--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

END DOcc--- IMPRESSÃO DAS REAÇOES NODAIS

write (2,10)

10 format (6x,'______________________________________________________

$_____________________________________________',//,$' REACTIONS:',/,$ ' ========= ',//,' NODE',10X,$'Rx',13X,'Ry',13X,'Mz',/)

20 format(4x,i5,6F15.4)c

do ipoin = 1,npoink1 = ndofn * (ipoin - 1) + 1k2 = k1 + ndofn - 1write (2,20) ipoin, (REAC(j), j=k1,k2)

end docc--- IMPRESSÃO DOS ESFORÇOS NAS BARRAS

write (2,30)30 format

(6x,'______________________________________________________$_____________________________________________',//,$' MEMBER FORCES AND MOMENTS:',/,$ ' ========================= ',//,' MEMBER',1X,$'NODE',8X,'Sx',13X,'Vy',13X,'Mz',/)

c40 format(4x,2i5,3f15.4)

c50 format(4x,i10,3f15.4)

c 60 format

(6x,'______________________________________________________$_____________________________________________')

cDO ielem = 1,nelem

k1 = 6 * (ielem - 1) + 1k2 = k1 + 2noi = idel(1,ielem)

Page 60: Vibrações lineares

60

noj = idel(2,ielem)write (2,40) ielem, noi, (FORC(j), j=k1,k2)k1 = k2 + 1k2 = k1 + 2write (2,50) noj, (FORC(j), j=k1,k2)

END DOwrite(2,60)

cc

returnend

cccc *****************************************************************c * * c *===============================================================*c * SUBROTINA PARA CALCULAR E IMPRIMIR *c * AS FORCAS RESULTANTES NOS ELEMENTOS *c *===============================================================*c * ELEMENTO DE TRELIÇA 3D * c *****************************************************************c

subroutine forceTE (nelem,npoin,ndime,nddof,dg,idel,mats, $ npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

cimplicit none

cc--- VARIAVEIS GLOBAIS

integer nelem,npoin,ndime,ndofn,npsec,npmatinteger idel(4,*), nddof(ndofn,*) real*8 coord(ndime,*), secs(npsec,*), mats(npmat,*)real*8 szero(nelem,*), fu(*), dg(*), REAC(*)

cc--- VARIAVEIS LOCAIS

integer IELEM, IPOIN, j, k1, k2integer noi, noj, sc, mtreal*8 EA, Cx, Cy, Cz, dx, dy, dz, Lreal*8 ug1,vg1,wg1, ug2,vg2,wg2

creal*8 FORC[ALLOCATABLE] (:)

cc--- ALOCA AS MATRIZES

ALLOCATE (FORC(nelem))cc--- ZERA A MATRIZ SZERO

CALL RZERO (SZERO,NELEM*6)cc--- INÍCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

DO IELEM=1,NELEMcc--- INDENTIFICA OS NÓS E AS PRORIEDADES DO ELEMENTO IELEM

noi = idel(1,ielem)noj = idel(2,ielem)sc = idel(3,ielem)mt = idel(4,ielem)

Page 61: Vibrações lineares

61

cc--- INDENTIFICA A NUMERAÇÃO DO GRAU DE LIBERDADE INICIAL DE CADA NÓ

k1 = ndofn*(noi-1)k2 = ndofn*(noj-1)

cc--- CALCULA EA

EA =mats(1,mt) * secs(1,sc) cc--- CALCULA O COMPRIMENTO L DA BARRA

dx = coord(1,noj) - coord(1,noi)dy = coord(2,noj) - coord(2,noi)dz = coord(3,noj) - coord(3,noi)L = (dx*dx + dy*dy + dz*dz)**0.5d0

cc--- CALCULA O SENO E O COSSENO

Cx = dx/LCy = dy/LCz = dz/L

cc--- CALCULA OS DESLOCAMENTOS EM COORD.GLOBAIS: c {dg}t=[ug1,vg1,ug2,vg2]

call dispnd(noi,nddof,fu,dg(1),ndofn)call dispnd(noj,nddof,fu,dg(4),ndofn)ug1 = dg(1)vg1 = dg(2)wg1 = dg(3)ug2 = dg(4)vg2 = dg(5)wg2 = dg(6)

cc--- CALCULA O ESFORÇO NORMAL NA BARRA IELEM

FORC(ielem)= EA/L*( (ug2-ug1)*Cx + (vg2-vg1)*Cy $ + (wg2-wg1)*Cz) )

cc--- CALCULA AS REAÇOES GLOBAIS NOS NÓS

REAC (k1+1) = REAC (k1+1) - FORC (ielem)*CxREAC (k1+2) = REAC (k1+2) - FORC (ielem)*CyREAC (k1+3) = REAC (k1+3) - FORC (ielem)*CzREAC (k2+1) = REAC (k2+1) + FORC (ielem)*CxREAC (k2+2) = REAC (k2+2) + FORC (ielem)*CyREAC (k2+3) = REAC (k2+3) + FORC (ielem)*Cz

cc---ARMAZENA AS REAÇOES GLOBAIS EM {SZERO[ielem]} = {[ Pxi Pyi Pxj Pyj ]}

SZERO(ielem,1) = REAC (k1+1)SZERO(ielem,2) = REAC (k1+2)SZERO(ielem,3) = REAC (k1+3)SZERO(ielem,4) = REAC (k2+1)SZERO(ielem,5) = REAC (k2+2)SZERO(ielem,6) = REAC (k2+3)

cc--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

END DOcc--- IMPRESSÃO DAS REAÇOES NODAIS

write (2,10)

Page 62: Vibrações lineares

62

10 format (6x,'______________________________________________________

$_____________________________________________',//,$' REACTIONS:',/,$ ' ========= ',//,' NODE',10X,'Rx',$13X,'Ry',13X,'Rz',/)

20 format(4x,I5,6F15.4)c

DO ipoin = 1,npoink1 = ndofn*(ipoin-1)+1k2 = k1 + ndofn - 1write (2,20) ipoin, (REAC(j), j=k1,k2)

END DOcc--- IMPRESSÃO DAS FORÇAS AXIAIS

write (2,30)30 format

(6x,'______________________________________________________$_____________________________________________',//,$' MEMBER FORCES:',/,$ ' ============= ',//,' MEMBER',6X,$' AXIAL FORCE',/)

c 40 format

(6x,'______________________________________________________$_____________________________________________')

cDO ielem = 1,nelem

write (2,20) ielem, FORC(ielem)END DOwrite(2,40)

cDEALLOCATE (FORC)

creturnend

cccc *****************************************************************c * * c *===============================================================*c * SUBROTINA PARA CALCULAR E IMPRIMIR *c * AS FORCAS RESULTANTES NOS ELEMENTOS *c *===============================================================*c * ELEMENTO DE PORTICO 3D * c *****************************************************************c

subroutine forceFE (nelem,npoin,ndime,nddof,dg,idel,szero,fu,$ ndofn,coord,gama,REAC)

cimplicit none

cc--- VARIAVEIS GLOBAIS

integer nelem,npoin,ndime,ndofninteger idel(4,*), nddof(ndofn,*) real*8 coord(ndime,*), gama(*)

Page 63: Vibrações lineares

63

real*8 szero(nelem,*), fu(*), dg(*), REAC(*) cc--- VARIAVEIS LOCAIS

integer IELEM, IPOIN, i, j, k1, k2, I1, I2, J1, J2integer noi, nojreal*8 F(12),FL(12),FG(12),R(3,3),kegl(12,12),dx,dy,dz,L,denreal*8 Cx, Cy, Cz, Sg, Cg, auxil

creal*8 FORC[ALLOCATABLE] (:)

cc--- ALOCA AS MATRIZES

ALLOCATE (FORC(nelem*12))call rzero (FORC,nelem*12)

cc--- RECORRE AO ARQUIVO TEMPORÁRIO F3.tmp

rewind(3)cc--- INÍCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA------------------------

DO IELEM=1,NELEMcc--- LE A MATRIZ ELEMENTAR [kegl] = [R]t.[kel]c ANTERIORMENTE ARMAZENADA EM F3.tmp

read(3) keglcc--- Calcula as componentes dos deslocamentos em coord. globais

noi = idel(1,ielem)noj = idel(2,ielem)call dispnd(noi,nddof,fu,dg(1),ndofn)call dispnd(noj,nddof,fu,dg(7),ndofn)

cc--- INDENTIFICA A NUMERAÇÃO DO GRAU DE LIBERDADE INICIAL DE CADA NÓ

k1 = ndofn*(noi-1)k2 = ndofn*(noj-1)

cc--- CALCULA O COMPRIMENTO L DA BARRA

dx = coord(1,noj) - coord(1,noi)dy = coord(2,noj) - coord(2,noi)dz = coord(3,noj) - coord(3,noi)L = dsqrt(dx*dx + dy*dy + dz*dz)

cc--- DEFINIÇOES DE VARIAVEIS

Cx = dx/LCy = dy/LCz = dz/LCg = dcos(gama(ielem))Sg = dsin(gama(ielem))den = dsqrt(Cx * Cx + Cz * Cz)

cc--- DEFINIÇÃO DA SUB-MATRIZ DE TRANSFORMAÇÃO R(3,3)

if (den /= 0.d0)thenR(1,1) = Cx R(1,2) = CyR(1,3) = Cz

cR(2,1) = (-Cx * Cy * Cg - Cz * Sg)/den R(2,2) = den * CgR(2,3) = (-Cy * Cz * Cg + Cx * Sg)/den

c

Page 64: Vibrações lineares

64

R(3,1) = (Cx * Cy * Sg - Cz * Cg)/den R(3,2) = -den * SgR(3,3) = (Cy * Cz * Sg + Cx * Cg)/den

else if (den == 0.d0)thenif (dy.gt.0.d0) then

auxil = 1.d0else if (dy.lt.0.d0)then

auxil = -1.d0end ifR(1,1) = 0.d0 R(1,2) = auxilR(1,3) = 0.d0

cR(2,1) = -auxil*Cg R(2,2) = 0.d0R(2,3) = Sg

cR(3,1) = auxil*Sg R(3,2) = 0.d0R(3,3) = Cg

end ifc t t tc--- Calcula {fl} = [kegl].{dg} = [kel].([R].{dg}) = [kel].{uel} = c = [kel].{uel}c e armazena na matriz SZERO e no vetor F

call matmlt (12,12,1,kegl,dg,fl)do i=1,12

SZERO(ielem,i) = SZERO(ielem,i) + fl(i)F(i) = SZERO(ielem,i)

end docc--- Armazena as forças locais no vetor Forc

I1 = 12*(ielem - 1)do i=1,12

I2 = I1+iForc(I2) = F(i)

end docc--- ARMAZENA AS FORÇAS GLOBAIS NO VETOR FG

do i=1,3FG(i) = 0.d0FG(i+3) = 0.d0FG(i+6) = 0.d0FG(i+9) = 0.d0do j=1,3

FG(i) = FG(i) + R(j,i) * F(j)FG(i+3) = FG(i+3) + R(j,i) * F(j+3)FG(i+6) = FG(i+6) + R(j,i) * F(j+6)FG(i+9) = FG(i+9) + R(j,i) * F(j+9)

end doend do

cc--- CALCULA AS REAÇOES GLOBAIS NOS NÓS

do i=1,6J1 = k1 + iJ2 = k2 + iREAC(J1) = REAC(J1) + FG(i)REAC(J2) = REAC(J2) + FG(i+6)

Page 65: Vibrações lineares

65

end docc--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA--------------------------

END DOcc--- IMPRESSÃO DAS REAÇOES NODAIS

write (2,10)

10 format (6x,'______________________________________________________

$_____________________________________________',//,$' REACTIONS:',/,$ ' ========= ',//,' NODE',10X,'Rx',$13X,'Ry',13X,'Rz',13X,'Mx',13X,'My',13X,'Mz'/)

20 format(4x,I5,6F15.4)c

do ipoin = 1,npoink1 = ndofn * (ipoin - 1) + 1k2 = k1 + ndofn - 1write (2,20) ipoin, (REAC(j), j=k1,k2)

end docc--- IMPRESSÃO DOS ESFORÇOS NAS BARRAS

write (2,30)30 format

(6x,'______________________________________________________$_____________________________________________',//,$' MEMBER FORCES AND MOMENTS:',/,$ ' ========================= ',//,' MEMBER',1X,$'NODE',8X,'Sx',13X,'Vy',13X,'Vz',13X,'Mx',13X,'My',13X,'Mz',/)

c40 format(4x,2i5,13f15.4)

c50 format(4x,i10,13f15.4)

c 60 format

(6x,'______________________________________________________$_____________________________________________')

cDO ielem = 1,nelem

k1 = 12 * (ielem - 1) + 1k2 = k1 + 5noi = idel(1,ielem)noj = idel(2,ielem)write (2,40) ielem, noi, (FORC(j), j=k1,k2)k1 = k2 + 1k2 = k1 + 5write (2,50) noj, (FORC(j), j=k1,k2)

END DOwrite(2,60)

creturnend

Page 66: Vibrações lineares

66

APÊNDICE ESUBROTINAS PARA CALCULAR OS AUTOVALORES E AUTOVETORES cc *****************************************************************c * *c * SUBROTINA PARA CALCULAR OS AUTOVALORES E AUTOVETORES *c * DE UMA EQUAÇÃO DO TIPO A * B = LÂMBDA * B * X *c * *c ***************************************************************** c

SUBROUTINE EIGG (A,B,H,V,ERR,N,NX,X,D,INX)C C C N : ORDEM REAL DE A E BC NX : DIMENSÃO DA LINHA E COLUNA DE A E BC ERR: ERRO LIMITE USADO EM SUBROUTINE JACOBC inx: DEFINE O TIPO DE SOLUÇÃOC V : AUXILIARY ARRAYC

IMPLICIT NONEC

INTEGER N, NX INTEGER INXREAL*8 ERR REAL*8 A(NX,NX), B(NX,NX)REAL*8 H(NX,NX), V(NX)REAL*8 X (NX)REAL*8 D

C C DECOMPOSE MATRIZ B USING CHOLESKI'S METHODC

CALL DECOG (B,N,NX)CC INVERT MATRIZ BC

CALL INVCH (B,H,N,NX)CC MULTIPLY TRANSPOSE(H) * A * HC

CALL BTAB3 (A,H,V,N,NX)C C COMPUTE THE EIGENVALUES c c--- STODOLLA-VIANELLOc menor autovalor

IF(INX.EQ.1) THENCALL INVER (A,N)CALL EIGIS (A,X,N,D)D = 1.D0/D

END IFcc maior auto valor

Page 67: Vibrações lineares

67

IF(INX.EQ.2) THEN CALL EIGIS (A,X,N,D)

END IFcc--- JACOBc [A] TERMOS DA DIAGONAL SERÃO OS AUTOVALORESC [B] CADA COLUNA DESSE ARRAY INCLUIRÁ UMA SÉRIE DE AUTOVETORES

IF(INX.EQ.3) THENCALL JACOB (A,B,ERR,N,NX)

END IF C C COMPUTE THE EIGENVECTORS

IF(INX.EQ.1) THENCALL MATMB1 (H,X,V,N)

END IF IF(INX.EQ.2) THEN

CALL MATMB2 (H,X,V,N)END IF IF(INX.EQ.3) THEN

CALL MATMB3 (H,B,V,N,NX) END IF

CRETURN END

cc ***************************************************************** c * *c * SUBROTINA PARA DECOMPOR UMA MATRIZ SIMÉTRICA, *c * DENTRO DE UMA MATRIZ TRIANGULAR SUPERIOR *c * *c *****************************************************************c

SUBROUTINE DECOG (A,N,NX)CCC A : ARRAY INCLUINDO A MATRIZ PARA SER DECOMPOSTA.NO FINAL A MATRIZC INCLUI A MATRIZ TRIANGULAR SUPERIOR.CCC N : ORDEM DE AC NX: DIMENSÃO DA LINHA E COLUNA DE AC

IMPLICIT NONEC

INTEGER N, NXINTEGER J, I, I1, I2, LREAL*8 A(NX,NX)REAL*8 D

c IF(A(1,1)) 1, 1, 3

1 WRITE(6,2)2 FORMAT('ZERO OU RADICANDO NEGATIVO')

GO TO 200 c

3 A(1,1) = DSQRT(A(1,1))c

DO 10 J=2,N10 A(1,J) = A(1,J)/A(1,1)

Page 68: Vibrações lineares

68

DO 40 I=2,NI1 = I - 1D = A(I,I)DO 20 L=1,I1

20 D = D - A(L,I) * A(L,I)c

IF(A(I,I)) 1, 1, 2121 A(I,I) = DSQRT(D)

IF(N - I) 45, 45, 4747 I2 = I + 1

DO 40 J=I2,ND = A(I,J)DO 30 L=1,I1

30 D = D - A(L,I) * A(L,J)40 A(I,J) = D/A(I,I)45 DO 50 I=2,N

I1 = I - 1DO 50 J=1,I1

50 A(I,J) = 0.D0cc

200 RETURNEND

cc ***************************************************************** c * *c * SUBROTINA PARA CALCULAR A INVERSA DE UMA MATRIZ *c * TRIANGULAR SUPERIOR *c * *c ***************************************************************** c

SUBROUTINE INVCH (S,A,N,NX)CCC N : ORDEM REAL DE A E SC NX: DIMENSÃO DA LINHA E COLUNA DE A E SC

IMPLICIT NONEC

INTEGER N, NX INTEGER I, J, L, N1, K, I1 INTEGER IK, NKREAL*8 A(NX,NX), S(NX,NX)REAL*8 D

CC INICIALIZAÇÃO DA MATRIZ A

DO I=1,NDO J=1,N

A(I,J) = 0.D0END DO

END DO CC COMPUTAR TERMOS DA DIAGONAL DE AC

DO I=1,NA(I,I) = 1.D0/S(I,I)

END DOC

Page 69: Vibrações lineares

69

C COMPUTAR OS TERMOS DA DIAGONAL KTH DE AC

N1 = N - 1C

DO 100 K=1,N1NK = N - KDO 100 I=1,NK

J = I + KD = 0.D0I1 = I + 1IK = I + KDO 20 L=I1,IK

20 D = D + S(I,L) * A(L,J) 100 A(I,J) = - D/S(I,I)

CC

RETURNEND

cc ***************************************************************** c * *c * SUBROTINA PARA CALCULAR A MATRIZ OPERAÇÃO *c * A = TRANSPOSTA(B) * "A" *c * *c ***************************************************************** c

SUBROUTINE BTAB3 (A,B,V,N,NX)CCC N : ORDEM REAL DE A E BC NX: LINHA E COLUNA DE A E BCC V : VETOR AUXILIARC

IMPLICIT NONEC

INTEGER N, NXINTEGER I, J, K REAL*8 A(NX,NX), B(NX,NX), V(NX)

CC COMPUTAR A * B E ARMAZENA EM AC

DO 10 I=1,NDO 5 J=1,N

V(J) = 0.0DO 5 K=1,N

5 V(J) = V(J) + A(I,K) * B(K,J)DO 10 J=1,N

10 A(I,J) = V(J)C C COMPUTAR TRANSPOSTA(B) * A E ARMAZENA EM AC

DO 20 J=1,NDO 15 I=1,N

V(I)= 0.0DO 15 K=1,N

15 V(I) = V(I) + B(K,I) * A(K,J) DO 20 I=1,N

Page 70: Vibrações lineares

70

20 A(I,J) = V(I)C C

RETURNEND

cc ***************************************************************** c * *c * SUBROTINA PARA CALCULAR OS AUTOVALORES E AUTOVETORES *c * PELO MÉTODO DE JACOBI *c * *c ***************************************************************** c

SUBROUTINE JACOB (A,V,ERR,N,NX)CCCC A : MATRIZ SISTEMA.DEPOIS QUE AS COMPUTAÇÕES SÃO COMPLETADAS,OS C TERMOS DA DIAGONAL SERÃO OS AUTOVALORESC V : CADA COLUNA DESSE ARRAY INCLUIRÁ UMA SÉRIE DE AUTOVETORESC ERR: ERRO ADIMITIDOC N : ORDEM REAL DE AC NX: DIMENSÃO DA LINHA E COLUNA DE ACC

IMPLICIT NONEC

INTEGER N, NXINTEGER ITM, ITINTEGER I, J, M, J1, IR, IC

C REAL*8 A(NX,NX), V(NX,NX) REAL*8 ERRREAL*8 T, T1, PS, TA, C, S, P

C ITM = 10000IT = 0

CC POR UMA UNIDADE MATRIZ EM ARRAY VC

DO 10 I=1,NDO 10 J=1,N

IF(I-J) 3, 1, 33 V(I,J) = 0.D0

GO TO 101 V(I,J) = 1.D0

10 CONTINUEC C ENCONTRAR O MAIOR COEFICIENTE DA DIAGONALC

13 T = 0.D0M = N - 1DO 20 I=1,M

J1 = I + 1DO 20 J=J1,N

IF(DABS(A(I,J)) - T) 20, 20, 22 T = DABS(A(I,J))

IR = I

Page 71: Vibrações lineares

71

IC = J20 CONTINUE

C IF(IT) 5, 4, 5

CC PEGUE O PRIMEIRO MAIOR COEFICIENTE DA DIAGONAL VEZES O ERRO COMO C COMPARAÇÃO C

4 T1 = T * ERR5 IF(T-T1) 999, 999, 6

CC COMPUTE TAN(TA),SIN(S),E COSINE(C) DO ÂNGULO DE ROTAÇÃO C

6 PS = A(IR,IR) - A(IC,IC)TA = (-PS + DSQRT (PS * PS + 4 * T * T))/(2 * A(IR,IC))C = 1.D0/DSQRT(1 + TA * TA)S = C * TA

CC MULTIPLICAR A MATRIZ DE ROTAÇÃO VEZES V E ARMAZENAR EM VC

DO 50 I=1,NP=V(I,IR)V(I,IR) = C * P + S * V(I,IC)

50 V(I,IC) = C * V(I,IC) - S * PI = 1

100 IF(I-IR) 7, 200, 7C C APLICAR TRANSFORMAÇÃO ORTOGONAL PARA A E ARMAZENAR EM AC

7 P = A(I,IR)A(I,IR) = C * P + S * A(I,IC)A(I,IC) = C * A(I,IC) - S * PI = I + 1GO TO 100

200 I = IR + 1300 IF(I - IC) 8, 400, 8

8 P = A(IR,I)A(IR,I) = C * P + S * A(I,IC)A(I,IC) = C * A(I,IC) - S * PI = I + 1GO TO 300

400 I = IC + 1500 IF(I-N) 9, 9, 600

9 P = A(IR,I)A(IR,I) = C * P + S * A(IC,I)A(IC,I) = C * A(IC,I) - S * PI = I + 1GO TO 500

600 P = A(IR,IR)A(IR,IR) = C * C * P + 2. * C * S * A(IR,IC) + S * S * A(IC,IC)A(IC,IC) = C * C * A(IC,IC) + S * S * P - 2. * C * S * A(IR,IC)A(IR,IC) = 0.D0IT = IT + 1

C IF(IT - ITM) 13, 13,999

CC

999 RETURN

Page 72: Vibrações lineares

72

END cc ***************************************************************** c * *c * SUBROTINA PARA MULTIPLICAÇÃO DE: X = S-1 * X' *c * *c ***************************************************************** c

SUBROUTINE MATMB1 (A,B,V,N)CCC N :NUMERO REAL DAS LINHAS E COLUNAS DE E E VC NX:DIMENSÃO DA LINHA E COLUNACC V :ARRAY AUXILIARC

IMPLICIT NONEC

INTEGER NINTEGER I, J REAL*8 A(N,N), B(N), V(N)

CC

DO I=1,NV(I) = 0.0DO J=1,N

V(I) = V(I) + A(I,J)*B(J)END DO

END DOC

DO I=1,NB(I) = V(I)

END DOCC

RETURNEND

c c ***************************************************************** c * *c * SUBROTINA PARA MULTIPLICAÇÃO DE: X = S-1 * X' *c * *c ***************************************************************** c

SUBROUTINE MATMB2 (A,B,V,N)CCC N :NUMERO REAL DAS LINHAS E COLUNAS DE E E VC NX:DIMENSÃO DA LINHA E COLUNACC V :ARRAY AUXILIARC

IMPLICIT NONEC

INTEGER NINTEGER I, J REAL*8 A(N,N), B(N), V(N)

Page 73: Vibrações lineares

73

CC

DO 10 I=1,NV(I) = 0.0DO 10 J=1,N

10 V(I) = V(I) + A(I,J)*B(J)C

DO I=1,NB(I) = V(I)

END DOCC

RETURNEND

c c ***************************************************************** c * *c * SUBROTINA PARA MULTIPLICAÇÃO DE DUAS MATRIZES, *c * X = S-1 * X' *c * *c ***************************************************************** c

SUBROUTINE MATMB3 (A,B,V,N,NX)CCC N :NUMERO REAL DAS LINHAS E COLUNAS DE E E VC NX:DIMENSÃO DA LINHA E COLUNACC V :ARRAY AUXILIARC

IMPLICIT NONEC

INTEGER N, NXINTEGER J, I, K REAL*8 A(NX,NX), B(NX,NX), V(NX)

CC

DO 20 J=1,NDO 16 I=1,N

V(I) = 0.0DO 16 K=1,N

16 V(I) = V(I) + A(I,K)*B(K,J)DO 20 I=1,N

20 B(I,J) = V(I)CC

RETURNEND

c c ***************************************************************** c * *c * SUBROTINA PARA CALCULAR O MENOR AUTOVALOR PELO MÉTODO *c * STODOLLA-VIANELLO *c * *c ***************************************************************** c

SUBROUTINE EIGIS (A,X,N,D)C

Page 74: Vibrações lineares

74

C C ESSE PROGRAMA APLICA O ITERATIVO MÉTODO DE STODOLLA-VIANELLO PARAC COMPUTAR O MAIOR AUTOVALORCC A : MATRIZ SISTEMA.C D : AUTOVALORC Y : A * XC XX : VETOR AUXILIARC N : ORDEM DA MATRIZ SISTEMAC NIM: NÚMERO MÁXIMO DE INTERAÇÕESC TOL: TOLERÂNCIAC

IMPLICIT NONEC

INTEGER N INTEGER I, J, ITER INTEGER NIMREAL*8 A(N,N), X(N)REAL*8 DREAL*8 TOL REAL*8 Y [ALLOCATABLE] (:),

* XX [ALLOCATABLE] (:) C

PARAMETER (TOL = 1.0D-3)PARAMETER (NIM = 100)

C C

ITER = 0ALLOCATE (Y(N)) ALLOCATE (XX(N))

C DO I=1,N

X(I) = 1.D0END DO

C 1 DO I=1,N

XX(I) = X(I)END DO

C ITER = ITER + 1DO 3 I=1,N

Y(I) = 0.D0DO 3 J=1,N

3 Y(I) = Y(I) + A(I,J)*X(J)C

D = Y(1)DO I=1,N

X(I) = Y(I)/DEND DO

C D = Y(1)/X(1)C DO I=1,NC X(I) = Y(I)C END DO C

DO 5 I=1,NIF(DABS(XX(I) - X(I)) - TOL) 5,5,6

5 CONTINUEC

Page 75: Vibrações lineares

75

GO TO 9C

6 IF(ITER - NIM) 1,7,77 WRITE(6,8)8 FORMAT('NUMERO MAXIMO DE INTERACOES ATINGIDO')

CC

9 RETURN END

cc ****************************************************************c * *c * SUBROTINA PARA INVERTER MATRIZES *c ****************************************************************c

SUBROUTINE INVER (A,N)C

IMPLICIT NONEC

INTEGER N INTEGER I, J integer indx [ALLOCATABLE](:)REAL*8 A(N,N)real*8 u1[ALLOCATABLE](:),

* B[ALLOCATABLE](:,:) c cc Alocacao dos vetores e matriz

ALLOCATE (u1(n)) ALLOCATE (indx(n))ALLOCATE (B(n,n))

Cc 1.DECOMPOE A MATRIZ EM LU

call LUDCMP (A,n,n,indx,u1)c c 2.INVERTE A MATRIZ DECOMPOSTAc inverte matriz dos coeficientes

do i=1,ndo j=1,n

B(i,j) = 0.d0end doB(i,i) = 1.d0

end do do j=1,n

call lubksb (A,n,n,indx,B(1,j))end do do i=1,n

do j=1,nA(i,j) = B(i,j)

end doend do

c c Desaloca vetores e matriz

DEALLOCATE (u1) DEALLOCATE (indx)DEALLOCATE (B)

CRETURN

Page 76: Vibrações lineares

76

END Ccc ***********************************************************c * *c * INVERTE A MATRIZ *c * ---------------- *c ***********************************************************c

SUBROUTINE LUBKSB(A,N,NP,INDX,B)c

implicit real*8 (a-h,o-z)c

DIMENSION A(NP,NP),INDX(N), B(N)c

II=0DO 12 I=1,N

LL=INDX(I)SUM=B(LL)B(LL)=B(I)IF (II.NE.0)THEN

DO 11 J=II,I-1SUM=SUM-A(I,J)*B(J)

11 CONTINUEELSE IF (SUM.NE.0.d0) THEN

II=IENDIFB(I)=SUM

12 CONTINUEDO 14 I=N,1,-1

SUM=B(I)IF(I.LT.N)THEN

DO 13 J=I+1,NSUM=SUM-A(I,J)*B(J)

13 CONTINUEENDIFB(I)=SUM/A(I,I)

14 CONTINUEc

RETURNEND

cC c ***********************************************************c * *c * DECOMPOE A MATRIZ EM LU *c * ------------------------ *c ***********************************************************c

SUBROUTINE LUDCMP (A,N,NP,INDX,VV)c

implicit real*8 (a-h,o-z)c

PARAMETER (TINY=1.0d-20)INTEGER N, NPINTEGER INDX(N)REAL*8 A(NP,NP), VV(N)

c

Page 77: Vibrações lineares

77

D = 1.0d0DO 12 I=1,N

AAMAX=0.0d0DO 11 J=1,N

IF (dABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J))11 CONTINUE

IF (AAMAX.EQ.0.0d0) PAUSE 'Singular matrix.'VV(I)=1.0d0/AAMAX

12 CONTINUEDO 19 J=1,N

IF (J.GT.1) THENDO 14 I=1,J-1

SUM=A(I,J)IF (I.GT.1)THEN

DO 13 K=1,I-1SUM=SUM-A(I,K)*A(K,J)

13 CONTINUEA(I,J)=SUM

ENDIF14 CONTINUE

ENDIFAAMAX=0.0d0DO 16 I=J,N

SUM=A(I,J)IF (J.GT.1)THEN

DO 15 K=1,J-1SUM=SUM-A(I,K)*A(K,J)

15 CONTINUEA(I,J)=SUM

ENDIFDUM=VV(I)*dABS(SUM)IF (DUM.GE.AAMAX) THEN

IMAX=IAAMAX=DUM

ENDIF16 CONTINUE

IF (J.NE.IMAX)THENDO 17 K=1,N

DUM=A(IMAX,K)A(IMAX,K)=A(J,K)A(J,K)=DUM

17 CONTINUED = - DVV(IMAX) = VV(J)

ENDIFINDX(J)=IMAXIF(J.NE.N)THEN

IF(A(J,J).EQ.0.0d0)A(J,J) = TINYDUM=1./A(J,J)DO 18 I=J+1,N

A(I,J)=A(I,J)*DUM18 CONTINUE

ENDIF19 CONTINUE

IF(A(N,N).EQ.0.0d0)A(N,N)=TINYc

RETURNEND