Você está na página 1de 77

PUC RIO

PONTIFCIA UNIVERSIDADE CATLICA DO RIO


DE JANEIRO
DEPARTAMENTO DE ENGENHARIA CIVIL

ALEXANDRE DA SILVA GALVO

ANLISE DE SISTEMAS
RETICULADOS ESBELTOS

ESTUDO DIRIGIDO

Orientador:

Paulo Batista Gonalves


PUC - RIO

Co-orientador: Ricardo Azoubel da Mota Silveira


ESCOLA DE MINAS / UFOP

Rio de Janeiro, 1 o semestre de 2001

1
INTRODUO
1.1 OBJETIVO DO TRABALHO

O programa computacional que servir de base ao presente trabalho comeou a


ser desenvolvido por Silveira (1995) que introduziu rotinas capazes de efetuar anlises
lineares e no-lineares (no-linearidade geomtrica) de sistemas estruturais formados
por elementos de prtico plano. Neste programa, para as anlises no-lineares, utilizouse uma formulao de prtico plano baseada no trabalho de Alves (1993), foram
tambm dadas ao usurio opes de estratgias de soluo no-linear (incremento de
carga e de iterao) e impresso de resultados (arquivos de ps-processamento).
Galvo (2000) implementou e estudou diferentes formulaes geometricamente
no-lineares para prticos planos, fazendo um estudo comparativo dessas formulaes
atravs de vrios exemplos numricos.
Alem de possibilitar a anlise de estruturas reticuladas planas com forte nolinearidade como, por exemplo, o prtico em L (Galvo et.al, 2000), as citadas
implementaes permitiram que Gentil (2000), em sua dissertao de mestrado, fizesse
um estudo detalhado de diferentes estratgias de soluo no-linear.
A continuidade natural do presente trabalho ser a expanso do programa para
realizar anlises linear esttica e linear dinmica de trelias e prticos (2D e 3D), e
anlise no-linear esttica e no-linear dinmica de trelias e prticos (2D e 3D);
Por hora, o objetivo acrescentar ao programa as seguintes opes:
(i)

anlise linear esttica:


(i.i) elementos de trelia 2D e 3D;
(i.ii) elementos de prtico 2D e 3D.

(ii)

clculo das freqncias naturais e os respectivos modos de vibrao:


(i.i) elementos de trelia 2D e 3D;
(i.ii) elementos de prtico 2D e 3D.

1.2 PROGRAMA COMPUTACIONAL

Nesta seo ser apresentado, de forma esquemtica, o programa principal que


responsvel pelo gerenciamento das diversas subrotinas implementadas. As subrotinas
referentes ao presente trabalho sero mostradas detalhadamente no Captulo 3.
A organizao do programa pode ser resumida conforme o esquema apresentado
pela Figura 1.1.
INCIO

ENTRADA de DADOS

ANLISE do PROBLEMA
(Subrotina SOLUC)

SOLUO LINEAR
(Subrotina SOLL)
Esttica
-trelia 2D
-trelia 3D
-prtico 2D
-prtico 3D

SOLUO NO-LINEAR
(Subrotina SOLNL)

Dinmica
-trelia 2D
-trelia 3D
-prtico 2D
-prtico 3D

Prtico

SADA de RESULTADOS
(Ps-processador)
FIM

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 nmero de pontos nodais, de elementos e condies de contorno; as propriedades
fsicas dos materiais que compem a estrutura; e o carregamento externo atuante.
Caso se deseje realizar uma anlise linear esttica, os passos seguintes so a
montagem do vetor de foras externas F e da matriz de rigidez linear KL, podendo
assim calcular os deslocamentos nodais atravs de KL u = F. Para a anlise linear
dinmica, deve-se obter ainda a matriz de massa K m, e resolver o problema de autovalor ( KL - 2 K m )u, obtendo assim as freqncias naturais e os modos de vibrao da
estrutura.

Caso a anlise no-linear seja escolhida pelo usurio, o passo seguinte a leitura
dos dados de entrada complementares, onde esto as informaes necessrias a esse tipo
de anlise, como, por exemplo, a formulao no-linear a ser empregada, a estratgia de
soluo, o valor inicial do parmetro de carga, o nmero de incrementos, o critrio de
convergncia, o nmero mximo de iteraes por incremento, e outros parmetros
relativos estratgia de soluo escolhida.
Aps a leitura dos dados chamada a subrotina LOADF para montagem do vetor
de cargas de referncia F r. Entra-se ento no processo incremental-iterativo de soluo,
que resumido a seguir:

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

formulao escolhida, e obtm-se os deslocamentos nodais tangenciais u T ;

calcula em SCALUP a soluo predita, 0 e u 0 , de acordo com a estratgia de

incremento de carga escolhida;

corrige a soluo predita pelo processo iterativo na subrotina ITER;

em NEXINC so feitas as atualizaes dos parmetros para o prximo incremento

de carga;

se o nmero de passos de carga menor do que o desejado recomea-se o processo.


Os resultados so ento apresentados em arquivos de sada. O arquivo gerado com

extenso (.dat) pode ser lido, por exemplo, pelo software GRAPHER, que possibilita a
impresso das diversas curvas necessrias visualizao da anlise; o arquivo neutro
DEPOS pode ser utilizado no ps-processador grfico, implementado em linguagem
FORTRAN por Silveira (1995), para a visualizao das configuraes deformadas do
sistema estrutural analisado; o arquivo de sada RELAT.S contm informaes sobre as
ocorrncias do processo de soluo.

1.3 ORGANIZAO DO TRABALHO


No Captulo 2 sero apresentados os elementos finitos de trelia e de prtico,
planos e espaciais. Neste Captulo sero definidas as matrizes de rigidez, de massa e de
rotao para cada tipo de elemento.
As implementaes computacionais do presente trabalho sero abordadas no
Captulo 3, com um melhor detalhamento das principais subrotinas.
No Captulo 4 sero analisados alguns exemplos numricos encontrados na
literatura para validar as implementaes discutidas no Captulo 3.

2
ELEMENTOS FINITOS

2.1 INTRODUO
Com vista em estruturas reticuladas de comportamento linear-elstico, dois tipos
de problemas sero abordados neste trabalho:
i)

Anlise Esttica: a soluo desse tipo de problema consiste em resolver

um sistema de NGL equaes, onde NGL o nmero de graus de liberdade do sistema


estrutural em questo. Para haver equilbrio esttico numa estrutura, a soma das foras
externas Fi e o dos esforos internos Fii, correspondentes ao mesmo grau de liberdade
genrico i, devem se anular. No mtodo da rigidez o problema colocado da seguinte
forma:
F KL u

(1)

onde F o vetor de foras externas, KL a matriz de rigidez linear e u so os


deslocamentos nodais a serem obtidos.
ii)

Anlise Dinmica: no presente trabalho pretende-se obter as freqncias

naturais i e os modos de vibrao correspondentes ui para os diversos tipos de


elementos propostos. Para isso, basta resolver um problema de vibrao livre do tipo:
( K L - 2 M ) u 0

