Post on 08-Jul-2016
description
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
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.
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.
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.
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.
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.
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)
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)
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)
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)
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.
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 .
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)
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.
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)
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.
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)
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)
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.
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.
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.
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.
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.
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.
25
Figura 4.2: Treliça plana: resultados.
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.
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.
28
Figura 4.5: treliça espacial: resultados.
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.
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.
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.
32
33
Figura 4.11: Pórtico plano: resultados.
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.
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.
36
Figura 4.14: Pórtico espacial: resultados.
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.
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.
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
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)
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
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
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
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
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
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
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)
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
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
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)
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
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
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
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)
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
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
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
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
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)
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)
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)
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(*)
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
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)
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
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
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)
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
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
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
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
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)
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
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
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
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
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