Escolar Documentos
Profissional Documentos
Cultura Documentos
ANLISE DE SISTEMAS
RETICULADOS ESBELTOS
ESTUDO DIRIGIDO
Orientador:
1
INTRODUO
1.1 OBJETIVO DO TRABALHO
(ii)
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
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:
de carga;
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.
2
ELEMENTOS FINITOS
2.1 INTRODUO
Com vista em estruturas reticuladas de comportamento linear-elstico, dois tipos
de problemas sero abordados neste trabalho:
i)
(1)
(2)
2U L
u iu j
(3)
M f T f dvol
vol
x
0
0
x
(5)
KL
1
EA 0
L 1
0
0
0
0
0
1
0
1
0
0
0
0
0
(6)
AL
M
2
0
1
0
0
2
0
1
1
0
2
0
0
1
0
2
(7)
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
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)
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
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)
EA 0
KL
L 1
0
10
(11)
AL
M
6 Simtrica
0
0
1
0
0
1
0
0
0
2
0
0
1
0
0
2
(12)
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
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)
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)
v2
y
u2
v1
u1
14
(18)
Cy sen
(19)
Rs
R
0
sendo os cossenos diretores:
Cx cos
x 2 x1
L
Cy
y 2 y1
L
(20)
Cy
Cx
(21)
15
Cy
Cx
0
0
0
1
(22)
N2
N1
x
z
z
Z
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)
- Cz
Cxz
0
1
0
Y y
z z
Figura 2.8:rotao em torno de z.
Sabendo-se que:
cos Cxz e sen Cy
(26)
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)
0
C
- S
0
S
C
(29)
0 0 0
Rs 0 0
0 Rs 0
0
0 Rs
(30)
Cx
CxCyC CzS
Rs
Cxz
CxCyS CzC
Cxz
Cy
Cxz C
- CxzS
18
Cxz
CyCzS CxC
Cxz
Cz
CyCzC CxS
(31)
S
0
0
C
0
(32)
Y
x
N2
X
N1
0
Rs
(33)
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
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
20
21
22
Calcula A = Km-1 KL
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.
1
3
4
E = 2 x 10
A = 1.0
4
5
10
6
2
4
10
5
24
6
4
25
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
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)
27
4
(4,1,0)
28
y
100
2 = 0 0
1 = 00
1
1
L
29
3 = 90
E = 1000000
G = 1000000
A = 4.0
L = 5.0
Ix = 0.3
Iy = 1.0
Iz = 0.3
2
60
E = 30000000
A = 10
= 0.01
2
1
1
60
Figura 4.8: Trelia plana.
30
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
31
32
33
50
4
100
7
4
4
5
100
2
1
100
x
E = 30000000
A= 10.0
= 0.01
50
y
34
3
L
L
x
4
L
L
5
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
36
5
CONCLUSES
5.1 CONCLUSO
37
REFERNCIAS BIBLIOGRFICAS
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.
Smith, I.M., Griffiths, D.V. (1999). Programming the Finite Element Method, Third
Edition, John Wiley & Sons.
38
APNDICE A
SUBROTINAS PARA EXECUTAR A SOLUO LINEAR
c
c
c
c
c
c
c
c
c
*****************************************************************
*
*
*===============================================================*
*
SUBROTINA PARA SOLUCAO LINEAR DO PROBLEMA
*
*===============================================================*
*
*
*****************************************************************
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---
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
42
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
*
*===============================================================*
*
*
*****************************************************************
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
*
*===============================================================*
*
*
*****************************************************************
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
*
*===============================================================*
*
*
*****************************************************************
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
*
*===============================================================*
*
*
*****************************************************************
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
*
*****************************************************************
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
57
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
*
*****************************************************************
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
63
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
C
C
C
INVERT MATRIZ B
CALL INVCH (B,H,N,NX)
C
C
C
MULTIPLY TRANSPOSE(H) * A * H
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
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
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 :
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
C
C
C
70
IC = J
20 CONTINUE
C
IF(IT) 5, 4, 5
C
C
C
C
C
C
C
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
C
C
C
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
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
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
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
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](:,:)
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