(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 genrico seja resolvido deve-se definir
priori as matrizes de rigidez e de massa elementares num sistema local. As matrizes do
sistema so montadas fazendo-se a somatria das matrizes elementares, devidamente
transformadas para o sistema global atravs da matriz de rotao R, e levando-se em
conta as restries de cada problema.

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


elemento finito atravs da energia interna de deformao atravs da expresso:
kL
ij

2U L
u iu j

(3)

Sendo que UL a parcela linear da energia de deformaes internas em termos dos


deslocamentos nodais ui. Isto feito obtendo-se os deslocamentos em funo dos
deslocamentos nodais atravs de funes de interpolao.
A matriz de massa consistente pode ser obtida atravs da seguinte expresso:
(4)

M f T f dvol
vol

onde a densidade de massa do material e f a matriz que contm as funes de


interpolao.
A seguir sero apresentadas as matrizes de rigidez, de massa e de rotao para
cada elemento finito considerado no estudo.

2.2 TRELIA PLANA


A Figura 2.1 ilustra o elemento de trelia plana, destacando os seus 6 graus de
liberdade.

Figura 2.1: elemento de trelia plana.

Para aproximar os deslocamentos desse elemento so utilizadas funes de forma


lineares, que so agrupadas em f da seguinte maneira:
0
L-x
f
0 L-x

x
0

0
x

(5)

2.2.1 Matriz de Rigidez

KL

1
EA 0

L 1
0

0
0
0
0

1
0
1
0

0
0
0
0

(6)

2.2.2 Matriz de Massa

AL
M

2
0
1
0

0
2
0
1

1
0
2
0

0
1
0
2

(7)

2.3 PRTICO PLANO


O elemento de prtico plano sujeito a deformaes axiais e de flexo. Os 6 graus
de liberdade desse elemento so mostrados na Figura 2.2.

Figura 2.2: elemento de prtico plano.

Para que haja continuidade de deslocamentos e rotao nos bordos dos elementos
adjacentes, suficiente considerar, para aproximar o deslocamento axial, uma funo
linear, enquanto para a componente transversal deve ser usada uma funo do terceiro
grau.

0
1- L
f
2
3
0 1 - 3x + 2x
2
3

L
L

L
x-

2x 2
L

x3
+
2
L

3x 2
2x 3
2
3
L
L

(8)

2
3
x
x

2
L
L
0

2.3.1 Matriz de Rigidez


EA
0
L

12EI

L3

KL
Simtrica

6EI
L2
4 EI
L

L
12 EI 6EI

0
L3
L2
6 EI 2 EI
0

2
L
L

EA
0
0

L
12 EI
6 EI

3
2
L
L
4 EI
L
EA

(9)

2.3.2 Matriz de Massa


0
0
140

156 22L

AL
4 L2
M

420
Simtrica

70
0

0
54

0 13L
140

0
156

2
- 13L

- 3L2

22L
2
4L
0

(10)

2.4 TRELIA ESPACIAL


O elemento de trelia espacial apresenta 6 graus de liberdade conforme est
mostrado na Figura 2.3.
Y

2
6
1
3
z
X

Z
Figura 2.3: elemento de trelia espacial.
Assim como foi feito para o elemento finito de trelia plana, para o elemento de
trelia espacial so utilizadas funes de forma lineares, que so agrupadas em f da
seguinte maneira:
x

1- L

f 0

x
L

L
x

1-

1-

(10)

2.4.1 Matriz de Rigidez


1
0

EA 0
KL

L 1
0

10

(11)

2.4.2 Matriz de Massa


0
2

AL
M

6 Simtrica

0
0

1
0

0
1

0
0

0
2

0
0

1
0

0
2

(12)

2.5 PRTICO ESPACIAL


O elemento de prtico espacial possui graus de liberdade axiais, flexionais e de
rotao em torno do eixo longitudinal, num total de 12 graus de liberdade conforme
ilustrado na Figura 2.4.
11
8

10

12
3

6
z
X

Z
Figura 2.4: elemento de prtico espacial.
Da mesma forma que para o elemento de prtico plano, ser usada uma funo
linear para os deslocamentos axiais e uma funo do terceiro grau para as componentes
transversais. conveniente agrupar as funes lineares que aproximam os
deslocamentos de toro em um vetor fT.

11

f f1

f2

(13)

f T 0 0 0 1 - x/L 0 0 0 0 0 x/L 0 0

onde:

x
1L

f1 0

L
f2 0

0
1-

2
3
3x
2x
+
2
3
L
L
0

1-

2
3
3x
2x
+
2
3
L
L

2
3
3x
2x
L2
L3

2
L

2x 3

3
L

x2
L

(14)

L
3x 2

2
3
2x
x
0
x+
2
L
L

2
3
2x
x

-x
0
2
L
L

x3
2
L

3
x
L2

(15)

A matriz de massa do elemento de prtico plano pode ser obtida pela seguinte
L

expresso: M A 0 f T f dx J 0 f TT f T dx .

12

2.5.1 Matriz de Rigidez

KL

EA
L

EA

L
12

EIz

L3
12

EIy

L3

GIx

EIy

EIz

L2
0

L2
0

12

EIz
L3
0

- 12

EIy

L2

EIy

L2

GIx

L
4

EIy

L
Simtrica

L3

EIz

EIz

L
EA

EIz
L2
0

EIy
L2
0

EIy

L
0

EIz
L
0

L
12

EIz
L3
12

EIy
L3

GIx

-6

EIz
L2

EIy

L2
0

L
4

EIy

L
4

EIz
L

13

(16)

2.5.2 Matriz de Massa

AL
420

140

70

156

22L

54

156

54

13L

2
4L

22 L

140Ix
A

Simtrica

4L

70Ix

- 13L

2
3L

1 3L

156

- 22L

156

22 L

2
4L

140

140Ix
A

- 13L

2
- 3L

2
4L

(17)

2.6 ROTAO DOS ELEMENTOS


Como j dito acima, para se fazer transformaes entre os sistemas locais de cada
elemento e o sistema global da estrutura necessrio se definir para cada elemento da
estrutura a sua matriz de rotao.
2.6.1 Rotao de Elementos Finitos Planos
A matriz de rotao de elementos planos pode ser obtida de forma trivial
conforme ilustra a Figura 2.5.

v2
y

u2

v1

u1

Figura 2.5: Rotao de eixos no plano.

14

Assim, tem-se de forma geral:


0
Rs

(18)

Cy sen

(19)

Rs
R
0
sendo os cossenos diretores:
Cx cos

que podem ser colocados em funo das coordenadas nodais como:


Cx

x 2 x1
L

Cy

y 2 y1
L

(20)

onde xi e yi so as coordenadas do n i e L o comprimento do elemento finito.


tem-se para um elemento de trelia plana:
Cx
Rs
Cy

Cy
Cx

(21)

Para um elemento de prtico plano deve-se incluir a parcela referente s rotaes


que, por serem planas, no sofrero rotao, tem-se, portanto:
Cx
Rs Cy
0

15

Cy
Cx
0

0
0
1

(22)

2.6.2 Rotao 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 espao necessrio se saber
a rotao dos eixos transversais y e z em torno do eixo axial x.
x

N2

N1

x
z

z
Z

Figura 2.6: Rotao do eixo x no espao.


A seguir mostrada a forma de gerar a matriz de rotao para elementos
reticulados no verticais, sugerida por Weaver e Gere (1980).
Inicialmente calculada a matriz de rotao 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 y

x
Figura 2.7.rotao em torno de Y.

16

Fazendo-se:
(23)

Cxz Cx 2 Cy 2
tem-se:
cos

Cx
Cxz

sen

Cz
Cxz

(24)

Cz
Cxz
0

Cx
Cxz

(25)

e a matriz de rotao Rs dada por:


Cx
Cxz
R s 0

- Cz
Cxz

0
1
0

Em seguida, calculada a matriz de rotao, para o elemento rotacionado de em


torno do eixo z,como mostra a Figura 2.8.

Y y

z z
Figura 2.8:rotao em torno de z.
Sabendo-se que:
cos Cxz e sen Cy

(26)

a matriz de rotao Rs dada por:


Cxz
Rs Cy
0

17

Cy
Cxz
0

0
0
1

(27)

Deve-se, agora considerar uma rotao em torno do eixo axial x,como mostra a Figura
2.9.
y
y

z z

z
Figura 2.9:rotao em torno de x.
Sabendo-se que:
C cos e S sen

(28)

a matriz de rotao Rs dada por:


1
R s 0
0

0
C
- S

0
S
C

(29)

Finalmente, a matriz de rotao de um elemento de prtico espacial no-vertical


dada por:
Rs
0
R
0

0 0 0
Rs 0 0
0 Rs 0

0
0 Rs

(30)

onde Rs = RsRsRsou seja:

Cx
CxCyC CzS
Rs
Cxz

CxCyS CzC

Cxz

Cy
Cxz C
- CxzS

18

Cxz

CyCzS CxC

Cxz
Cz
CyCzC CxS

(31)

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


rotao, conforme mostra a Figura 2.10, dada por:
0
Rs S C
S S

S
0
0

C
0

(32)

onde S = Sinal de (y2-y1).

Y
x
N2

X
N1

Figura 2.10: elemento vertical.


A matriz de rotao para um elemento de trelia obtida atravs de:
Rs
R
0

0
Rs

(33)

Como um elemento de trelia s est sujeito esforos e deslocamentos axiais, a


orientao dos eixos da seo transversal no importa, assim, Rs atravs da expresso
(31) ou (32), assumindo-se = 0.

19

3
PROGRAMA COMPUTACIONAL

3.1 INTRODUO
No Captulo 1 foi apresentado um esquema geral do programa utilizado como
base do trabalho. A Figura 3.1 ilustra mais uma vez esse programa.
Neste captulo pretende-se detalhar melhor as subrotinas de soluo linear
desenvolvidos no presente trabalho.

Soluo Linear

Soluo no-linear

LEITURA de
DADOS-1

MONTAGEM do VETOR
de FORAS EXTERNAS F
(subrotina LOADF)
Soluo
Dinmica

MONTAGEM da MATRIZ
de MASSA Km

LEITURA de
DADOS-2

MONTAGEM do VETOR de
CARGAS de REFERNCIA Fr

MONTAGEM da
MATRIZ de RIGIDEZ
LINEAR KL
(subrotina STIFK0)

MONTAGEM da MATRIZ de
RIGIDEZ K
(Subrotina MATRIG)

CLCULO
das
FREQUENCIAS
NATURAIS
e
MODOS de
VIBRAO

Processo incremental iterativo

Soluo Esttica

CLCULO dos
DESLOCAMENTOS
NODAIS u

CLCULO de e u
(Subrotina SCALUP)

PROCESSO ITERATIVO
(Subrotina ITER)

CLCULO DE PARMETROS
do PRXIMO INCREMENTO
(Subrotina NEXINC)

ARQUIVOS de
SADA

Figura 3.1 Programa principal.

20

3.2 SUBROTINA SOLL


Essa subrotina responsvel pelo gerenciamento dos algoritmos de soluo linear.

Monta a matriz de rigidez global do sistema atravs da subrotina STIFK0.

Se a anlise for linear esttica:


monta o vetor de carregamento externo.
Calcula os deslocamentos nodais resolvendo o sistema KL u = F atravs
de fatorizao de Crout.
calcula os esforos em cada barra e imprime no arquivo de sada,
subrotina STRESF.

Se a anlise for de vibrao livre:


monta a matriz de massa global do sistema, subrotina MATMAS.
calcula as freqncias naturais e os modos de vibrao do sistema,
resolvendo o problema de autovalor ( KL - 2 Km )u, subrotina EIGG.
Imprime as freqncias naturais e os modos de vibrao no arquivo de
sada.

Retorna ao programa principal.

3.3 SUBROTINA STIFK0


Essa subrotina responsvel pelo montagem da matriz de rigidez global do
sistema.

Monta a matriz de rigidez de cada elemento:


Calcula a matriz de rotao do elemento (Equaes 6, 9, 11 ou 16).
Calcula a matriz de rigidez do elemento no sistema local (Equaes 18,
30 ou 33).
Calcula a matriz de rigidez do elemento no sistema global atravs da
matriz de rotao: Kg = Rt K R.
Armazena a matriz elementar Kg na matriz de rigidez global do sistema.

Fim da subrotina STIFK0.

21

3.4 SUBROTINA STRESF


Subrotina para calcular e imprimir as forcas resultantes nos elementos.

Elementos de trelia (2D ou 3D):


Para cada elemento da estrutura:
Identifica a numerao do grau de liberdade inicial de cada n.
Calcula os cossenos diretores da barra.
Obtm os deslocamentos em coordenadas globais
Calcula os esforos normais na barra.
Calcula as reaes globais nos ns.
Imprime no arquivo de sada os esforos axiais e as reaes nodais.

Elementos de prtico (2D e 3D)


Para cada elemento da estrutura:
Identifica a numerao do grau de liberdade inicial de cada n.
Calcula a sub-matriz de transformao Rs da barra.
Obtm os deslocamentos em coordenadas globais
Calcula os deslocamentos no sistema local atravs de Rs.
Obtm a matriz de rigidez local da barra.
Calcula os esforos locais na barra.
Obtm os esforos em coordenadas globais atravs de Rs.
Calcula as reaes globais nos ns.
Imprime no arquivo de sada os esforos nas barras e as reaes 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 numerao do grau de liberdade inicial de cada n.
Calcula a matriz de rotao.
Calcula a matriz de massa no sistema local
Atravs da matriz de rotao do elemento calcula a matriz de massa no
sistema global.
Armazena na matriz de massa global do sistema.

22

Fim da subrotina MATMAS.

3.6 SUBROTINA EIGG


Subrotina para o clculo de autovalores e autovetores.

Inverte a matriz de massa usando o mtodo de Choleski.

Calcula A = Km-1 KL

Calcular os autovalores e autovetores de A pelo mtodo de Jacobi

Fim da subrotina EIGG.

As subrotinas em cdigo FORTRAN sero apresentadas nos APNDICES.

23

4
EXEMPLOS NUMRICOS

4.1 INTRODUO
Para avaliar a eficincia das implementaes computacionais, neste captulo sero
analisados alguns problemas estruturais encontrados na literatura.
Para avaliar a implementao da soluo linear esttica, na Seo 4.2 ser
analisado um exemplo para cada tipo de elemento finito implementado.
O mesmo procedimento feito na Seo 4.3 para avaliar a soluo da anlise de
vibrao livre implementada.

4.2 ANLISES ESTTICAS

4.2.1 Trelia plana


O primeiro exemplo analisado a trelia plana mostrada na Figura 4.1.
Os resultados obtidos no presente trabalho so apresentados na Figura 4.2 e
concordam exatamente com os obtidos numericamente por Smith e Griffiths (1999).

1
3

4
E = 2 x 10
A = 1.0

4
5

10

6
2
4

10
5

Figura 4.1: trelia plana.

24

6
4

Figura 4.2: Trelia plana: resultados.

25

4.2.2 Prtico Plano


A anlise do prtico plano da Figura 4.3 no presente trabalho apresentou
exatamente os mesmos resultados apresentados por Brebbia e Ferrante(1986) e so
mostrados na Figura 4.4

40000
30000
2
1
1

40000

250
7

4
1000

1000

3
8

E = 21000000
A1 = A3 = 400
A2 = A4 = A5 = A6 = A7 = 200
I1 = I3 = 6666
I2 = I4 = I5 = I6 = I7 = 13333
Figura 4.3: prtico plano.

26

600

Figura 4.4: prtico plano: resultados.

4.2.3 Trelia espacial


A trelia espacial ilustrada na Figura 4.5 apresentou no presente trabalho os
resultados mostrados na Figura 4.6, que so exatamente iguais aos obtidos por Smith e
Griffiths (1999).
z
Q (20,-20,30)
(2,1.5,3)

E = 5 x 10
A = 1.0

4
1
3

2
1
(0,0,0)

3
2
(3.5,2,0)
(1.25,3,0)

Figura 4.5: trelia espacial.

27

4
(4,1,0)

Figura 4.5: trelia espacial: resultados.

28

4.2.4 Prtico espacial


A anlise do prtico espacial mostrado na Figura 4.6 apresentou no presente
trabalho os resultados mostrados na Figura 4.7, que so iguais aos obtidos por Smith e
Griffiths (1999).

y
100

2 = 0 0

1 = 00

1
1
L

Figura 4.6: prtico espacial.

Figura 4.7: prtico espacial: resultados.

29

3 = 90

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

4.3 ANLISES DE VIBRAO LIVRE


Nos exemplos seguintes, foi admitido um erro limite igual a 10-12 no clculo dos
autovalores pelo mtodo de Jacobi.

4.3.1 Trelia plana


O primeiro exemplo analisado a trelia plana mostrada na Figura 4.8. A Figura 4.9
mostra as freqncias naturais e os modos de vibrao encontrados. Esses resultados
coincidem com os obtidos por Mario Paz (1997).

2
60

E = 30000000
A = 10
= 0.01

2
1
1

60
Figura 4.8: Trelia plana.

Figura 4.9: Trelia plana: resultados.

30

4.3.2 Prtico plano


O prtico plano da Figura 4.10 foi analisado e as freqncias naturais e os modos
de vibrao encontrados so mostrados na Figura 4.11. Esses resultados so bem
prximos dos obtidos por Brebbia e Ferrante (1986).
4

5
4

2
1

E = 2500000
= 0.0025
A1 = A2 = A 5 = A6 = 100
I1 = I2 = I5 = I6 = 833.33
A3 = A 4 = 150
I3 = I4 = 2812.5

Figura 4.10: Prtico plano.

31

32

Figura 4.11: Prtico plano: resultados.

33

4.3.3 Trelia espacial


O prximo exemplo analisado a trelia espacial mostrada na Figura 4.12. A
Figura 4.13 mostra as freqncias naturais e os modos de vibrao encontrados. Esses
resultados so bem prximos dos obtidos por Mario Paz (1997).
z

50
4

100

7
4

4
5

100

2
1

100

x
E = 30000000
A= 10.0
= 0.01

50
y

Figura 4.12: Trelia espacial.

Figura 4.13: Trelia espacial: resultados.

34

4.3.4 Prtico espacial


O prtico espacial mostrado na Figura 4.14 foi analisado, e os resultados obtidos
no presente trabalho so mostrados na Figura 4.15. Esses resultados so bem prximos
dos obtidos por Mario Paz (1997).
y

3
L

L
x

4
L

L
5

Figura 4.14: Prtico espacial.

35

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

Figura 4.14: Prtico espacial: resultados.

36

5
CONCLUSES
5.1 CONCLUSO

Neste trabalho foram implementadas rotinas computacionais clssicas para


realizar anlises lineares esttica e de vibrao livre em sistemas estruturais
formados por elementos de trelia plana, trelia espacial, prtico plano e prtico
espacial.
Resumidamente, para a anlise linear esttica, os procedimentos implementados
foram a montagem do vetor de foras externas F e da matriz de rigidez linear KL ,
e em seguida o clculo dos deslocamentos nodais atravs de KL u = F. Para a
anlise de vibrao livre calculada a matriz de massa consistente K m, e em
seguida resolvido o problema de auto-valor ( KL - 2 Km )u pelo mtodo de Jacobi,
obtendo assim as freqncias naturais e os modos de vibrao da estrutura.
Estas implementaes foram abordadas no Captulo 3 e sua eficincia foi testada
atravs de exemplos numricos com resultados conhecidos na literatura.

37

REFERNCIAS BIBLIOGRFICAS

A.S. Galvo, (2000), Formulaes No-Lineares de Elementos Finitos para


Anlise de Sistemas Estruturais Metlicos Reticulados Planos, Dissertao de Mestrado,
UFOP, Ouro Preto.

A. S. Galvo, R.A. M. Silveira, and P.B. Gonalves, (2000), Buckling And PostBuckling 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, Estratgias Numricas para Anlise de Elementos Estruturais


Esbeltos Metlicos, Dissertao de Mestrado, UFOP, Ouro Preto.

Silveira, R.A.M. (1995). Anlise de Elementos Estruturais Esbeltos com Restries


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.

38

APNDICE A
SUBROTINAS PARA EXECUTAR A SOLUO LINEAR

c
c
c
c
c
c
c
c
c

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

subroutine soll (neq,coord,gama,ndsup,nddof,idel,mats,secs,


eload,szero,dr,qfi,ptt,d,il,kgl,kmgl,ql,qll,cc)

c
implicit none
c
c--- VARIAVEIS GLOBAIS
integer neq, npoin, nelem, ndime, nmats, npmat, nsecs
integer npsec, ncase, ntype, nplot, nnode, ndofn, ineq
integer idel(4,*), ndsup(ndofn,*), nddof(ndofn,*), il(npoin,*)
c
real*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
c
character*4 cc
c
c--- VARIAVEIS LOCAIS
integer icase, iwrit, iwr , rel, ndofe, i, j
c
c--- VARIAVEIS ALOCVEIS
real*8 REAC[ALLOCATABLE] (:),
$
TK [ALLOCATABLE] (:,:),
$
TM [ALLOCATABLE] (:,:),
$
H
[ALLOCATABLE] (:,:),
$
V
[ALLOCATABLE] (:),
$
X
[ALLOCATABLE] (:)
c
c--- BLOCOS DE COMMONS
common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,
$ntype,nplot,nnode,ndofn
c
c--- DEFINIES
ndofe = npoin*ndofn
ERR = 1.d-12
c
c--- ALOCAO DE VARIVEIS

39

ALLOCATE
ALLOCATE
ALLOCATE
ALLOCATE
ALLOCATE
ALLOCATE

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

c
c--- INICIALIZAAO DE VARIVEIS
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)
c
c--- MONTAGEM DO VETOR DE CARGAS
DO icase=1,ncase
if ((cc == 'load')) then
write(2,223)
223
format
(6x,'___________________________________________________
$________________________________________________',//,
$'
FIXED LOAD',/,
$
'
==========',/)
CALL LOADF (icase,coord,nddof,idel,eload,szero,qfi,gama)
end if
c
c---

ANLISE LINEAR ESTTICA ---------------------------------------IF (ntype .le. 3) THEN

c
c--- FAZ A FATORIZACAO DE CROUT
iwrit = 0
iwr
= 2
rel
= 1
CALL CROUT (kgl,d,neq,iwrit,iwr,rel)
c
c--- RELACIONA QFI COM QL (para o POS-3D)
do ineq=1,neq
ql(ineq) = qfi(ineq)
end do
c
c--- APLICA A SUBSTITUICAO "FORWARD" E "BACKWARD" NO VETOR QFI USANDO
KGL
CALL SOLVCR (kgl,d,qfi,neq,iwrit,iwr,rel)
c
c--- IMPRIME OS DESLOCAMENTOS DOS NOS
CALL WRDISP (npoin,nddof,ndofn,qfi,ntype)
c
c--- CALCULA OS ESFORCOS NA BARRA
CALL STRESF (nelem,npoin,ndime,nddof,idel,mats,npmat,secs,
$
npsec,szero,qfi,ndofn,nnode,ntype,coord,gama,REAC)
c
c--- PLOTA A MALHA E/OU A DEFORMADA
CALL GERAP (npoin,ndofn,nddof,qfi,ptt)
CALL GERAP (npoin,ndofn,nddof,ql,qll)

40

if((nplot.ne.0).and.(ndime.eq.2)) then
CALL PPLOTF (coord,idel,ptt,il,dr,ndofn,ndime,nnode,4)
end if
c
c--- GERA ARQUIVO NEUTRO PARA O POS-3D
if((nplot.ne.0).and.(ndime.eq.2)) then
CALL POS3D (ndsup,coord,idel,mats,secs,qll,ptt,szero)
end if
c
c--- ANLISE VIBRAO LIVRE ---------------------------------------ELSE IF (ntype .gt. 3) THEN
c
c--- MONTA A MATRIZ DE MASSA
call matmas (neq,coord,gama,nddof,idel,mats,secs,kmgl)
c
c--- CALCULA OS MODOS E AS FREQUENCIAS NATURAIS
do i=1,neq
do j = 1,neq
TK(i,j) = kgl(i,j)
TM(i,j) = kmgl(i,j)
end do
end do
c
call EIGG(TK,TM,H,V,ERR,neq,neq,X,D,3)
call printEV (TK,TM,neq)
END IF
c
END DO
DEALLOCATE (REAC)
c
return
end
c
c
c
c
c *****************************************************************
c *
*
c *===============================================================*
c *
SUBROTINA PARA IMPRIMIR OS DESLOCAMENTOS NODAIS
*
c *===============================================================*
c *
*
c *****************************************************************
c
subroutine wrdisp (npoin,nddof,ndofn,fu,ntype)
c
c--- VARIAVEIS GLOBAIS
integer npoin,ndofn,ntype
integer nddof(ndofn,*)
real*8 fu(*)
c
c--- VARIAVEIS LOCAIS
integer n,i
real*8 nddisp[ALLOCATABLE] (:)
c
c--- ALOCA VARIAVEIS
ALLOCATE (nddisp(ndofn))
c

41

c--- IMPRIME NO ARQUIVO DE SADA


if ((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)
c
100 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NODAL DISPLACEMENTS :',/,
$
'
===================',//,'
NODE',
$4X,'DISP. X',8X,'DISP. Y',/)
c
101 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NODAL DISPLACEMENTS :',/,
$
'
===================',//,'
NODE',
$4X,'DISP. X',8X,'DISP. Y',8X,'ROTACAO',/)
c
102 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NODAL DISPLACEMENTS :',/,
$
'
===================',//,'
NODE',
$4X,'DISP. X',8X,'DISP. Y',8X,'DISP. Z',/)
c
103 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NODAL DISPLACEMENTS :',/,
$
'
===================',//,'
NODE',
$4X,'DISP. X',8X,'DISP. Y',8X,'DISP. Z',8X'ROT. X',8X,'ROT. Y',
$8X,'ROT. Z',/)
c
c--- IMPRIME OS DESLOCAMENTOS
do n=1,npoin
call dispnd(n,nddof,fu,nddisp,ndofn)
write(2,110) n,(nddisp(i),i=1,ndofn)
end do
c
110 format(4x,i5,6e15.6)
c
DEALLOCATE (nddisp)
c
return
end
c
c *****************************************************************
c *
*
c *===============================================================*
c *
SUBROTINA PARA IMPRIMIR AS FREQUENCIAS NATURAIS
*
c *
E OS MODOS DE FLAMBAGEM
*
c *===============================================================*
c *
*
c *****************************************************************
c

42

subroutine printEV (TK,TM,neq)


c
c--- VARIAVEIS GLOBAIS
integer neq
real*8 TK(neq,*),TM(neq,*), T
real*8 c,d
c
c--- VARIAVEIS LOCAIS
integer i,j
real*8 Pi
c
c--- DEFINE Pi
pi = 4.d0 * datan(1.0d0)
c
c--- 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',/)
c
200 format(4x,i5,2e15.6)
c
c--- IMPRIME OS MODOS NATURAIS
write(2,300)
do i=1,neq
write(2,400) i,(TM(j,i),j=1,neq)
end do
c
300 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NATURAL MODES:',/,
$
'
==============')
c
400 format(/'
MODE NUMBER: ',i4,/(2x,5e15.6))
c
500 format
(6x,'______________________________________________________
$_____________________________________________')
c
c--- IMPRIME OS MODOS NATURAIS NORMALIZADOS
write(2,600)
c
600 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NORMALISED NATURAL MODES:',/,
$'
========================')
c

43

do i=1,neq
d = 0.d0
c
do j = 1,neq
c = TM(j,i)
if ((dabs(c) .gt. d).and.(c /= 0.d0)) d = dabs(c)
end do
c
write(2,400) i,(TM(j,i)/d,j=1,neq)
end do
c
write(2,500)
c
return
end
c

44

APNDICE B
SUBROTINAS PARA CALCULAR A MATRIZ DE RIGIDEZ LINEAR
GLOBAL DO SISTEMA.
c
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*===============================================================*
*
SUBROTINA PARA MONTAR A MATRIZ DE RIGIDEZ GLOBAL
*
*===============================================================*
*
*
*****************************************************************

subroutine stifk0 (neq,coord,gama,nddof,idel,mats,secs,kgl)


c
c--- VARIAVEIS GLOBAIS
integer neq, npoin, nelem, ndime, nmats, npmat, nsecs, npsec
integer ncase, ntype, nplot, nnode, ndofn
integer 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
c
c--- VARIAVEIS LOCAIS
integer noi, noj, sc, mt, ielem, ndofe
real*8 length
c
real*8 trn[ALLOCATABLE] (:,:),
$
kel[ALLOCATABLE] (:,:),
$
kegl[ALLOCATABLE] (:,:),
$
keg[ALLOCATABLE] (:,:)
c
c--- BLOCO DE COMMON
common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,
$ntype,nplot,nnode,ndofn
c
c--- ALOCA AS MATRIZES
ndofe = nnode*ndofn
ALLOCATE (trn(ndofe,ndofe))
ALLOCATE (kel(ndofe,ndofe))
ALLOCATE (kegl(ndofe,ndofe))
ALLOCATE (keg(ndofe,ndofe))
c
c--- INICIALIZACAO DE KGL
call rzero (kgl,neq*neq)
c
c--- MONTA A MATRIZ DE RIGIDEZ DE CADA ELEMENTO
DO IELEM=1,NELEM
c
c--- IDENTIFICA OS NOS I e J, A SEO e O MATERIAL DE CADA ELEMENTO

45

noi
noj
sc
mt

=
=
=
=

idel(1,ielem)
idel(2,ielem)
idel(3,ielem)
idel(4,ielem)

c
c--- CALCULA A MATRIZ DE ROTAO
call brtnr (noi,noj,coord,gama(ielem),trn,length,
$
ndofe,ntype,ndime)
c
c--- INICIALIZA VARIAVEIS
E = 0.d0
G = 0.d0
A = 0.d0
Jt = 0.d0
Iy = 0.d0
Iz = 0.d0
c
c--- 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)) then
E = mats(1,mt)
A
= secs(1,sc)
Iz = secs(2,sc)
else if ((ntype .eq. 3).or.(ntype .eq. 7)) then
E = mats(1,mt)
G
= mats(2,mt)
A
= secs(1,sc)
Jt = secs(2,sc)
Iy = secs(3,sc)
Iz = secs(4,sc)
end if
call brkel (E,G,A,Jt,Iy,Iz,length,kel,ndofe,ntype)
c
c--- CALCULA A MATRIZ DE RIGIDEZ DO ELEMENTO NO SISTEMA GLOBAL:
c
[keg] = [trn]t . [kel] . [trn]
call mtrans (ndofe,ndofe,kel,trn,keg,kegl)
c
c--- ARMAZENA [keg] NA MATRIZ DE RIGIDEZ GLOBAL DO SISTEMA [KGL]
call assemb (ielem,neq,nnode,ndofn,nelem,idel,nddof,kgl,keg)
c
c--- ARMAZENA [kegl] = [R]t.[kel] EM DISCO NO ARQUIVO F3.tmp
write(3) kegl
c
END DO
c
DEALLOCATE (trn)
DEALLOCATE (kel)
DEALLOCATE (kegl)
DEALLOCATE (keg)
c
return
end

46

c
c
c
c
c
c
c
c
c

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

subroutine brkel (E,G,A,Jt,Iy,Iz,L,kel,ndofe,ntype)


c
c--- VARIAVEIS GLOBAIS
integer ndofe,ntype
real*8 E,G,A,Jt,Iy,Iz,I,L,kel(ndofe,ndofe)
c
c--- VARIAVEIS LOCAIS
integer k,j
real*8 a1, a2, a3, a4, a5, a6, a7, a8
c
c--- DEFINICAO DOS ELEMENTOS
c
c--- INICIALIZANDO kel
call rzero (kel,ndofe*ndofe)
c
c--- PARA ELEMENTO DE TRELIA PLANA -----------------------------------c
IF ((ntype.eq.0).or.(ntype .eq. 4)) then
c
kel(1,1) =
e*a/l
kel(1,3) = -e*a/l
kel(3,1) = -e*a/l
kel(3,3) =
e*a/l
c
c--- PARA ELEMENTO DE PRTICO PLANO --------------------------------c
ELSE IF ((ntype.eq.1).or.(ntype .eq. 5)) then
c
I = Iz
c
kel(1,1) =
e*a/l
kel(4,1) = - kel(1,1)
c
kel(2,2) =
12.d0*e*i/l**3.d0
kel(3,2) =
6.d0*e*i/l**2.d0
kel(5,2) = - kel(2,2)
kel(6,2) =
kel(3,2)
c
kel(2,3) =
6.d0*e*i/l**2.d0
kel(3,3) =
4.d0*e*i/l
kel(5,3) = - kel(2,3)
kel(6,3) =
2.d0*e*i/l
c
do j=4,5
do k=1,6
kel(k,j) = - kel(k,j-3)

47

end do
end do
c
kel(2,6)
kel(3,6)
kel(5,6)
kel(6,6)

=
6.d0*e*i/l**2.d0
=
2.d0*e*i/l
= - kel(2,6)
=
4.d0*e*i/l

c
c--- PARA ELEMENTO DE TRELIA 3D ------------------------------------c
ELSE IF ((ntype.eq.2).or.(ntype .eq. 6)) then
c
kel(1,1) =
e*a/l
kel(1,4) = -e*a/l
kel(4,1) = -e*a/l
kel(4,4) =
e*a/l
c
c--- PARA ELEMENTO DE PRTICO 3D ------------------------------------c
ELSE IF ((ntype.eq.3).or.(ntype .eq. 7)) then
c
a1 = e*a/l
a2 = 12.d0*e*iz/l**3.d0
a3 = 12.d0*e*iy/l**3.d0
a4 = 6.d0*e*iz/l**2.d0
a5 = 6.d0*e*iy/l**2.d0
a6 = 4.d0*e*iz/l
a7 = 4.d0*e*iy/l
a8 = g*jt/l
c
kel(1,1) = a1
kel(1,7) = -a1
c
kel(2,2) = a2
kel(2,6) = a4
kel(2,8) = -a2
kel(2,12) = a4
c
kel(3,3) = a3
kel(3,5) = -a5
kel(3,9) = -a3
kel(3,11)= -a5
c
kel(4,4) = a8
kel(4,10)= -a8
c
kel(5,5) = a7
kel(5,9) = a5
kel(5,11) = 0.5d0*a7
c
kel(6,6) = a6
kel(6,8) = -a4
kel(6,12)= 0.5d0*a6
c
kel(7,7) = a1
c
kel(8,8) = a2
kel(8,12)= -a4

48

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

a3
a5

c
kel(10,10)= a8
c
kel(11,11)= a7
c
kel(12,12)= a6
c
c--- Obtm a parte triangular inferior da matriz KEL
do j=1,12
do k=j,12
kel(k,j) = kel(j,k)
end do
end do
c
END IF
c
return
end

49

APNDICE C
SUBROTINAS PARA CALCULAR A MATRIZ DE MASSA DO SISTEMA.
c
c
c
c
c
c
c
c
c

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

subroutine matmas (neq,coord,gama,nddof,idel,mats,secs,kmgl)


c
c--- VARIAVEIS GLOBAIS
integer neq, npoin, nelem, ndime, nmats, npmat, nsecs, npsec
integer ncase, ntype, nplot, nnode, ndofn
integer idel(4,*), nddof(ndofn,*)
real*8 coord(ndime,*),gama(*), secs(npsec,*), mats(npmat,*)
real*8 kmgl(neq,*)
real*8 DENS, A, Jt
c
c--- VARIAVEIS LOCAIS
integer noi, noj, sc, mt, ielem, ndofe
real*8 length
c
real*8 trn[ALLOCATABLE] (:,:),
$
kmel[ALLOCATABLE] (:,:),
$
kmegl[ALLOCATABLE] (:,:),
$
kmeg[ALLOCATABLE] (:,:)
c
c--- BLOCO DE COMMON
common/contro/ npoin,nelem,ndime,nmats,npmat,nsecs,npsec,ncase,
$ntype,nplot,nnode,ndofn
c
c--- ALOCA AS MATRIZES
ndofe = nnode*ndofn
ALLOCATE (trn(ndofe,ndofe))
ALLOCATE (kmel(ndofe,ndofe))
ALLOCATE (kmegl(ndofe,ndofe))
ALLOCATE (kmeg(ndofe,ndofe))
c
c--- INICIALIZACAO DE KGL
call rzero (kmgl,neq*neq)
c
c--- MONTA A MATRIZ DE RIGIDEZ DE CADA ELEMENTO
DO IELEM=1,NELEM
c
c--- IDENTIFICA OS NOS I e J, A SEO e O MATERIAL DE CADA ELEMENTO
noi = idel(1,ielem)
noj = idel(2,ielem)
sc = idel(3,ielem)
mt = idel(4,ielem)

50

c
c--- CALCULA A MATRIZ DE ROTAO
call brtnr (noi,noj,coord,gama(ielem),trn,length,
$
ndofe,ntype,ndime)
c--- INICIALIZA VARIAVEIS
A
= secs(1,sc)
Jt = 0.d0
c
c--- CALCULA A MATRIZ DE MASSA DO ELEMENTO NO SISTEMA LOCAL
if ((ntype .eq. 4).or.(ntype .eq. 5).or.(ntype .eq. 6)) then
DENS = mats(2,mt)
else if ((ntype .eq. 7)) then
DENS = mats(3,mt)
Jt = secs(2,sc)
end if
call brkmel (DENS,A,Jt,length,kmel,ndofe,ntype)
c
c
c--- CALCULA A MATRIZ DE MASSA DO ELEMENTO NO SISTEMA GLOBAL:
c
[kmeg] = [trn]t . [kmel] . [trn]
call mtrans (ndofe,ndofe,kmel,trn,kmeg,kmegl)
c
c--- ARMAZENA [kmeg] NA MATRIZ DE MASSA GLOBAL DO SISTEMA [KmGL]
call assemb
(ielem,neq,nnode,ndofn,nelem,idel,nddof,kmgl,kmeg)
c
END DO
c
DEALLOCATE (trn)
DEALLOCATE (kmel)
DEALLOCATE (kmegl)
DEALLOCATE (kmeg)
c
return
end
c
c *****************************************************************
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 none
c
c--- VARIAVEIS GLOBAIS
integer ndofe,ntype
real*8 DENS,A,Jt,I,L,kmel(ndofe,ndofe)
c
c--- VARIAVEIS LOCAIS
integer k,j
real*8 coef, rg, jp
c
c--- DEFINICAO DOS ELEMENTOS

51

c
c--- INICIALIZANDO kmel
call rzero (kmel,ndofe*ndofe)
c
c--- PARA ELEMENTO DE TRELIA PLANA -----------------------------------c
IF (ntype.eq.4) then
c
coef = dens * A * L / 6.d0
c
do i=1,4
kmel(i,i) = 2.d0 * coef
if ((i+2) .le. 4) kmel(i,i+2) = 1.d0 * coef
end do
c
c--- PARA ELEMENTO DE PRTICO PLANO --------------------------------c
ELSE IF (ntype.eq.5) then
c
coef = dens * A * L / 420.d0
c
kmel(1,1) =
140.d0 * coef
kmel(1,4) =
70.d0 * coef
c
kmel(2,2) =
156.d0 * coef
kmel(2,3) =
22.d0 * coef * L
kmel(2,5) =
54.d0 * coef
kmel(2,6) =
-13.d0 * coef * L
c
kmel(3,3) =
4.d0 * coef * L * L
kmel(3,5) =
13.d0 * coef * L
kmel(3,6) =
-3.d0 * coef * L * L
c
kmel(4,4) =
140.d0 * coef
c
kmel(5,5) =
156.d0 * coef
kmel(5,6) =
-22.d0 * coef
* L
c
kmel(6,6) =
4.d0 * coef * L * L
c
do j=1,6
do k=j,6
kmel(k,j) = kmel(j,k)
end do
end do
c
c--- PARA ELEMENTO DE TRELIA 3D ------------------------------------c
ELSE IF (ntype.eq.6) then
c
coef = dens * A * L / 6.d0
c
do i=1,6
kmel(i,i) = 2.d0 * coef
if ((i+3) .le. 6) kmel(i,i+3) = 1.d0 * coef
end do

52

c
c--- PARA ELEMENTO DE PRTICO 3D ------------------------------------c
ELSE IF (ntype.eq.7) then
c
jp = jt
rg = dsqrt(jp/A)
c
coef = 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 *coef
kmel(3,9) = 54.d0 *coef
kmel(3,11)= 13.d0 * L *coef
c
kmel(4,4) = 140.d0 * rg**2.d0 *coef
kmel(4,10)= 70.d0 * rg**2.d0 *coef
c
kmel(5,5) = 4.d0 * L**2.d0 *coef
kmel(5,9) = -13.d0 * L *coef
kmel(5,11) =-3.d0 * L**2.d0
*coef
c
kmel(6,6) = 4.d0 * L**2.d0 *coef
kmel(6,8) = 13.d0 * L *coef
kmel(6,12)= -3.d0 * L**2.d0 *coef
c
kmel(7,7) = 140.d0 *coef
c
kmel(8,8) = 156.d0 *coef
kmel(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
c
do j=1,12
do k=j,12
kmel(k,j) = kmel(j,k)
end do
end do
c
END IF
c
return
end

53

APNDICE D
SUBROTINAS PARA CALCULAR E IMPRIMIR AS FORCAS RESULTANTES
NOS ELEMENTOS.

c
c
c
c
c
c
c
c
c
c

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

subroutine stresf (nelem,npoin,ndime,nddof,idel,mats,npmat,secs,


psec,szero,fu,ndofn,nnode,ntype,coord,gama,REAC)

c
c--- VARIAVEIS GLOBAIS
integer nelem, npoin, ndime, ndofn, nnode, ntype, npsec, npmat
real*8 coord(ndime,*),secs(npsec,*), mats(npmat,*), gama(*)
integer idel(4,*), nddof(ndofn,*)
real*8 szero(nelem,*), fu(*), REAC(*)
c
c--- VARIAVEIS LOCAIS
integer ndofe
real*8 dg[ALLOCATABLE] (:),
$
fl[ALLOCATABLE] (:)
c
c--- ALOCA AS MATRIZES
ndofe = nnode*ndofn
ALLOCATE (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)
c
else if ((ntype.eq.1).or.(ntype.eq.11))then
CALL forceFP (nelem,npoin,ndime,nddof,dg,idel,szero,fu,
$
ndofn,coord,REAC)
c
else if ((ntype.eq.2))then
CALL forceTE (nelem,npoin,ndime,nddof,dg,idel,mats,
$
npmat,secs,npsec,szero,fu,ndofn,coord,REAC)
c
else if ((ntype.eq.3))then
CALL forceFE (nelem,npoin,ndime,nddof,dg,idel,szero,fu,
$
ndofn,coord,gama,REAC)

54

c
end if
c
DEALLOCATE (dg)
DEALLOCATE (fl)
c
return
end
c
c
c
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*===============================================================*
*
SUBROTINA PARA CALCULAR E IMPRIMIR
*
*
AS FORCAS RESULTANTES NOS ELEMENTOS
*
*===============================================================*
*
ELEMENTO DE TRELIA PLANO
*
*****************************************************************

subroutine forceTP (nelem,npoin,ndime,nddof,dg,idel,mats,


npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

c
implicit none
c
c--- VARIAVEIS GLOBAIS
integer nelem,npoin,ndime,ndofn,npsec,npmat
integer idel(4,*), nddof(ndofn,*)
real*8 coord(ndime,*), secs(npsec,*), mats(npmat,*)
real*8 szero(nelem,*), fu(*), dg(*), REAC(*)
c
c--- VARIAVEIS LOCAIS
integer IELEM, IPOIN, j, k1, k2
integer noi, noj, sc, mt
real*8 EA, S, C, dx, dy, L
real*8 ug1,vg1,ug2,vg2
c
real*8 FORC[ALLOCATABLE] (:)
c
c--- ALOCA AS MATRIZES
ALLOCATE (FORC(nelem))
c
c--- ZERA A MATRIZ SZERO
CALL RZERO (SZERO,NELEM*4)
c
c--- INCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA-----------------------DO IELEM=1,NELEM
c
c--- INDENTIFICA OS NS E AS PRORIEDADES DO ELEMENTO IELEM
noi = idel(1,ielem)
noj = idel(2,ielem)
sc = idel(3,ielem)
mt = idel(4,ielem)
c
c--- INDENTIFICA A NUMERAO DO GRAU DE LIBERDADE INICIAL DE CADA N
k1 = ndofn*(noi-1)
k2 = ndofn*(noj-1)
c

55

c--- CALCULA EA
EA =mats(1,mt) * secs(1,sc)
c
c--- 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
c
c--- CALCULA O SENO E O COSSENO
S = dy/L
C = dx/L
c
c--- 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)
c
c--- CALCULA O ESFORO NORMAL NA BARRA IELEM
FORC(ielem)= EA/L*( (ug2-ug1)*C + (vg2-vg1)*S )
c
c--- CALCULA AS REAOES GLOBAIS NOS NS
REAC (k1+1) = REAC (k1+1) - FORC (ielem)*C
REAC (k1+2) = REAC (k1+2) - FORC (ielem)*S
REAC (k2+1) = REAC (k2+1) + FORC (ielem)*C
REAC (k2+2) = REAC (k2+2) + FORC (ielem)*S
c
c---ARMAZENA AS REAOES 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)
c
c--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA-------------------------END DO
c
c--- IMPRESSO DAS REAOES NODAIS
write (2,10)
10 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
NODAL REACTIONS:',/,
$
'
===============
',//,'
NODE',10X,
$'Rx',13X,'Ry',/)
20 format(4x,i5,6F15.4)
c
DO ipoin = 1,npoin
k1 = ndofn*(ipoin-1)+1
k2 = k1 + ndofn - 1
write (2,20) ipoin, (REAC(j), j=k1,k2)
END DO
c

56

c--- IMPRESSO DAS FORAS AXIAIS


write (2,30)
30 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
MEMBER FORCES:',/,
$
'
=============',//,'
MEMBER',2X,
$'AXIAL FORCE ',/)
c
40 format
(6x,'______________________________________________________
$_____________________________________________')
c
DO ielem = 1,nelem
write (2,20) ielem, FORC(ielem)
END DO
write(2,40)
c
DEALLOCATE (FORC)
c
return
end
c
c
c *****************************************************************
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)
c
implicit none
c
c--- VARIAVEIS GLOBAIS
integer nelem,npoin,ndime,ndofn
integer idel(4,*), nddof(ndofn,*)
real*8 coord(ndime,*)
real*8 szero(nelem,*), fu(*), dg(*), REAC(*)
c
c--- VARIAVEIS LOCAIS
integer IELEM, IPOIN, i, j, k1, k2, I1, I2, J1, J2
integer noi, noj
real*8 F(6),FL(6),FG(6),R(3,3),kegl(6,6), dx, dy, L, S, C
c
real*8 FORC[ALLOCATABLE] (:)
c
c--- ALOCA AS MATRIZES
ALLOCATE (FORC(nelem*6))
c
c--- RECORRE AO ARQUIVO TEMPORRIO F3.tmp
rewind(3)
c

57

c--- INCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA------------------------DO IELEM=1,NELEM


c
c--- LE A MATRIZ ELEMENTAR [kegl] = [R]t.[kel]
c
ANTERIORMENTE ARMAZENADA EM F3.tmp
read(3) kegl
c
c--- 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)
c
c--- INDENTIFICA A NUMERAO DO GRAU DE LIBERDADE INICIAL DE CADA N
k1 = ndofn*(noi-1)
k2 = ndofn*(noj-1)
c
c--- 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
c
c--- CALCULA O SENO E O COSSENO
S = dy/L
C = dx/L
c
c--- DEFINIO DA SUB-MATRIZ DE TRANSFORMAO R(3,3)
R(1,1) = C
R(1,2) = S
R(1,3) = 0.D0
R(2,1) =-S
R(2,2) = C
R(2,3) = 0.D0
R(3,1) = 0.D0
R(3,2) = 0.D0
R(3,3) = 1.D0
C
c
t
t
t
c--- 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 do
c
c--- Armazena as foras locais no vetor Forc
I1 = 6*(ielem - 1)
do i=1,6
I2 = I1+i
Forc(I2) = F(i)
end do
c
c--- ARMAZENA AS FORAS GLOBAIS NO VETOR FG
do i=1,3
FG(i) = 0.d0

58

FG(i+3) = 0.d0
do 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 do
end do
c
c--- CALCULA AS REAOES GLOBAIS NOS NS
do i=1,3
J1 = k1 + i
J2 = k2 + i
REAC(J1) = REAC(J1) + FG(i)
REAC(J2) = REAC(J2) + FG(i+3)
end do
c
c--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA-------------------------END DO
c
c--- IMPRESSO DAS REAOES 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,npoin
k1 = ndofn * (ipoin - 1) + 1
k2 = k1 + ndofn - 1
write (2,20) ipoin, (REAC(j), j=k1,k2)
end do
c
c--- IMPRESSO DOS ESFOROS NAS BARRAS
write (2,30)
30 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
MEMBER FORCES AND MOMENTS:',/,
$ '
=========================
',//,'
MEMBER',1X,
$'NODE',8X,'Sx',13X,'Vy',13X,'Mz',/)
c
40 format(4x,2i5,3f15.4)
c
50 format(4x,i10,3f15.4)
c
60 format
(6x,'______________________________________________________
$_____________________________________________')
c
DO ielem = 1,nelem
k1 = 6 * (ielem - 1) + 1
k2 = k1 + 2
noi = idel(1,ielem)

59

noj = idel(2,ielem)
write (2,40) ielem, noi, (FORC(j), j=k1,k2)
k1 = k2 + 1
k2 = k1 + 2
write (2,50) noj, (FORC(j), j=k1,k2)
END DO
write(2,60)
c
c
return
end
c
c
c
c
c
c
c
c
c
c
c
c

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

subroutine forceTE (nelem,npoin,ndime,nddof,dg,idel,mats,


npmat,secs,npsec,szero,fu,ndofn,coord,REAC)

c
implicit none
c
c--- VARIAVEIS GLOBAIS
integer nelem,npoin,ndime,ndofn,npsec,npmat
integer idel(4,*), nddof(ndofn,*)
real*8 coord(ndime,*), secs(npsec,*), mats(npmat,*)
real*8 szero(nelem,*), fu(*), dg(*), REAC(*)
c
c--- VARIAVEIS LOCAIS
integer IELEM, IPOIN, j, k1, k2
integer noi, noj, sc, mt
real*8 EA, Cx, Cy, Cz, dx, dy, dz, L
real*8 ug1,vg1,wg1, ug2,vg2,wg2
c
real*8 FORC[ALLOCATABLE] (:)
c
c--- ALOCA AS MATRIZES
ALLOCATE (FORC(nelem))
c
c--- ZERA A MATRIZ SZERO
CALL RZERO (SZERO,NELEM*6)
c
c--- INCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA------------------------DO IELEM=1,NELEM
c
c--- INDENTIFICA OS NS E AS PRORIEDADES DO ELEMENTO IELEM
noi = idel(1,ielem)
noj = idel(2,ielem)
sc = idel(3,ielem)
mt = idel(4,ielem)

60

c
c--- INDENTIFICA A NUMERAO DO GRAU DE LIBERDADE INICIAL DE CADA N
k1 = ndofn*(noi-1)
k2 = ndofn*(noj-1)
c
c--- CALCULA EA
EA =mats(1,mt) * secs(1,sc)
c
c--- 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
c
c--- CALCULA O SENO E O COSSENO
Cx = dx/L
Cy = dy/L
Cz = dz/L
c
c--- 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)
c
c--- CALCULA O ESFORO NORMAL NA BARRA IELEM
FORC(ielem)= EA/L*( (ug2-ug1)*Cx + (vg2-vg1)*Cy
$
+ (wg2-wg1)*Cz) )
c
c--- CALCULA AS REAOES GLOBAIS NOS NS
REAC (k1+1) = REAC (k1+1) - FORC (ielem)*Cx
REAC (k1+2) = REAC (k1+2) - FORC (ielem)*Cy
REAC (k1+3) = REAC (k1+3) - FORC (ielem)*Cz
REAC (k2+1) = REAC (k2+1) + FORC (ielem)*Cx
REAC (k2+2) = REAC (k2+2) + FORC (ielem)*Cy
REAC (k2+3) = REAC (k2+3) + FORC (ielem)*Cz
c
c---ARMAZENA AS REAOES 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)
c
c--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA-------------------------END DO
c
c--- IMPRESSO DAS REAOES NODAIS
write (2,10)

61

10 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
REACTIONS:',/,
$
'
=========
',//,'
NODE',10X,'Rx',
$13X,'Ry',13X,'Rz',/)
20 format(4x,I5,6F15.4)
c
DO ipoin = 1,npoin
k1 = ndofn*(ipoin-1)+1
k2 = k1 + ndofn - 1
write (2,20) ipoin, (REAC(j), j=k1,k2)
END DO
c
c--- IMPRESSO DAS FORAS AXIAIS
write (2,30)
30 format
(6x,'______________________________________________________
$_____________________________________________',//,
$'
MEMBER FORCES:',/,
$
'
=============
',//,'
MEMBER',6X,
$' AXIAL FORCE',/)
c
40 format
(6x,'______________________________________________________
$_____________________________________________')
c
DO ielem = 1,nelem
write (2,20) ielem, FORC(ielem)
END DO
write(2,40)
c
DEALLOCATE (FORC)
c
return
end
c
c
c
c *****************************************************************
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)
c
implicit none
c
c--- VARIAVEIS GLOBAIS
integer nelem,npoin,ndime,ndofn
integer idel(4,*), nddof(ndofn,*)
real*8 coord(ndime,*), gama(*)

62

real*8 szero(nelem,*), fu(*), dg(*), REAC(*)


c
c--- VARIAVEIS LOCAIS
integer IELEM, IPOIN, i, j, k1, k2, I1, I2, J1, J2
integer noi, noj
real*8 F(12),FL(12),FG(12),R(3,3),kegl(12,12),dx,dy,dz,L,den
real*8 Cx, Cy, Cz, Sg, Cg, auxil
c
real*8 FORC[ALLOCATABLE] (:)
c
c--- ALOCA AS MATRIZES
ALLOCATE (FORC(nelem*12))
call rzero (FORC,nelem*12)
c
c--- RECORRE AO ARQUIVO TEMPORRIO F3.tmp
rewind(3)
c
c--- INCIO DO LOOP NOS ELEMENTOS DA ESTRUTURA-----------------------DO IELEM=1,NELEM
c
c--- LE A MATRIZ ELEMENTAR [kegl] = [R]t.[kel]
c
ANTERIORMENTE ARMAZENADA EM F3.tmp
read(3) kegl
c
c--- 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)
c
c--- INDENTIFICA A NUMERAO DO GRAU DE LIBERDADE INICIAL DE CADA N
k1 = ndofn*(noi-1)
k2 = ndofn*(noj-1)
c
c--- 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)
c
c--- DEFINIOES DE VARIAVEIS
Cx = dx/L
Cy = dy/L
Cz = dz/L
Cg = dcos(gama(ielem))
Sg = dsin(gama(ielem))
den = dsqrt(Cx * Cx + Cz * Cz)
c
c--- DEFINIO DA SUB-MATRIZ DE TRANSFORMAO R(3,3)
if (den /= 0.d0)then
R(1,1) = Cx
R(1,2) = Cy
R(1,3) = Cz
c
R(2,1) = (-Cx * Cy * Cg - Cz * Sg)/den
R(2,2) = den * Cg
R(2,3) = (-Cy * Cz * Cg + Cx * Sg)/den
c

63

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


R(3,2) = -den * Sg
R(3,3) = (Cy * Cz * Sg + Cx * Cg)/den
else if (den == 0.d0)then
if (dy.gt.0.d0) then
auxil = 1.d0
else if (dy.lt.0.d0)then
auxil = -1.d0
end if
R(1,1) = 0.d0
R(1,2) = auxil
R(1,3) = 0.d0
c
R(2,1) = -auxil*Cg
R(2,2) = 0.d0
R(2,3) = Sg
c
R(3,1) = auxil*Sg
R(3,2) = 0.d0
R(3,3) = Cg
end if
c
t
t
t
c--- 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 do
c
c--- Armazena as foras locais no vetor Forc
I1 = 12*(ielem - 1)
do i=1,12
I2 = I1+i
Forc(I2) = F(i)
end do
c
c--- ARMAZENA AS FORAS GLOBAIS NO VETOR FG
do i=1,3
FG(i) = 0.d0
FG(i+3) = 0.d0
FG(i+6) = 0.d0
FG(i+9) = 0.d0
do 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 do
end do
c
c--- CALCULA AS REAOES GLOBAIS NOS NS
do i=1,6
J1 = k1 + i
J2 = k2 + i
REAC(J1) = REAC(J1) + FG(i)
REAC(J2) = REAC(J2) + FG(i+6)

64

end do
c
c--- FIM DO LOOP NOS ELEMENTOS DA ESTRUTURA-------------------------END DO
c
c--- IMPRESSO DAS REAOES 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,npoin
k1 = ndofn * (ipoin - 1) + 1
k2 = k1 + ndofn - 1
write (2,20) ipoin, (REAC(j), j=k1,k2)
end do
c
c--- IMPRESSO DOS ESFOROS 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',/)
c
40 format(4x,2i5,13f15.4)
c
50 format(4x,i10,13f15.4)
c
60 format
(6x,'______________________________________________________
$_____________________________________________')
c
DO ielem = 1,nelem
k1 = 12 * (ielem - 1) + 1
k2 = k1 + 5
noi = idel(1,ielem)
noj = idel(2,ielem)
write (2,40) ielem, noi, (FORC(j), j=k1,k2)
k1 = k2 + 1
k2 = k1 + 5
write (2,50) noj, (FORC(j), j=k1,k2)
END DO
write(2,60)
c
return
end

65

APNDICE E
SUBROTINAS PARA CALCULAR OS AUTOVALORES E AUTOVETORES
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA CALCULAR OS AUTOVALORES E AUTOVETORES
*
*
DE UMA EQUAO DO TIPO A * B = LMBDA * B * X
*
*
*
*****************************************************************
SUBROUTINE EIGG (A,B,H,V,ERR,N,NX,X,D,INX)

C
C
C
C
C
C
C
C

N :
NX :
ERR:
inx:
V :

ORDEM REAL DE A E B
DIMENSO DA LINHA E COLUNA DE A E B
ERRO LIMITE USADO EM SUBROUTINE JACOB
DEFINE O TIPO DE SOLUO
AUXILIARY ARRAY

IMPLICIT NONE
C
INTEGER
INTEGER
REAL*8
REAL*8
REAL*8
REAL*8
REAL*8
C
C
C

N, NX
INX
ERR
A(NX,NX), B(NX,NX)
H(NX,NX), V(NX)
X (NX)
D

DECOMPOSE MATRIZ B USING CHOLESKI'S METHOD


CALL DECOG (B,N,NX)

C
C
C

INVERT MATRIZ B
CALL INVCH (B,H,N,NX)

C
C
C

MULTIPLY TRANSPOSE(H) * A * H

CALL BTAB3 (A,H,V,N,NX)


C
C COMPUTE THE EIGENVALUES
c
c--- STODOLLA-VIANELLO
c
menor autovalor
IF(INX.EQ.1) THEN
CALL INVER (A,N)
CALL EIGIS (A,X,N,D)
D = 1.D0/D
END IF
c
c
maior auto valor

66

IF(INX.EQ.2) THEN
CALL EIGIS (A,X,N,D)
END IF
c
c--- JACOB
c
[A] TERMOS DA DIAGONAL SERO OS AUTOVALORES
C
[B] CADA COLUNA DESSE ARRAY INCLUIR UMA SRIE DE AUTOVETORES
IF(INX.EQ.3) THEN
CALL JACOB (A,B,ERR,N,NX)
END IF
C
C COMPUTE THE EIGENVECTORS
IF(INX.EQ.1) THEN
CALL 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
C
RETURN
END
c
c *****************************************************************
c *
*
c *
SUBROTINA PARA DECOMPOR UMA MATRIZ SIMTRICA,
*
c *
DENTRO DE UMA MATRIZ TRIANGULAR SUPERIOR
*
c *
*
c *****************************************************************
c
SUBROUTINE DECOG (A,N,NX)
C
C
C A : ARRAY INCLUINDO A MATRIZ PARA SER DECOMPOSTA.NO FINAL A MATRIZ
C INCLUI A MATRIZ TRIANGULAR SUPERIOR.
C
C
C N : ORDEM DE A
C NX: DIMENSO DA LINHA E COLUNA DE A
C
IMPLICIT NONE
C
INTEGER N, NX
INTEGER J, I, I1, I2, L
REAL*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,N
10
A(1,J) = A(1,J)/A(1,1)

67

DO 40
I1
D
DO
20

I=2,N
= I - 1
= A(I,I)
20 L=1,I1
D = D - A(L,I) * A(L,I)

c
21
47

30
40
45

50

IF(A(I,I)) 1, 1, 21
A(I,I) = DSQRT(D)
IF(N - I) 45, 45, 47
I2 = I + 1
DO 40 J=I2,N
D = A(I,J)
DO 30 L=1,I1
D = D - A(L,I) * A(L,J)
A(I,J) = D/A(I,I)
DO 50 I=2,N
I1 = I - 1
DO 50 J=1,I1
A(I,J) = 0.D0

c
c
200 RETURN
END
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA CALCULAR A INVERSA DE UMA MATRIZ
*
*
TRIANGULAR SUPERIOR
*
*
*
*****************************************************************
SUBROUTINE INVCH (S,A,N,NX)

C
C
C
C
C

N : ORDEM REAL DE A E S
NX: DIMENSO DA LINHA E COLUNA DE A E S
IMPLICIT NONE

C
INTEGER
INTEGER
INTEGER
REAL*8
REAL*8
C
C

C
C
C

N, NX
I, J, L, N1, K, I1
IK, NK
A(NX,NX), S(NX,NX)
D

INICIALIZAO DA MATRIZ A
DO I=1,N
DO J=1,N
A(I,J) = 0.D0
END DO
END DO
COMPUTAR TERMOS DA DIAGONAL DE A
DO I=1,N
A(I,I) = 1.D0/S(I,I)
END DO

68

C
C

COMPUTAR OS TERMOS DA DIAGONAL KTH DE A


N1 = N - 1

C
DO 100 K=1,N1
NK = N - K
DO 100 I=1,NK
J = I + K
D = 0.D0
I1 = I + 1
IK = I + K
DO 20 L=I1,IK
20
D = D + S(I,L) * A(L,J)
100
A(I,J) = - D/S(I,I)
C
C
RETURN
END
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA CALCULAR A MATRIZ OPERAO
*
*
A = TRANSPOSTA(B) * "A"
*
*
*
*****************************************************************
SUBROUTINE BTAB3 (A,B,V,N,NX)

C
C
C
C
C
C
C

N : ORDEM REAL DE A E B
NX: LINHA E COLUNA DE A E B
V : VETOR AUXILIAR
IMPLICIT NONE

C
INTEGER
INTEGER
REAL*8
C
C
C

N, NX
I, J, K
A(NX,NX), B(NX,NX), V(NX)

COMPUTAR A * B E ARMAZENA EM A
DO 10 I=1,N
DO 5 J=1,N
V(J) = 0.0
DO 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
C

COMPUTAR TRANSPOSTA(B) * A E ARMAZENA EM A


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

69

20

A(I,J) = V(I)

C
C
RETURN
END
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA CALCULAR OS AUTOVALORES E AUTOVETORES
*
*
PELO MTODO DE JACOBI
*
*
*
*****************************************************************
SUBROUTINE JACOB (A,V,ERR,N,NX)

C
C
C
C
C
C
C
C
C
C
C

A :

MATRIZ SISTEMA.DEPOIS QUE AS COMPUTAES SO COMPLETADAS,OS


TERMOS DA DIAGONAL SERO OS AUTOVALORES
V : CADA COLUNA DESSE ARRAY INCLUIR UMA SRIE DE AUTOVETORES
ERR: ERRO ADIMITIDO
N : ORDEM REAL DE A
NX: DIMENSO DA LINHA E COLUNA DE A

IMPLICIT NONE
C
INTEGER
INTEGER
INTEGER

N, NX
ITM, IT
I, J, M, J1, IR, IC

REAL*8
REAL*8
REAL*8

A(NX,NX), V(NX,NX)
ERR
T, T1, PS, TA, C, S, P

C
ITM = 10000
IT = 0
C
C
C

POR UMA UNIDADE MATRIZ EM ARRAY V


DO 10 I=1,N
DO 10 J=1,N
IF(I-J) 3, 1, 3
3
V(I,J) = 0.D0
GO TO 10
1
V(I,J) = 1.D0
10 CONTINUE

C
C
C

ENCONTRAR O MAIOR COEFICIENTE DA DIAGONAL


13 T = 0.D0
M = N - 1
DO 20 I=1,M
J1 = I + 1
DO 20 J=J1,N
IF(DABS(A(I,J)) - T) 20, 20, 2
2
T = DABS(A(I,J))
IR = I

70

IC = J
20 CONTINUE
C
IF(IT) 5, 4, 5
C
C
C
C

PEGUE O PRIMEIRO MAIOR COEFICIENTE DA DIAGONAL VEZES O ERRO COMO


COMPARAO
4 T1 = T * ERR
5 IF(T-T1) 999, 999, 6

C
C
C

COMPUTE TAN(TA),SIN(S),E COSINE(C) DO NGULO DE ROTAO


6 PS
TA
C
S

C
C
C

=
=
=
=

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

MULTIPLICAR A MATRIZ DE ROTAO VEZES V E ARMAZENAR EM V


DO 50 I=1,N
P=V(I,IR)
V(I,IR) = C * P + S * V(I,IC)
50
V(I,IC) = C * V(I,IC) - S * P
I = 1
100
IF(I-IR) 7, 200, 7

C
C
C

APLICAR TRANSFORMAO ORTOGONAL PARA A E ARMAZENAR EM A


7 P = A(I,IR)
A(I,IR) = C * P + S * A(I,IC)
A(I,IC) = C * A(I,IC) - S * P
I = I + 1
GO TO 100
200 I = IR + 1
300 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 * P
I = I + 1
GO TO 300
400 I = IC + 1
500 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 * P
I = I + 1
GO 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.D0
IT = IT + 1

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

71

END
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA MULTIPLICAO DE: X = S-1 * X'
*
*
*
*****************************************************************
SUBROUTINE MATMB1 (A,B,V,N)

C
C
C
C
C
C
C

N :NUMERO REAL DAS LINHAS E COLUNAS DE E E V


NX:DIMENSO DA LINHA E COLUNA
V :ARRAY AUXILIAR
IMPLICIT NONE

C
INTEGER N
INTEGER I, J
REAL*8 A(N,N), B(N), V(N)
C
C
DO I=1,N
V(I) = 0.0
DO J=1,N
V(I) = V(I) + A(I,J)*B(J)
END DO
END DO
C
DO I=1,N
B(I) = V(I)
END DO
C
C
RETURN
END
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA MULTIPLICAO DE: X = S-1 * X'
*
*
*
*****************************************************************
SUBROUTINE MATMB2 (A,B,V,N)

C
C
C
C
C
C
C

N :NUMERO REAL DAS LINHAS E COLUNAS DE E E V


NX:DIMENSO DA LINHA E COLUNA
V :ARRAY AUXILIAR
IMPLICIT NONE

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

72

C
C
DO 10 I=1,N
V(I) = 0.0
DO 10 J=1,N
10
V(I) = V(I) + A(I,J)*B(J)
C
DO I=1,N
B(I) = V(I)
END DO
C
C
RETURN
END
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA MULTIPLICAO DE DUAS MATRIZES,
*
*
X = S-1 * X'
*
*
*
*****************************************************************
SUBROUTINE MATMB3 (A,B,V,N,NX)

C
C
C
C
C
C
C

N :NUMERO REAL DAS LINHAS E COLUNAS DE E E V


NX:DIMENSO DA LINHA E COLUNA
V :ARRAY AUXILIAR
IMPLICIT NONE

C
INTEGER N, NX
INTEGER J, I, K
REAL*8 A(NX,NX), B(NX,NX), V(NX)
C
C
DO 20 J=1,N
DO 16 I=1,N
V(I) = 0.0
DO 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)
C
C
RETURN
END
c
c
c
c
c
c
c
c

*****************************************************************
*
*
*
SUBROTINA PARA CALCULAR O MENOR AUTOVALOR PELO MTODO
*
*
STODOLLA-VIANELLO
*
*
*
*****************************************************************
SUBROUTINE EIGIS (A,X,N,D)

73

C
C
C
C
C
C
C
C
C
C
C
C

ESSE PROGRAMA APLICA O ITERATIVO MTODO DE STODOLLA-VIANELLO PARA


COMPUTAR O MAIOR AUTOVALOR
A :
D :
Y :
XX :
N :
NIM:
TOL:

MATRIZ SISTEMA.
AUTOVALOR
A * X
VETOR AUXILIAR
ORDEM DA MATRIZ SISTEMA
NMERO MXIMO DE INTERAES
TOLERNCIA

IMPLICIT NONE
C
INTEGER
INTEGER
INTEGER
REAL*8
REAL*8
REAL*8
REAL*8
*

N
I, J, ITER
NIM
A(N,N), X(N)
D
TOL
Y [ALLOCATABLE] (:),
XX [ALLOCATABLE] (:)

C
PARAMETER (TOL = 1.0D-3)
PARAMETER (NIM = 100)
C
C
ITER = 0
ALLOCATE (Y(N))
ALLOCATE (XX(N))
C
DO I=1,N
X(I) = 1.D0
END DO
C
1 DO I=1,N
XX(I) = X(I)
END DO
C
ITER = ITER + 1
DO 3 I=1,N
Y(I) = 0.D0
DO 3 J=1,N
3
Y(I) = Y(I) + A(I,J)*X(J)
C

C
C
C
C
C

D = Y(1)
DO I=1,N
X(I) = Y(I)/D
END DO
D = Y(1)/X(1)
DO I=1,N
X(I) = Y(I)
END DO
DO 5 I=1,N
IF(DABS(XX(I) - X(I)) - TOL) 5,5,6
5 CONTINUE

74

GO TO 9
C
6 IF(ITER - NIM) 1,7,7
7 WRITE(6,8)
8 FORMAT('NUMERO MAXIMO DE INTERACOES ATINGIDO')
C
C
9 RETURN
END
c
c
c
c
c
c

****************************************************************
*
*
*
SUBROTINA PARA INVERTER MATRIZES
*
****************************************************************
SUBROUTINE INVER (A,N)

C
IMPLICIT NONE
C
INTEGER
INTEGER
integer
REAL*8
real*8
*
c
c
c

C
c
c
c
c

c
c

N
I, J
indx [ALLOCATABLE](:)
A(N,N)
u1[ALLOCATABLE](:),
B[ALLOCATABLE](:,:)

Alocacao dos vetores e matriz


ALLOCATE (u1(n))
ALLOCATE (indx(n))
ALLOCATE (B(n,n))
1.DECOMPOE A MATRIZ EM LU
call LUDCMP (A,n,n,indx,u1)
2.INVERTE A MATRIZ DECOMPOSTA
inverte matriz dos coeficientes
do i=1,n
do j=1,n
B(i,j) = 0.d0
end do
B(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,n
A(i,j) = B(i,j)
end do
end do
Desaloca vetores e matriz
DEALLOCATE (u1)
DEALLOCATE (indx)
DEALLOCATE (B)

C
RETURN

75

END
C
c
c
c
c
c
c
c

***********************************************************
*
*
*
INVERTE A MATRIZ
*
*
---------------*
***********************************************************
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

11

12

13

14
c

II=0
DO 12 I=1,N
LL=INDX(I)
SUM=B(LL)
B(LL)=B(I)
IF (II.NE.0)THEN
DO 11 J=II,I-1
SUM=SUM-A(I,J)*B(J)
CONTINUE
ELSE IF (SUM.NE.0.d0) THEN
II=I
ENDIF
B(I)=SUM
CONTINUE
DO 14 I=N,1,-1
SUM=B(I)
IF(I.LT.N)THEN
DO 13 J=I+1,N
SUM=SUM-A(I,J)*B(J)
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
CONTINUE
RETURN
END

c
C
c
c
c
c
c
c

***********************************************************
*
*
*
DECOMPOE A MATRIZ EM LU
*
*
-----------------------*
***********************************************************
SUBROUTINE LUDCMP (A,N,NP,INDX,VV)

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

(TINY=1.0d-20)
N, NP
INDX(N)
A(NP,NP), VV(N)

76

11

12

13

14

15

16

17

18
19

D = 1.0d0
DO 12 I=1,N
AAMAX=0.0d0
DO 11 J=1,N
IF (dABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J))
CONTINUE
IF (AAMAX.EQ.0.0d0) PAUSE 'Singular matrix.'
VV(I)=1.0d0/AAMAX
CONTINUE
DO 19 J=1,N
IF (J.GT.1) THEN
DO 14 I=1,J-1
SUM=A(I,J)
IF (I.GT.1)THEN
DO 13 K=1,I-1
SUM=SUM-A(I,K)*A(K,J)
CONTINUE
A(I,J)=SUM
ENDIF
CONTINUE
ENDIF
AAMAX=0.0d0
DO 16 I=J,N
SUM=A(I,J)
IF (J.GT.1)THEN
DO 15 K=1,J-1
SUM=SUM-A(I,K)*A(K,J)
CONTINUE
A(I,J)=SUM
ENDIF
DUM=VV(I)*dABS(SUM)
IF (DUM.GE.AAMAX) THEN
IMAX=I
AAMAX=DUM
ENDIF
CONTINUE
IF (J.NE.IMAX)THEN
DO 17 K=1,N
DUM=A(IMAX,K)
A(IMAX,K)=A(J,K)
A(J,K)=DUM
CONTINUE
D = - D
VV(IMAX) = VV(J)
ENDIF
INDX(J)=IMAX
IF(J.NE.N)THEN
IF(A(J,J).EQ.0.0d0)A(J,J) = TINY
DUM=1./A(J,J)
DO 18 I=J+1,N
A(I,J)=A(I,J)*DUM
CONTINUE
ENDIF
CONTINUE
IF(A(N,N).EQ.0.0d0)A(N,N)=TINY

c
RETURN
END

77

Você também pode gostar