Professional Documents
Culture Documents
Orientadores:
Ricardo Valeriano Alves
Mayra Soares Pereira Lima Perlingeiro
Rio de Janeiro
Maro de 2015
DO
RIO
DE
JANEIRO
COMO
PARTE
DOS
REQUISITOS
Examinada por:
tridimensional
automtica
de
blocos
de
AGRADECIMENTOS
Agradeo,
Em primeiro lugar, a Deus por ter me dado essa (infelizmente) rara
oportunidade de acesso a ensino de alta qualidade. Oportunidade essa que passou
por muito trabalho e dedicao dos meus pais: Cristina e Saulo.
A eles, por terem me proporcionado uma infncia e uma juventude que no
poderia imaginar melhor, permitindo assim, que eu alcanasse mais esse objetivo.
A minha me duas vezes", Luzia, por toda pacincia e carinho.
A minha noiva, Rafaela Leal Coutinho, pela compreenso de todas as vezes
que no pude lhe dar a ateno merecida por estar me dedicando ao curso que estou
prestes a concluir.
Aos meus colegas de faculdade, Andr, Filipe, Guilherme, Jos Carlos, Paulo,
Pedro, Rafael, Ruan, Lucas, Vincius, Vitor e todos os outros que me incentivaram e
proporcionaram momentos de descontrao que tambm so muito importantes.
Aos meus amigos tupiniquins de Louvain-la-Neuve que no me deixaram
morrer de saudades do Brasil enquanto estive por l.
Aos timos professores que tive nessa Escola, especialmente, aos meus
orientadores Prof. Ricardo e Prof. Mayra, pela ateno e pelo interesse em me ajudar
neste trabalho.
ii
Maro/2015
iii
March/2015
This work concerns the automation of the modeling and analysis of vertical pile caps by
the Strut-and-Tie Method. The developed program executes the following steps:
analysis of pile groups, conception and analysis of a tridimensional truss and adequacy
of these trusses to respect the rules of the strut-and-tie method. All the models that
respect the chosen prescriptions are shown as results, with the elements forces
calculated. The deformation energy of each model is provided to help the engineer to
choose the internal forces arrangement to use. A validation example is manually solved
and its results are compared with the ones generated by the program. In the end, a
study of a cap sensitivity to geometrical imperfections, using the program results, is
developed.
iv
SUMRIO
INTRODUO .......................................................................................................... 1
1.1
1.2
2.2
2.2.1
2.2.2
2.2.3
Mtodo de Schiel......................................................................................... 13
3.2
3.3
3.3.1
Bielas ........................................................................................................... 20
3.3.2
Tirantes ....................................................................................................... 21
3.3.3
Ns e regies nodais................................................................................... 22
3.4
4
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.9.1
4.9.2
4.9.3
Deslocamentos............................................................................................ 46
4.9.4
4.10
4.11
4.12
4.13
4.14
5.1.1
5.1.2
5.1.3
5.1.4
5.1.5
5.2
5.3
vi
1 INTRODUO
obtidos em ensaios, conforme Adebar e Zhou (1996). Por essa razo, o mtodo de
bielas e tirantes foi escolhido para este trabalho.
Uma primeira motivao para a automatizao, aqui proposta, auxiliar o
engenheiro na modelagem e anlise, pelo mtodo das bielas e tirantes, de blocos com
configurao mais complexa. Dependendo do estaqueamento, ou da presena de
mais de um pilar, uma abordagem computacional pode ser de grande auxlio.
Alm disso, comum, aps finalizado o estaqueamento, verificar o
deslocamento excessivo em alguma estaca. A rotina automtica auxiliaria na rapidez
da verificao.
1.1
Objetivo do projeto
O principal objetivo desse trabalho elaborar um programa que execute a
1.2
Organizao do trabalho
Os captulos dois e trs visam revisar e apresentar os conceitos fundamentais
2 CLCULO DO ESTAQUEAMENTO
mtodos
mais
sofisticados.
Entretanto,
dependendo
da
geometria
do
2.1
bsicas:
2.2
2.2.1
Mtodo de Culmann
A primeira forma de clculo, desenvolvida ainda no sculo XIX, soluciona
2.2.2
Mtodo de Nkkentved
Posteriormente, expresses prticas foram desenvolvidas para a resoluo do
kzi . z 2.1
V=
i=1
Onde:
V: fora vertical aplicada ao bloco;
kzi: a rigidez vertical de cada estaca;
z: o deslocamento de corpo rgido do bloco na vertical;
n: nmero de estacas que compes o bloco.
V
(2.2)
ni=1 kzi
E . A
. cos 2 (2.3)
L
sendo:
E: mdulo de elasticidade do material;
A: rea da seo transversal da estaca;
L: comprimento da estaca;
: menor ngulo que o eixo da estaca faz com a direo vertical.
7
Finalmente, o esforo axial em cada estaca (Ni), provocado por uma fora vertical,
calculado pela expresso (2.4), com valor positivo para compresso:
Ni =
kzi . V
cos i . ni=1 kzi
(2.4)
E . A
. sen 2 xi (2.5)
L
kxi . x (2.6)
Hx =
i=1
Fxi = - kxi . x = -
kxi . Hx
(2.7)
kx
onde:
Hx: fora horizontal aplicada ao bloco na direo x,
kxi: rigidez na direo horizontal de cada estaca (expresso 2.5),
x: deslocamento de corpo rgido do bloco na direo x e
Fxi: componente da reao de cada estaca, tambm nessa direo.
A fora axial de cada estaca, provocada por uma fora horizontal, ento:
Ni =
kxi . Hx
sen(xi ). ni=1 kxi
(2.8)
Figura 2.5). Por essa simplificao, a fora deve ser transferida do topo do bloco para
esse centro causando um momento devido a essa translao da fora.
i=1
Ni =
ki . y . r2xi
Ni . rxi =
My =
(2.9)
i=1
ki . My . rxi
ni=1 (ki . rxi 2 )
(2.10)
sendo:
My: momento solicitante na direo y.
y: Rotao de corpo rgido do bloco na direo y.
ki: rigidez axial da estaca i.
10
rxi: a distncia do eixo da estaca i ao eixo, de mesma direo, que foi tomado como
referncia para determinao do centro de rotao. Essa distncia tomada, sempre,
perpendicular aos eixos;
Figura 2.6 - Distribuio das foras de equilbrio dos momentos (Adaptado de Alves (2014)).
kyi .Hy
ki .Mx .ryi
ki .My .rxi
kzi .V
kxi .Hx
(2.11)
2
cos i . kzi sen(xi ). kxi sen(yi ). kyi (ki .ryi ) (ki .r2xi )
(ki .y0i )
(ki .x0i )
e y0 =
(2.12)
ki
ki
onde:
x0i e y0i : coordenadas de cada estaca em relao ao sistema original;
x0 e y0 : coordenadas do centro de rigidez em relao ao sistema original.
Procede-se, ento, translao das coordenadas com os respectivos
momentos, utilizando as expresses a seguir:
xi = x0i - x0 e yi = y0i - y0
(2.13)
12
(2.15)
2 ki . xi . yi
1 -1
tg
2
ki . xi 2 - ki . yi 2
(2.17)
sendo:
: ngulo de rotao entre as direes dos eixos originais e as direes dos eixos
principais;
x e y: coordenadas de cada estaca em relao ao sistema de coordenadas final, com
origem no centro de rigidez e eixos nas direes principais;
Mx e My: so os momentos solicitantes em relao aos eixos do sistema de
coordenadas final.
2.2.3
Mtodo de Schiel
Com o desenvolvimento de programas computacionais, a formulao matricial,
13
Figura 2.8 - Sistema de coordenadas usual para aplicao do mtodo de Schiel (Adaptado de
Velloso e Lopes (2010)).
px2
py2
pz2
pa2
pb2
pc2
pxn
pyn
pzn
pan (2.17)
pbn
pcn
onde:
px = cos (componente segundo x);
py = cos (componente segundo y);
pz = cos (componente segundo z);
pa = y pz z py (momento em torno do eixo x);
pb = z px x pz (momento em torno do eixo y);
pc = x py y px (momento em torno do eixo z);
n: nmero de estacas.
As resultantes do carregamento, R, so escritas no vetor carregamento,
sempre respeitando as direes definidas dos eixos:
14
Rx
Ry
R
R = z (2.18)
Ra
Rb
Rc
onde:
Rx: fora solicitante na direo x;
Ry: fora solicitante na direo y;
Rz: fora solicitante na direo z;
Ra: momento solicitante em torno do eixo x;
Rb: momento solicitante em torno do eixo y;
Rc: momento solicitante em torno do eixo z.
Em seguida, necessrio calcular a matriz de rigidez do estaqueamento para
obter o deslocamento do topo de cada estaca. O primeiro passo para isso o clculo
da rigidez axial de cada estaca, dada por:
ki =
Ei .Ai
(2.19)
Li
(2.21)
(2.22)
N = D.PT.V
(2.23)
(2.24)
15
Nn
Como citado anteriormente, a formulao matricial se torna especialmente
vantajosa para casos de estaqueamento complexos. Por exemplo, se existirem
estacas inclinadas nas duas direes, e solicitaes com componentes em todas as
direes, inclusive com momentos de toro do pilar, a resoluo pelas frmulas de
Nkkentved se tornaria muito trabalhosa.
16
3.1
Regies de descontinuidade
Uma regio de descontinuidade em uma estrutura de concreto armado
3.2
aes, o comportamento antes da ruptura pode ser dividido em trs fases (ou
estdios).
No primeiro estdio, ainda no ocorreram fissuras no concreto e este apresenta
um campo de tenses elsticas. Nesse caso, para as regies B podem ser usadas as
frmulas de Resistncia dos Materiais em funo da rea e do momento de inrcia da
seo homognea. Para as regies D, uma anlise elstica ou por elementos finitos
pode ser empregada para obteno das tenses no ponto desejado.
18
(a)
(b)
(c)
represente o mais prximo possvel, o campo de tenses elsticas. Isso ajuda a evitar
que os limites de deformaes de fissurao sejam atingidos antes da plastificao.
Por isso, muitas vezes, antes de se elaborar um modelo de bielas e tirantes de uma
estrutura, feita uma anlise por elementos finitos para definir o caminho natural das
cargas.
Alm disso, outras recomendaes devem ser seguidas para modelagem em
bielas e tirantes e que so importantes no Captulo 4,Erro! Fonte de referncia no
encontrada. para automatizao da escolha dos modelos adequados, que so:
A impossibilidade do cruzamento de bielas fora dos ns. Isso leva a tenses
na regio do cruzamento no bem representadas pelo modelo. Ao contrrio,
uma biela pode ser cruzada por um tirante e tambm no h problemas se
isto ocorrer com dois tirantes.
A inclinao entre as bielas e tirantes limitada para no provocar
problemas de compatibilidade de deslocamentos entre regies prximas
nem abertura excessiva de fissuras. Os limites variam segundo cada autor
ou norma consultada. A NBR6118:2014 define um ngulo de inclinao das
bielas cuja tangente esteja entre 0,57 e 2,0. J a ACI 318-14 prescreve que
esse ngulo entre bielas e tirantes no seja inferior a 25.
Outra importante considerao o cuidado com o grau de hiperestaticidade
da trelia usada no modelo. Caso esta no seja isosttica, a distribuio das
foras entre os elementos depender das propriedades fsicas (mdulo de
elasticidade) e geomtricas de cada um (rea da seo transversal e
comprimento). Essas caractersticas das bielas e tirantes deveriam ser
utilizadas na anlise, aumentando muito o seu grau de complexidade. Alm
disso, esse tipo de anlise requer um processo iterativo para definio das
dimenses exatas dos ns, conforme relatam Chantelot e Mathern (2010).
Por essa razo, aconselhvel (mas no teoricamente necessrio) que o
modelo de bielas e tirantes seja isosttico.
3.3
3.3.1
Bielas
As bielas representam a concentrao do campo de tenses de compresso e,
(3.1)
(3.2)
(3.3)
onde:
v2 = 1 -
fck
(com fck expresso em MPa);
250
Tirantes
Os tirantes representam as armaduras passivas ou ativas. Esses devem ter
FSd
(3.4)
fyd
onde:
As a soma das reas das sees transversais das barras que compem a armadura;
FSd o valor de clculo da fora de trao no tirante obtida no modelo;
fyd a tenso de escoamento de clculo do ao.
21
3.3.3
Ns e regies nodais
Os pontos de encontros de bielas e tirantes so chamados de ns, e a regio
22
(3.5)
23
3.4
Otimizao do modelo
No existe um nico modelo correto de bielas e tirantes, bem como h vrios
Considerando a
energia mnima de deformao, conclui-se que a escolha do modelo timo pode ser
resumida pela seguinte expresso:
mnimo
Fi li i (3.6)
onde:
Fi a fora na biela ou tirante i;
li o comprimento do elemento i;
i a deformao axial do elemento i.
Como o ao muito mais deformvel que o concreto (Es/Ec 7), a contribuio
das bielas , geralmente, omitida. Alm disso, considerando que todos os tirantes
alcanam a sua resistncia de clculo (mesma tenso), a deformao axial tambm
a mesma para todos, o que conduz a expresso 3.7:
24
mnimo
onde:
Fti a fora no tirante i;
lti o comprimento do tirante i.
A Figura 3.6 ilustra duas maneiras distintas de modelar, por bielas e tirantes, as
foras internas em uma viga parede. Fica claro que o modelo (a) gera menos energia
de deformao que o modelo (b).
(a)
(b)
Figura 3.6 - (a) Modelo "adequado"; (b) Modelo no adequado. (Adaptado de Wight (2012))
25
4 IMPLEMENTAO COMPUTACIONAL
sensibilidade
experincia
do
engenheiro.
Dada
uma
regio
de
4.1
Matriz de conexo de ns
A automatizao da definio dos ns do modelo de trelia baseada na, aqui
n de conexes =
n de conexes =
+ NCT.NET +
NET.(NET-1)
2
(4.1c)
onde:
NCC: ns de introduo de cargas de compresso;
NCT: n de introduo de carga de trao;
NET: projeo dos ns de estacas tracionadas. A fora de cada estaca tracionada
deve ser suspensa at o topo do bloco, necessitando assim, de um n correspondente
neste plano.
Uma discretizao anloga pode ser feita para os ns da base do bloco.
n de conexes =
+ NET.NCT +
NET.(NET-1)
NEC.(NEC-1)
+ NEC.NET + NEC.NCT +
2
2
NCT.(NCT-1)
2
(4.2)
onde:
NEC: ns de estacas comprimidas;
NET: ns de estacas tracionadas;
NCT: projeo dos ns de carga de trao. Cada carga de trao aplicada deve ser
levada at o fundo do bloco, necessitando assim, de um n correspondente neste
plano.
As conexes entre planos requerem um pouco mais de ateno e sero
ilustradas a partir dos ns do plano superior do bloco. Os ns de carga de compresso
podem se conectar a qualquer n da base, resultando nas seguintes possibilidades:
n de conexes = NCC . (NEC + NET + NCT)
(4.3a)
(4.3a)
27
(4.4)
(4.5)
4.2
Fluxograma geral
A automatizao visou permitir que vrios modelos de trelias fossem formados
28
29
NET(NET-1)/2
NEC*NET
trao no topo
NCC*NET
NS NO FUNDO DO BLOCO
ESTACAS TRACIONADAS
1
...
NET
NCT(NCT-1)/2
NET*NCT
NEC*NCT
NET*NCT
NCT
NCC*NCT
NS PROJETADOS NO FUNDO
1
...
NCT
NCT
...
NET
...
NEC
...
NET
...
NCT
...
NCC
...
ESTACAS
ESTACAS
COMPRIMIDAS TRACIONADAS
NEC(NEC-1)/2
NET*NEC
NCT*NEC
NCC*NEC
ESTACAS COMPRIMIDAS
1
...
NEC
NET(NET-1)/2
NCT*NET
NCC*NET
NS PROJETADOS NO TOPO
1
...
NET
CARGAS DE
TRAO
NS
PROJETADOS
NO TOPO
2 - BIELAS OPCIONAIS
NCT(NCT-1)/2
NCC*NCT
NS NO TOPO DO BLOCO
CARGAS DE TRAO
1
...
NCT
CARGAS DE
COMPRESSO
1 - TIRANTES OBRIGATRIOS
NCC(NCC-1)/2
CARGAS DE COMPRESSO
1
...
NCC
NS NO TOPO DO BLOCO
NS NO FUNDO DO BLOCO
NS
PROJETADOS
NO FUNDO
30
31
4.3
Dados de entrada
Os dados de entrada devem respeitar um sistema de coordenadas pr-
estabelecido. No programa elaborado, o plano X-Y com Z igual a zero foi adotado no
topo do bloco. O sentido do eixo Z de baixo para cima.
As informaes fornecidas ao programa so as seguintes:
Altura til do bloco (hBLOCO). Como descrito no captulo 3, para uma definio
precisa da altura til, seria necessrio um clculo iterativo com a verificao
das tenses nos ns e alterao da altura til at se obter a condio tima.
Como medida aproximada, pode-se tomar 0,9 d, sendo d a distncia entre
uma face horizontal do bloco e o eixo da armadura da face oposta. Essa
reduo na altura feita para considerar a configurao dos ns e das
bielas da face comprimida.
Quantidade de estacas.
Coordenadas de cada estaca no plano horizontal seguidas de um valor
relativo de rigidez axial. A coordenada vertical (Z positivo para cima)
automaticamente adotada no fundo do bloco (Z = - hBLOCO). Para estacas
iguais, o valor da rigidez relativa informada para cada uma deve ser o
mesmo (mas nunca informar zero). Para estacas diferentes, pode-se adotar
a rigidez de um tipo como referncia e as outras como fraes desta.
Quantidade de pontos de introduo de carga
Coordenadas, no plano horizontal, dos pontos de introduo de carga e as
foras verticais de cada um. A coordenada vertical automaticamente
adotada como zero, correspondente ao topo do bloco. Conforme descrito no
inicio deste item, para aplicar uma fora de compresso no bloco, o sinal
deve ser negativo.
32
C=
xest,1
yest,1
- hBLOCO
xest,1
- hBLOCO
xest,n
yest,1
yest,n
xcar,1
ycar,1
xcar,1
ycar,2
ycar,m
xcar,m
- hBLOCO
(4.6)
onde :
C: matriz de coordenadas dos ns;
xest,i e yest,i: coordenadas do centro da cabea da estaca i;
xcar,i e ycar,i: coordenadas do ponto de introduo de carga i.
n: nmero de estacas;
m: nmero de pontos de introduo de carga.
Nest1
Nest2
Nestn
(4.7)
matriz de foras externas =
Ncar1
Ncar1
Ncarm
onde:
Nesti: espao reservado para armazenar a reao da estaca i que ser,
posteriormente, calculada.
Ncari: fora vertical aplicada no ponto de introduo de carga i.
kest1
k
matriz de rijezas das estacas = est2 (4.8)
kest,n
sendo, kesti a rigidez relativa da estaca i.
4.4
Anlise do estaqueamento
Como j foi dito no itm 3.2, necessrio conhecer as foras externas para
33
V=
(4.9)
i=n+1
n+m
Mx =
(4.10)
i=n+1
n+m
My =
onde:
V: fora vertical solicitante;
Mx: momento solicitante na direo x;
My: momento solicitante na direo y.
A soma das rijezas relativas de todas as estacas determinada em funo
do valor de referncia:
n
ktotal =
(4.12)
i=1
34
(4.13a)
y0 =
'
Ixx =
Iyy =
Ixy =
1 -1 2 Ixy
tg
(4.19)
2
Ixx + Iyy
(4.20a)
(4.20b)
Mx = Mx cos() + My sen()
(4.21a)
35
My = - Mx sen() + My cos()
(4.21b)
onde:
C: matriz de coordenadas dos ns com origem no centro de rigidez e
direes dos eixos coincidindo com as direes principais;
Mx e My: as componentes horizontais do momento j levando em conta a
translao da carga vertical e a rotao das direes dos eixos cartesianos.
Os momentos de 2 ordem do estaqueamento, Ixx, Iyy e Ixy so recalculados
com base nas coordenadas com o centro de rigidez e os eixos principais
corrigidos. As expresses so as expresses (4.16), (4.17) e (4.18) com a
substituio da matriz C pela matriz C.
As reaes de apoio so obtidas separadamente para cada solicitao e
somadas ao final. Como descrito mais adiante neste captulo, as reaes de
apoio obtidas so aplicadas como cargas externas no modelo de trelia
espacial definido pelas bielas e tirantes.
NV (i) =
matriz de rijezas i
V
ktotal
(4.22)
NMx (i)=
matriz de rijezas i
M''x C'' (i,2)
x
(4.23)
ktotal
I'xx
NMy (i)=
(4.25)
4.5
e tirantes, gerada uma matriz de ns, com duas colunas na qual cada linha tem o n
inicial e o n final do elemento. A princpio, o nmero de elementos possveis
corresponde combinao simples do nmero de ns (nmero de estacas mais
nmero de ns de introduo carga) de dois em dois, mas isso pode mudar se
existirem cargas externas de trao.
Conforme j apresentado no item 4.1, elementos de transferncia obrigatrios
so gerados sempre que existir uma carga externa de trao.
36
(a)
(b)
A partir deste ponto, existem dois caminhos pelos quais se pode continuar a
automatizao. No primeiro, todos os elementos que se ligariam ao n primrio so
transferidos para o novo n e cria-se um elemento vertical obrigatrio lingando os dois
ns. Esse tirante obrigatrio seria o nico elemento do n primrio e os outros ns no
poderiam se ligar a este. Essa abordagem no aumenta o nmero de combinaes
possveis, mas apenas adiciona esse elemento obrigatrio a todas as combinaes.
Uma segunda opo incluso desse novo n como se fosse outro n
qualquer, deixando que os outros ns se liguem tanto a ele como ao primrio. Isso
aumenta o nmero de combinaes, e gera muitas combinaes com tirantes em
diagonais, que posteriormente seriam excludas.
A Figura 4.5.a exemplifica a primeira abordagem para transferncia de carga.
Nesta, o n inicialmente definido no se conecta aos outros ns e o tirante vertical
apenas transfere a carga de trao externa. J na Figura 4.5.b, o n primrio, pode se
conectar a outros ns e o tirante vertical participa do arranjo das foras internas,
podendo suspender uma carga maior do que a aplicada externamente.
37
(a)
(b)
n1 nn-1
matriz de ns =
n1 nn
nn-2 nn
nn-1 nn
(4.26)
n de ns
n de elementos = C2
n de ns !
(4.27)
2! n de ns-2 !
4.6
Elementos sobrepostos
No caso de existirem trs ou mais ns colineares, a matriz de ns contaria com
y1
y2
y3
1
1
1
(4.28)
4.7
Combinaes de elementos
Pelos motivos expostos no item 3.2, os modelos de bielas e tirantes aceitos
pelo programa sero apenas os representados por trelias isostticas. Para tal, sero
definidas as combinaes que contm o nmero de elementos necessrios para que
uma trelia espacial seja internamente isosttica.
n de incgnitas = reaes de apoio + esforos normais
39
(4.29)
n de equaes = 3 x n de ns
(4.30)
(4.31)
(4.32)
n de combinaes = Cb =
a !
(4.33)
b! a - b !
40
matriz de combinaes =
4.8
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
6
7
7
7
7
7
7
7
7
7
8
8
8
8
8
8
8
8
8
9
9
9
9
9
9
9
9
9
10
10
10
10
(4.34)
10
10
10
10
10
Equilbrio dos ns
Como descrito por Sussekind (1991), a quantidade de elementos para formar
42
4.9
podem ser determinadas pelo sucessivo equilbrio de foras nos ns. Porm, por
facilidade de automatizao, cada trelia que respeite a verificao do item 4.8
analisada pelo mtodo dos deslocamentos. A implementao para o caso especfico
descrita a seguir.
4.9.1
43
Cy
Cx
-Cx Cy
2
Cz
2
Cx +Cz
2
Cx +Cz
TR =
-Cy Cz
-Cz
Cx +Cz (4.36)
Cx
2
2
Cx +Cz
Cx +Cz
sendo Cx, Cy, Cz, os cossenos diretores do vetor com mesma direo do
elemento. Calculados da seguinte forma, a partir dos dados da matriz de
vetores diretores definida no item 4.8:
Cx =
Cy =
(4.37b)
Cz =
(4.37c)
(4.37a)
onde:
Li =
mat. vet. dir. (i,1) + mat. vet. dir. (i,2) + mat. vet. dir. (i,3) (4.38)
TR
0
0
(4.39)
TR
EA
0 0
L
0
0 0
0
0 0 (4.40)
EA
0 0
L
0
0 0
0
0 0
Onde:
E: mdulo de elasticidade do material
A: rea da seo transversal da barra
L: comprimento da barra
44
n do n i - 1
n do n i - 1
n do n i - 1
n do n f - 1
n do n f - 1
n do n f - 1
+ 1
+ 2
+ 3
(4.42)
+ 1
+ 2
+ 3
onde:
i e f: n inicial e n final do elemento, respectivamente;
ngd: vetor de transformao do deslocamento local para o global.
As 36 rijezas de cada barra so adicionadas a matriz de rigidez da estrutura
(K) da seguinte maneira:
K(ngd(i),ngd(j)) = K(ngd(i),ngd(j)) + kG(i,j)
(4.43)
Condies de contorno
Obtida a matriz de rigidez da estrutura, necessrio se definir as condies de
Deslocamentos
Como j sabemos as reaes de apoio da estrutura, as nossas nicas
(4.45)
onde:
K a matriz de rigidez global,
U o vetor de deslocamentos nodais;
F o vetor de forcas nodais.
O vetor global de foras nodais ter como nmero de linhas, o nmero total de
deslocamentos da estrutura e ser formado pelas cargas aplicadas no bloco e pelas
reaes nas estacas. Para cada n, a expresso (4.46) executada:
F(ngd(i)) = matriz de foras externas (i)
(4.46)
O sistema de equaes lineares (4.45), resolvido por eliminao de GaussJordan com pivoteamento total baseado em Press (1992).
4.9.4
Solicitaes axiais
Aps a obteno do vetor global de deslocamentos nodais da estrutura, o
(4.47)
u L = R uG
(4.48)
(4.49)
4.10
4.11
Vetor de energia
Como visto no item 3.4, uma das maneiras de se escolher o melhor entre
4.12
Cruzamento de bielas
Como explicado no item 3.2, em um modelo de bielas e tirantes, as bielas s
podem se cruzar nos ns. Uma rotina foi implementada para fazer verificar essa
condio em cada modelo. Para cada par de elementos, procede-se da seguinte
maneira:
verificado se os elementos possuem um n em comum. Caso isto ocorra,
a verificao no precisa ser feita j que duas retas s se encontram uma
vez no espao. Passa-se para o prximo par.
Verifica-se, a partir da matriz geral de esforos, se ambos os elementos
esto comprimidos.
Caso os elementos no se encontrem em um n e sejam bielas, o programa
confere se pertencem ao mesmo plano. Isso feito analisando o valor
produto misto de trs vetores: os vetores diretores de cada elemento e um
vetor que cruze as duas retas. Caso a expresso a seguir se verifique, os
vetores so coplanares.
u . v x w = 0 (4.52)
onde, v e w so os vetores diretores dos dois elementos e u o vetor que
passa pelo primeiro n de cada elemento.
Caso contrrio, impossvel o cruzamento dos elementos.
Sendo os elementos coplanares, eles devem ser paralelos ou se cruzarem
em algum lugar no espao. A localizao do ponto de interseo pode ser
determinada da seguinte forma:
So consideradas as equaes paramtricas das duas retas:
r1 =
x= xi1 +Cx1 t1
y= yi1 +Cy1 t1
z= zi1 +Cz1 t1
r2 =
onde:
48
x= xi2 +Cx2 t2
y= yi2 +Cy2 t2 (4.53)
z= zi2 +Cz2 t2
4.13
u.v
(4.54)
|u| . |v|
|u . v|
(4.55)
|u| . |v|
50
4.14
Tirantes diagonais
Como descrito anteriormente, a existncia de armaduras no verticais entre os
51
52
5 EXEMPLOS DE APLICAO
5.1
Exemplo de validao
5.1.1
5.1.2
Clculo de estaqueamento
A distribuio das foras nas estacas calculada pelas expresses do item
53
estaca
xi (m)
xi (m)
V/n (kN)
-My.xi/Sxi (kN)
Fi (kN)
E1
E2
E3
E4
soma
-0,75
0,75
-0,75
0,75
-
0,563
0,563
0,563
0,563
2,25
-785
-785
-785
-785
-3140
166,7
-166,7
166,7
-166,7
0
618,3
951,7
618,3
951,7
3140
5.1.3
3140
500
+
= - 320 kN
2
0,4
V2 = -
3140 500
= - 2820 kN
2
0,4
54
55
0,55
0,75 + 0,55 + 0,65
= 61
ngulo entre a biela B1 e o tirante T3 (mesmo vlido para biela B3 e tirante T3):
2 = arccos
0,75
0,75 + 0,55 + 0,65
= 49
0,95
0,75 + 0,95 + 0,65
= 46
ngulos
0,75
0,75 + 0,55 + 0,65
esto
= 59
adequados
entre
os
limites
recomendados
pela
56
B3 =
951,7
951,7
=
= 1661,3 kN
sen2
sen 34,95
T2 =
951,7 sen1
951,7 sen 53,75
=
= 1098,1 kN
tg 34,95
tg2
T3 =
951,7 cos2
951,7 cos 53,75
=
= 805,2 kN
tg 34,95
tg1
57
B1 =
320
320
=
= 279,3 kN
2 cos1
2 cos 55,05
B2 =
618,3 - B1 sen3
sen1
elemento
N (kN)
B1
- 279,3
B2
- 968,6
B3
- 1661,3
B4
- 270,6
T1
713,4
T2
1098,1
T3
805,2
58
5.1.4
elaborao automtica do modelo de bielas e tirantes e clculo das foras nos seus
elementos. A metodologia de clculo foi apresentada no Captulo 4. A seguir, sero
apresentados os resultados obtidos para o modelo obtido com menor energia de
deformao e para o modelo com configurao similar ao utilizado no item anterior
para comparao dos resultados.
A seguir, lista-se o arquivo de entrada de dados com as informaes do bloco
da Figura . A primeira linha corresponde altura til do bloco. Na segunda linha,
informa-se o nmero de estacas. Em seguida, adiciona-se uma linha para cada
estaca, informando as coordenadas no plano do fundo do bloco e um valor relativo de
rigidez vertical (todas as estacas foram adotadas com a mesma rigidez).
Aps os dados do estaqueamento, informa-se o nmero de ns de introduo
de cargas desejado e a partir da, uma linha para cada n contendo as coordenadas
no plano do topo do bloco e as foras verticais aplicadas (com sinal positivo para
cima).
Por ltimo, so estabelecidos os limites inferior e superior desejados para os
ngulos de inclinao entre bielas e tirantes.
;DADOS DE ENTRADA:
;ALTURA TIL DO BLOCO.
0.65
;NMERO DE ESTACAS.
4
;COORDENADAS DE CADA ESTACA SEGUIDA DO VALOR RELATIVO DE RIGIDEZ.
-0.75
0.75
1.0
0.75
0.75
1.0
-0.75
-0.75
1.0
0.75
-0.75
1.0
;NMERO DE PONTOS DE INTRODUO DE CARGA.
2
;COORDENADAS DE CADA PONTO DE INTRODUO DE CARGA SEGUIDA DA FORA.
-0.2
0.0
-320.0
0.2
0.0
-2820.0
;LIMITE MNIMO E MXIMO, RESPECTIVAMENTE, PARA NGULOS ENTRE BIELAS E
;TIRANTES.
30.0
60.0
59
70.4
60
4
6
7
9
10
11
12
14
15
-601.0
909.7
785.4
-2138.5
524.1
-284.8
-1417.0
-1283.2
-554.0
...
ORDEM DO MODELO:
3
ENERGIA DE DEFORMAO:
ELEMENTO
1
2
3
4
5
7
9
10
11
12
14
15
5131.9
ESFORO AXIAL
805.0
713.2
0.2
-279.7
-969.9
1097.8
-1660.8
805.0
-278.7
-969.3
-1661.8
-271.2
...
6
Pela quantidade de ns, seria possvel gerar quinze elementos (C2 ), porm
uma trelia internamente isosttica de seis ns teria apenas doze (3 x 6 - 6)
15
61
Figura 5.7 - Modelo com menor energia de deformao para o exemplo de validao.
Figura 5.8 - Modelo com arranjo adequado de armaduras para o exemplo de validao.
5.1.5
5.2
Elemento
Nmanual (kN)
Nauto (kN)
B1
- 279,3
- 278,7/-279,7
B2
- 968,6
- 969,3/-969,9
B3
- 1661,3
- 1660,8/-1661,8
B4
- 270,6
- 271,2
T1
713,4
713,2
T2
1098,1
1097,8
T3
805,2
805,0
Exemplo dois
Para ilustrar a transferncia de cargas de trao para face oposta do bloco, so
3140 1000
+
= 930 kN
2
0,4
V2 = -
3140 1000
= - 4070 kN
2
0,4
0.75
1.0
63
-0.75
0.75
-0.75
-0.75
1.0
1.0
60.0
F
451.67
1118.33
1118.33
451.67
64
-216.4
-83.2
877.5
-2260.9
12
13
15
17
18
19
20
21
1204.0
633.0
-1525.2
-104.4
-1233.9
636.9
-128.8
-1335.4
...
ORDEM DO MODELO:
141
ENERGIA DE DEFORMAO:
6770.2
ELEMENTO
ESFORO AXIAL
1
2
4
5
6
7
8
950.0
946.2
919.3
-17.0
-933.6
-493.7
1290.5
11
13
15
17
18
19
20
21
-1951.1
945.9
-1952.2
-16.8
-934.0
-494.2
-16.2
-1114.3
...
65
Figura 5.9 - Modelo com menor energia de deformao para o exemplo alternativo.
Figura 5.10 - Modelo com arranjo adequado de armaduras para o exemplo alternativo.
66
5.3
(A)
(B)
(D)
(C)
(F)
(E)
(G)
(H)
Figura 5.12 - Arranjos de elementos possveis para modelos do bloco do exemplo de validao.
68
Figura 5.13 - Histograma mostrando a variao de energia de deformao para cada situao.
69
70
72
REFERNCIAS BIBLIOGRFICAS
73
RITTER,
W.,
1899,
Die
Bauweise
Hennebique
(O
sistema
Hennebique).
74
PROGRAMBT3D
IMPLICITNONE
!!
!BT3D!
!Programaparaautomatizaodamodelagemdebielasetirantesemumblocode!
!coroamento.!
!!
CHARACTER(60)::arquivo
INTEGER(KIND=8)::ncomb
INTEGER::nest,nnoscarga,nnosprim,ntotaldesl,nnostotal,nmodelok
INTEGER::ocomb,nelemposs,nelemtotal,nelemiso,ntirobrig,nelemtopo
INTEGER::mnos(190,2)
INTEGER,ALLOCATABLE::mcomb(:,:),omodelotimo(:)
REAL::hbloco,tetamin,tetamax,reacoes(10)
REAL::C(20,3),mforext(20,3),mkest(20)
REAL,ALLOCATABLE::U(:),menerg(:),mgeralesf(:,:)
!Leituranonomedoarquivodeentradadedados.
WRITE(*,*)'Digiteonomedoarquivo:'
READ(*,*)arquivo
!Leituradoarquivodeentradadedados.
!Dadossobreobloco,estaqueamentoecarregamentos.
CALLentrada(arquivo,hbloco,nest,C,mkest,nnoscarga,tetamin,tetamax,mforext,&
nnosprim)
!Rotinaparaclculodoestaqueamento(reaesdeapoio)pelomtododeScheil.
CALLcalculo_estaqueamento(nest,nnoscarga,C,mkest,mforext,reacoes)
!Rotinaparaformaodomodelodetreliaespacialecriaodostirantesde
!transfernciadasforasdetraoparaafaceopostadobloco.
CALLmodelo(hbloco,nest,nnoscarga,C,mforext,nnosprim,nelemposs,mnos,&
ntotaldesl,ntirobrig,nelemtotal,nnostotal,nelemiso)
!Rotinaparaverificaodaexistnciadeelementossobrepostos
CALLverifica1(nest,nnoscarga,C,nnosprim,ntotaldesl,mnos,nelemposs,nelemiso,&
nelemtotal,ncomb,nelemtopo)
ALLOCATE(U(ntotaldesl))
ALLOCATE(mcomb(ncomb,nelemiso+ntirobrig))
ALLOCATE(menerg(ncomb))
ALLOCATE(mgeralesf(ncomb,nelemiso+ntirobrig))
!Geraodamatrizcomotodasascombinaesdeelementospossvelparaforamr
!ummodelocomonmerodeelementosdeumatreliainternamenteisosttica.
CALLcombina(nelemposs,ntirobrig,ncomb,nelemiso,mcomb)
!Anlisedastrelias.
mgeralesf=0
nmodelok=0
menerg=0
!Verificaesquantoageometriadatrelia.
DOocomb=1,ncomb
CALLverifica2(C,nnosprim,nelemiso,nelemtotal,ntirobrig,mnos,&
75
ncomb,mcomb,ocomb,menerg)
IF(menerg(ocomb)<9E4)THEN
nmodelok=nmodelok+1
!Anlisedatreliaespacialisosttica.
CALLdeslocamento_trelesp(C,mforext,nnostotal,ntotaldesl,mnos,&
nelemiso,ntirobrig,ncomb,mcomb,ocomb,U)
CALLesforcos_trelesp(C,mnos,ntotaldesl,nelemiso,ntirobrig,ncomb,&
mcomb,U,ocomb,mgeralesf,menerg)
!Verificaesquantoaosesforosnoselementos.
CALLverifica3(hbloco,C,nelemiso,nelemtotal,ntirobrig,mnos,ncomb,&
mcomb,ocomb,menerg,mgeralesf,nmodelok,tetamin,tetamax,nelemtopo)
ENDIF
ENDDO
ALLOCATE(omodelotimo(nmodelok))
!Impressodosdadosdeentrada,deinformaesdaanliseedosresultadosemum
!arquivodetexto.
CALLrelatorio(hbloco,nest,nnoscarga,C,reacoes,mforext,menerg,nelemiso,&
ntirobrig,ncomb,mcomb,mgeralesf,nmodelok,omodelotimo)
!Impressogrficadomodelonatela.
CALLgraficos(C,nnostotal,ncomb,nelemiso,ntirobrig,mnos,mcomb,mgeralesf,&
menerg,omodelotimo,nmodelok)
ENDPROGRAM
SUBROUTINEentrada(arquivo,hbloco,nest,C,mkest,nnoscarga,tetamin,&
tetamax,mforext,nnosprim)
IMPLICITNONE
!!
!Subrotinaparaleituradosdadosdeentradadobloco,doestaquementoedo!
!carregamento.!
!!
CHARACTER(60)::arquivo,linha
INTEGER::i,j,nest,nnoscarga,tirdiagonais,nnosprim
REAL::hbloco,C(20,3),mforext(20,3),mkest(20),tetamin,tetamax
OPEN(1,file=arquivo)
OPEN(2,file='dadosentrada.txt')
!Preparaodoarquivodeentrada.
DOWHILE(.not.EOF(1))
READ(1,'(A60)')linha
IF(linha(:1)/=";")WRITE(2,'(A60)')linha
ENDDO
REWIND(2)
!Leituradaalturadoblocoedonmerodeestacas.
READ(2,*)hbloco
READ(2,*)nest
!Leituradascoordenadasedarigidezdecadaestaca.
DOi=1,nest
READ(2,*)C(i,1),C(i,2),mkest(i)
C(i,3)=hbloco
ENDDO
76
!Leituradonmerodenscarregadosedacoordenadadecadan.
mforext=0
READ(2,*)nnoscarga
DOi=1,nnoscarga
READ(2,*)C(nest+i,1),C(nest+i,2),mforext(NEST+i,3)
C(nest+i,3)=0
ENDDO
nnosprim=nest+nnoscarga
!Leituradoslimitesinfrioresuperiordosngulosdeinclinaoentrebielas
!etirantes.
READ(2,*)tetamin,tetamax
REWIND(1)
REWIND(2)
CLOSE(1)
CLOSE(2)
ENDSUBROUTINE
SUBROUTINEcalculo_estaqueamento(nest,nnoscarga,C,mkest,mforext,reacoes)
IMPLICITNONE
!!
!Subrotinaparaclculodadistribuiodascargasentreasestacas.!
!Referncias:!
!RicardoValerianoNotasdeaulaFundaesprofundas.!
!!
INTEGER::i,nest,nnoscarga
REAL::C(20,3),mkest(20),mforext(20,3),reacoes(10)
REAL::centro(2),Caux(20,2),Cprin(20,2)
REAL::v,mx,my,ixx,iyy,ixy,ktot,mxprin,myprin,alfa
!Transformaodasforasverticasdosdiversosnsdecargaemumcarregamento
!deforaverticalemomentoshorizontaisnoponto(0,0).
v=0
mx=0
my=0
DOi=1,nnoscarga
v=v+mforext(nest+i,3)
mx=mx+mforext(nest+i,3)*C(nest+i,2)
my=mymforext(nest+i,3)*C(nest+i,1)
ENDDO
!Definiodasomadasrijezasdetodasasestacas.
ktot=0
DOi=1,nest
ktot=ktot+mkest(i)
ENDDO
!Definiodocentroderigidezdoestaqueamento
centro=0
DOi=1,nest
centro(1)=centro(1)+mkest(i)*C(i,1)/(ktot)
centro(2)=centro(2)+mkest(i)*C(i,2)/(ktot)
ENDDO
!Clculodascoordenadasemrelaoaoeixoprincipal.
77
DOi=1,nest
Caux(i,1)=C(i,1)centro(1)
Caux(i,2)=C(i,2)centro(2)
mx=mxv*centro(2)
my=my+v*centro(1)
ENDDO
!Clculodasinerciasdoestaqueamentoemrelaoaocentrooriginal.
ixy=0
ixx=0
iyy=0
DOi=1,nest
ixy=ixy+mkest(i)/ktot*Caux(i,1)*Caux(i,2)
ixx=ixx+mkest(i)/ktot*Caux(i,2)**2
iyy=iyy+mkest(i)/ktot*Caux(i,1)**2
ENDDO
!Clculodonguloderotaodoseixosparasetornaremeixosprincipais.
alfa=0.5*ATAN(2*ixy/(ixx+iyy))
!Transformaodascoordenadasedascomponentesdomomentoparaasdirees
!principais.
DOi=1,nest
Cprin(i,1)=Caux(i,1)*COS(alfa)+Caux(i,2)*SIN(alfa)
Cprin(i,2)=Caux(i,1)*SIN(alfa)+Caux(i,2)*COS(alfa)
mxprin=mx*COS(alfa)+my*SIN(alfa)
myprin=mx*SIN(alfa)+my*COS(alfa)
ENDDO
!Transformaodasinerciasdoestaqueamento.
ixx=0
iyy=0
DOi=1,nest
ixx=ixx+mkest(i)/ktot*Cprin(i,2)**2
iyy=iyy+mkest(i)/ktot*Cprin(i,1)**2
ENDDO
!Clculodasforasnasestacas.
DOi=1,nest
mforext(i,3)=v+mxprin*Cprin(i,2)/ixxmyprin*Cprin(i,1)/iyy
mforext(i,3)=mkest(i)/ktot*mforext(i,3)
reacoes(i)=mforext(i,3)
ENDDO
ENDSUBROUTINEcalculo_estaqueamento
SUBROUTINEmodelo(hbloco,nest,nnoscarga,C,mforext,nnosprim,nelemposs,mnos,&
ntotaldesl,ntirobrig,nelemtotal,nnostotal,nelemiso)
IMPLICITNONE
!!
!Subrotinaparatransfernciadecargasaplicadasdetraoparaafaceoposta!
!dobloco.!
!!
INTEGER::i,j,k
INTEGER::nest,nnosprim,nnoscarga,nnostotal,ntotaldesl,nnosnovos
INTEGER::ntirobrig,nelemposs,nelemtotal,nelemiso
INTEGER::mnos(190,2)
REAL::mforext(20,3),C(20,3),hbloco
!Iniciarnmerodensnovos.
nnosnovos=0
78
!Iniciarnmerodetirantesobrigatrios.
ntirobrig=0
!Casodeestacastracionadas.
DOi=1,nest
IF(mforext(i,3)<0)THEN
nnosnovos=nnosnovos+1
C(nnosprim+nnosnovos,1)=C(i,1)
C(nnosprim+nnosnovos,2)=C(i,2)
C(nnosprim+nnosnovos,3)=0
ntirobrig=ntirobrig+1
mnos(ntirobrig,1)=i
mnos(ntirobrig,2)=nnosprim+nnosnovos
ENDIF
ENDDO
!Casodecargaaplicadadetrao
DOi=1,nnoscarga
IF(mforext(nest+i,3)>0)THEN
nnosnovos=nnosnovos+1
C(nnosprim+nnosnovos,1)=C(i+nest,1)
C(nnosprim+nnosnovos,2)=C(i+nest,2)
C(nnosprim+nnosnovos,3)=hbloco
ntirobrig=ntirobrig+1
mnos(ntirobrig,1)=i+nest
mnos(ntirobrig,2)=nnosprim+nnosnovos
ENDIF
ENDDO
!Nmerodenstotal.
nnostotal=nnosprim+nnosnovos
ntotaldesl=3*nnostotal
!Geraodoselementospossveis.
nelemtotal=ntirobrig
DOi=1,(nnosprim+nnosnovos1)
DOj=i+1,(nnosprim+nnosnovos)
nelemtotal=nelemtotal+1
mnos(nelemtotal,1)=i
mnos(nelemtotal,2)=j
DOk=1,ntirobrig
IF((i==mnos(k,1)).and.(j==mnos(k,2)))nelemtotal=nelemtotal1
IF((i==mnos(k,2)).and.(j==mnos(k,1)))nelemtotal=nelemtotal1
ENDDO
ENDDO
ENDDO
nelemposs=nelemtotalntirobrig
!Nmerodeelementosnomodeloisosttico,almdostirantesobrigatrios.
nelemiso=3*nnostotal6ntirobrig
ENDSUBROUTINE
SUBROUTINEverifica1(nest,nnoscarga,C,nnosprim,ntotaldesl,mnos,nelemposs,nelemiso,&
nelemtotal,ncomb,nelemtopo)
IMPLICITNONE
!!
!Subrotinaparaverificaodaexistnciadeelementossobrepostoeeventual!
!exclusodeumdesseselementos.!
!!
79
INTEGER::i,j,no1,no2,no3,nest,nnoscarga,nnosprim
INTEGER::nelemposs,ntotaldesl,nelemiso,nelemtotal,nelemtopo
INTEGER::mnos(190,2)
REAL::C(20,3),comp1,comp2,comp3,det,delta(3,3)
INTEGER(KIND=8)::ncomb,combinacoes
!Verificaodassuperposiesnoplanodofundodoblocoacadatrsns.
DOno1=1,nest
DOno2=no1+1,nest
DOno3=no2+1,nest
!Clculododeterminantedamatriz3x3definidaspelascoordenadas.
!dostrsns.
det=C(no1,1)*C(no2,2)+C(no1,2)*C(no3,1)+C(no2,1)*C(no3,2)
det=detC(no1,1)*C(no3,2)C(no1,2)*C(no2,1)C(no2,2)*C(no3,1)
!Verificaodacolinearidadedostrsnsnoplano(determinante
!igualazero).
IF(ABS(det)<1E5)THEN
!Exclusodomaiorelemento.
delta(1,1)=C(no2,1)C(no1,1)
delta(1,2)=C(no2,2)C(no1,2)
delta(1,3)=C(no2,3)C(no1,3)
delta(2,1)=C(no3,1)C(no1,1)
delta(2,2)=C(no3,2)C(no1,2)
delta(2,3)=C(no3,3)C(no1,3)
delta(3,1)=C(no3,1)C(no2,1)
delta(3,2)=C(no3,2)C(no2,2)
delta(3,3)=C(no3,3)C(no2,3)
comp1=SQRT(delta(1,1)**2+delta(1,2)**2+delta(1,3)**2)
comp2=SQRT(delta(2,1)**2+delta(2,2)**2+delta(2,3)**2)
comp3=SQRT(delta(3,1)**2+delta(3,2)**2+delta(3,3)**2)
IF((comp1>comp2).and.(comp1>comp3))THEN
DOi=1,nelemposs
IF(((mnos(i,1)==no1).and.(mnos(i,2)==no2)).or.&
((mnos(i,1)==no2).and.(mnos(i,2)==no1)))&
mnos(i,1)=1
ENDDO
ELSEIF((comp2>comp1).and.(comp2>comp3))THEN
DOi=1,nelemposs
IF(((mnos(i,1)==no1).and.(mnos(i,2)==no3)).or.&
((mnos(i,1)==no3).and.(mnos(i,2)==no1)))&
mnos(i,1)=1
ENDDO
ELSE
DOi=1,nelemposs
IF(((mnos(i,1)==no2).and.(mnos(i,2)==no3)).or.&
((mnos(i,1)==no3).and.(mnos(i,2)==no2)))&
mnos(i,1)=1
ENDDO
ENDIF
ENDIF
ENDDO
ENDDO
ENDDO
!Reordenaodamatrizdens.
DOi=1,nelemposs1
IF(mnos(i,1)==1)THEN
DOj=i,nelemposs1
mnos(j,1)=mnos(j+1,1)
mnos(j,2)=mnos(j+1,2)
ENDDO
mnos(j,1)=0
mnos(j,2)=0
80
nelemposs=nelemposs1
nelemiso=nelemiso1
nelemtotal=nelemtotal1
ENDIF
ENDDO
!Nmerodemodelosisostticos.
ncomb=combinacoes(nelemposs,nelemiso)
!Nmerodeelementosligandonsdecarga
IF(nnoscarga>2)THEN
nelemtopo=combinacoes(nnoscarga,2)
ELSEIF(nnoscarga==1)THEN
nelemtopo=0
ELSE
nelemtopo=1
ENDIF
ENDSUBROUTINE
FUNCTIONcombinacoes(a,b)
!Funoqueretornaonmerodecombinaoesde'a'elementoscombinadosde
!'b'em'b'.
INTEGER(KIND=8)::i,a,b,combinacoes,ft1,ft2
!ft1=1
!DOi=(b+1),a
!ft1=ft1*i
!ENDDO
!ft2=1
combinacoes=1
DOi=1,(ab)
combinacoes=combinacoes*(b+i)/i
!ft2=ft2*i
ENDDO
!combinacoes=ft1/ft2
ENDFUNCTION
SUBROUTINEcombina(nelemposs,ntirobrig,ncomb,nelemiso,mcomb)
IMPLICITNONE
!!
!Subrotinaparageraodematrizcomtodasascombinaespossveisformando!
!modelosisostticosemantendoostirantesobrigatrios.!
!!
INTEGER::i,j,k,x,w,aux(0:100)
INTEGER::nelemposs,nelemiso,ntirobrig,comb,mcomb(ncomb,nelemiso+ntirobrig)
INTEGER(KIND=8)::ncomb
x=nelemposs
k=nelemiso
DOi=1,k
aux(i1)=i
ENDDO
OPEN(5,file="COMB.txt")
81
!Primeiracombinao
j=0
DOi=1,ntirobrig
WRITE(5,5)i
j=j+1
ENDDO
DOi=0,(k1)
WRITE(5,5)aux(i)+ntirobrig
5FORMAT(i3,$)
j=j+1
IF(j==30)THEN
j=0
WRITE(5,*)
ENDIF
ENDDO
WRITE(5,*)
!Geradordasdemaiscombinaes
DOw=1,(ncomb1)
i=k1
DOWHILE(aux(i)==(xk+i+1))
i=i1
IF(i<0)CALLEXIT()
ENDDO
aux(i)=aux(i)+1
DOj=(i+1),(k1)
aux(j)=aux(i)+ji
ENDDO
!Impressodacombinao
j=0
DOi=1,ntirobrig
WRITE(5,5)i
j=j+1
ENDDO
DOi=0,(k1)
WRITE(5,5)aux(i)+ntirobrig
j=j+1
IF(j==30)THEN
j=0
WRITE(5,*)
ENDIF
ENDDO
WRITE(5,*)
ENDDO
REWIND(5)
!Leituradosdadosparaformaodamatriz.
DOi=1,ncomb
DOj=1,nelemiso+ntirobrig1
READ(5,'(i3)',advance='no')mcomb(i,j)
ENDDO
READ(5,'(i3)')mcomb(i,nelemiso+ntirobrig)
ENDDO
CLOSE(5)
ENDSUBROUTINE
SUBROUTINEverifica2(C,nnosprim,nelemiso,nelemtotal,ntirobrig,mnos,ncomb,mcomb,&
ocomb,menerg)
IMPLICITNONE
82
!!
!Subrotinaparaverificaodoequilbriodetodososnsedainclinaodas!
!bielas.!
!!
INTEGER::i,j,k,x,w,teste,elem
INTEGER::nnosprim,nelemiso,nelemtotal,ntirobrig,ocomb
INTEGER::mnos(190,2),mcomb(ncomb,nelemiso+ntirobrig)
REAL::C(20,3),deltax,deltay,deltaz,sendirz,comp
REAL::menerg(ncomb),mvet(nelemtotal,3),vetref(3),mvetnormal(nelemtotal,3)
INTEGER(KIND=8)::ncomb
!Formaodamatrizdevetoresdoselementos.
mvet=0
DOelem=(ntirobrig+1),nelemtotal
mvet(elem,1)=C(mnos(elem,2),1)C(mnos(elem,1),1)
mvet(elem,2)=C(mnos(elem,2),2)C(mnos(elem,1),2)
mvet(elem,3)=C(mnos(elem,2),3)C(mnos(elem,1),3)
ENDDO
!Verificaodonmeromnimodeelementosligadosacadan(3).
DOi=1,nnosprim
k=0
DOj=(ntirobrig+1),(nelemiso+ntirobrig)
elem=mcomb(ocomb,j)
IF((mnos(elem,1)==i).or.(mnos(elem,2)==i))k=k+1
ENDDO
IF(k<3)menerg(ocomb)=1E7
ENDDO
!Verificaodaexistenciadeelementosnocoplanaresligadosaon.
!Obtenodovetordereferncianon.
DOi=1,nnosprim
mvetnormal=0
x=0
DOj=(ntirobrig+1),(nelemiso+ntirobrig)
elem=mcomb(ocomb,j)
IF((mnos(elem,1)==i).or.(mnos(elem,2)==i))THEN
vetref(1)=mvet(elem,1)
vetref(2)=mvet(elem,2)
vetref(3)=mvet(elem,3)
GOTO10
ENDIF
ENDDO
!Obtenodosvetoresnormaisdosplanosdecadaumdosoutrosvetoresdon
!comovetordereferncia.
10DOk=(j+1),(nelemiso+ntirobrig)
elem=mcomb(ocomb,k)
IF((mnos(elem,1)==i).or.(mnos(elem,2)==i))then
mvetnormal(elem,1)=vetref(2)*mvet(elem,3)vetref(3)*mvet(elem,2)
mvetnormal(elem,2)=vetref(3)*mvet(elem,1)vetref(1)*mvet(elem,3)
mvetnormal(elem,3)=vetref(1)*mvet(elem,2)vetref(2)*mvet(elem,1)
comp=SQRT(mvetnormal(elem,1)**2+mvetnormal(elem,2)**2&
+mvetnormal(elem,3)**2)
mvetnormal(elem,1)=mvetnormal(elem,1)/comp
mvetnormal(elem,2)=mvetnormal(elem,2)/comp
mvetnormal(elem,3)=mvetnormal(elem,3)/comp
x=x+1
ENDIF
ENDDO
!Reordenaodamatrizdevetoresnormais
DOk=1,(nelemtotal1)
DOj=1,nelemtotal
83
IF((ABS(mvetnormal(k,1))<1E5).and.(ABS(mvetnormal(k,2))<1E5)&
.and.(ABS(mvetnormal(k,3))<1E5))THEN
DOw=k,(nelemtotal1)
mvetnormal(w,1)=mvetnormal(w+1,1)
mvetnormal(w,2)=mvetnormal(w+1,2)
mvetnormal(w,3)=mvetnormal(w+1,3)
ENDDO
mvetnormal(w,1)=0
mvetnormal(w,2)=0
mvetnormal(w,3)=0
ENDIF
ENDDO
ENDDO
!Comparaodosvetoresnormais
teste=1
DOk=1,(x1)
IF((ABS(mvetnormal(k,1)mvetnormal(k+1,1))<1E5).and.&
(ABS(mvetnormal(k,2)mvetnormal(k+1,2))<1E5).and.&
(ABS(mvetnormal(k,3)mvetnormal(k+1,3))<1E5))THEN
teste=teste*1
ELSEIF((ABS(mvetnormal(k,1)+mvetnormal(k+1,1))<1E5).and.&
(ABS(mvetnormal(k,2)+mvetnormal(k+1,2))<1E5).and.&
(ABS(mvetnormal(k,3)+mvetnormal(k+1,3))<1E5))THEN
teste=teste*1
ELSE
teste=teste*0
ENDIF
ENDDO
IF(teste==1)menerg(ocomb)=1E7
ENDDO
ENDSUBROUTINE
SUBROUTINEdeslocamento_trelesp(C,mforext,nnostotal,ntotaldesl,mnos,nelemiso,&
ntirobrig,ncomb,mcomb,ocomb,U)
IMPLICITNONE
!!
!Subrotinadeanlisedeumatreliaespacial.!
!Referncias:!
!SorianoAnlisedeEstruturasFormulaaomatricial...!
!!
INTEGER::i,j,w,ocomb,elem
INTEGER::nnostotal,ntotaldesl,nelemiso,ntirobrig
INTEGER::mnos(190,2),desl(6),mcomb(ncomb,nelemiso+ntirobrig)
REAL::C(20,3),mforext(20,3),comp,compmax,R(6,6)
REAL::Kelemglobal(6,6),Kelemlocal(6,6)
REAL::K(ntotaldesl,ntotaldesl),F(ntotaldesl),U(ntotaldesl)
INTEGER(KIND=8)::ncomb
!Formaodamatrizderigidezdatreliaespacial.
K=0
compmax=0
DOw=1,nelemiso+ntirobrig
elem=mcomb(ocomb,w)
CALLelemento_trelesp(C,mnos,elem,desl,R,Kelemglobal,Kelemlocal,comp)
DOi=1,6
DOj=1,6
K(desl(i),desl(j))=K(desl(i),desl(j))+Kelemglobal(i,j)
ENDDO
84
ENDDO
IF(comp>compmax)THEN
compmax=comp
ENDIF
ENDDO
!Aplicaodemolascombaixarigidez
DOi=1,ntotaldesl
K(i,i)=K(i,i)+0.0001/compmax
ENDDO
!Formaodovetordeforas.
F=0
DOi=1,nnostotal
DOj=1,3
w=3*(i1)+j
F(w)=F(w)+mforext(i,j)
ENDDO
ENDDO
!Inversodamatrizderigidez
CALLgaussjordan(K,ntotaldesl,ntotaldesl)
!Matrizdedeslocamentosdosns.
U=MATMUL(K,F)
ENDSUBROUTINE
SUBROUTINEelemento_trelesp(C,mnos,elem,desl,R,Kelemglobal,Kelemlocal,comp)
IMPLICITNONE
!!
!Rotinaparadeterminaodamatrizderigidez,nosistemadereferncia!
!global,doelementodetreliaespacial.!
!Referncias:!
!SorianoAnlisedeEstruturasFormulaaomatricial...!
!!
INTEGER::i,j,elem
INTEGER::mnos(190,2),desl(6)
REAL::deltax,deltay,deltaz,comp,cosdirx,cosdiry,cosdirz,cosdirxz
REAL::C(20,3),R(6,6),Rtransp(6,6),Kelemlocal(6,6),Kelemglobal(6,6)
!Nmeraoglobaldosdeslocamentosdosnsdoelemento.
desl(1)=3*(mnos(elem,1)1)+1
desl(2)=3*(mnos(elem,1)1)+2
desl(3)=3*(mnos(elem,1)1)+3
desl(4)=3*(mnos(elem,2)1)+1
desl(5)=3*(mnos(elem,2)1)+2
desl(6)=3*(mnos(elem,2)1)+3
!Projees,comprimentoecossenosdiretores.
deltax=C(mnos(elem,2),1)C(mnos(elem,1),1)
deltay=C(mnos(elem,2),2)C(mnos(elem,1),2)
deltaz=C(mnos(elem,2),3)C(mnos(elem,1),3)
comp=SQRT(deltax**2+deltay**2+deltaz**2)
cosdirx=deltax/comp
cosdiry=deltay/comp
cosdirz=deltaz/comp
cosdirxz=SQRT(cosdirx**2+cosdirz**2)
!Matrizderotaodoelemento.
R=0
IF(cosdirxz>0)THEN
85
R(1,1)=cosdirx
R(1,2)=cosdiry
R(1,3)=cosdirz
R(2,1)=cosdirx*cosdiry/cosdirxz
R(2,2)=cosdirxz
R(2,3)=cosdiry*cosdirz/cosdirxz
R(3,1)=cosdirz/cosdirxz
R(3,3)=cosdirx/cosdirxz
ELSE
R(1,2)=cosdiry
R(2,1)=cosdiry
R(3,3)=1
ENDIF
DOi=1,3
DOj=1,3
R(i+3,j+3)=R(i,j)
ENDDO
ENDDO
!Transposiodamatrizderigidez.
DOi=1,6
DOj=1,6
Rtransp(i,j)=R(j,i)
ENDDO
ENDDO
!Matrizderigidezdoelementonosistemadereferncialocal.
Kelemlocal=0
Kelemlocal(1,1)=1/comp
Kelemlocal(1,4)=1/comp
Kelemlocal(4,1)=1/comp
Kelemlocal(4,4)=1/comp
!Matrizderigidezdoelementonosistemaderefernciaglobal.
Kelemglobal=MATMUL(Rtransp,Kelemlocal)
Kelemglobal=MATMUL(Kelemglobal,R)
ENDSUBROUTINE
SUBROUTINEgaussjordan(a,n,np)
!!
!Subrotinaparainversodeumamatriz.!
!Amatriz"a"sersubstitudapelasuainversanoprocesso.!
!Referncias:!
!PRESSet.al.Numericalrecipesinfortran77.!
!!
INTEGER::n,np,nmax
REAL::a(np,np)
PARAMETER(nmax=50)
INTEGER::i,icol,irow,j,k,l,ll,indxc(nmax),indxr(nmax),ipiv(nmax)
REAL::big,dum,pivinv
DOj=1,n
ipiv(j)=0
ENDDO
DOi=1,n
big=0.
DOj=1,n
IF(ipiv(j).ne.1)THEN
DOk=1,n
IF(ipiv(k).eq.0)THEN
IF(abs(a(j,k)).ge.big)THEN
86
big=abs(a(j,k))
irow=j
icol=k
ENDIF
ELSEIF(ipiv(k).gt.1)THEN
PAUSE'matrizsingularencontrada'
ENDIF
ENDDO
ENDIF
ENDDO
ipiv(icol)=ipiv(icol)+1
IF(irow.ne.icol)THEN
DOl=1,n
dum=a(irow,l)
a(irow,l)=a(icol,l)
a(icol,l)=dum
ENDDO
ENDIF
indxr(i)=irow
indxc(i)=icol
IF(a(icol,icol).eq.0.)PAUSE'matrizsingularencontrada'
pivinv=1./a(icol,icol)
a(icol,icol)=1.
DOl=1,n
a(icol,l)=a(icol,l)*pivinv
ENDDO
DOll=1,n
IF(ll.ne.icol)THEN
dum=a(ll,icol)
a(ll,icol)=0.
DOl=1,n
a(ll,l)=a(ll,l)a(icol,l)*dum
ENDDO
ENDIF
ENDDO
ENDDO
DOl=n,1,1
IF(indxr(l).ne.indxc(l))THEN
DOk=1,n
dum=a(k,indxr(l))
a(k,indxr(l))=a(k,indxc(l))
a(k,indxc(l))=dum
ENDDO
ENDIF
ENDDO
RETURN
ENDSUBROUTINE
SUBROUTINEesforcos_trelesp(C,mnos,ntotaldesl,nelemiso,ntirobrig,ncomb,mcomb,U,&
ocomb,mgeralesf,menerg)
IMPLICITNONE
!!
!Rotinaparaclculodosesforosnormaisnoselementosdeumatreliaespacial,!
!apartirdamatrizdedeslocamentosjcalculada.Registrodas"energiasde!
!deslocamento"decadamodelo.!
!!
INTEGER::i,j,x,nelemiso,ntirobrig,ntotaldesl,ocomb,elem
INTEGER::mnos(190,2),desl(6),mcomb(ncomb,nelemiso+ntirobrig)
INTEGER(KIND=8)::ncomb
87
REAL::C(20,3),comp,R(6,6)
REAL::Kelemglobal(6,6),U(ntotaldesl),Uelemglobal(6),Kelemlocal(6,6)
REAL::menerg(ncomb),mgeralesf(ncomb,nelemiso+ntirobrig),esf(6)
menerg(ocomb)=0
!Clculodosesforosaxiasemcadaelemento.
DOx=1,(nelemiso+ntirobrig)
elem=mcomb(ocomb,x)
CALLelemento_trelesp(C,mnos,elem,desl,R,Kelemglobal,Kelemlocal,comp)
DOi=1,6
Uelemglobal(i)=U(desl(i))
ENDDO
esf=MATMUL(R,Uelemglobal)
esf=MATMUL(Kelemlocal,esf)
!Clculodaenergiadecadamodelo.
IF(esf(4)>0)menerg(ocomb)=menerg(ocomb)+esf(4)*comp
mgeralesf(ocomb,x)=esf(4)
ENDDO
ENDSUBROUTINE
SUBROUTINEverifica3(hbloco,C,nelemiso,nelemtotal,ntirobrig,mnos,ncomb,mcomb,&
ocomb,menerg,mgeralesf,nmodelok,tetamin,tetamax,nelemtopo)
IMPLICITNONE
!!
!Rotinaparaverificaodocruzamentodebielasedaexistnciadediagonais!
!comtrao!
!!
INTEGER::i,j,elem,elem1,elem2,ocomb,nmodelok,tirdiagonais
INTEGER::nelemiso,nelemtotal,ntirobrig,nelemtopo
INTEGER::mnos(190,2),mcomb(ncomb,nelemiso+ntirobrig)
REAL::t,z,w,cosdirz,cosalfa,tetamin,tetamax,esfmedio
REAL::mvet(nelemtotal,3),aux(3),mcomp(nelemtotal)
REAL::hbloco,C(20,3),mgeralesf(ncomb,nelemiso+ntirobrig),menerg(ncomb)
INTEGER(KIND=8)::ncomb
!Formaodamatrizdevetoresdoselementos.
mvet=0
DOelem=ntirobrig+1,nelemtotal
mvet(elem,1)=C(mnos(elem,2),1)C(mnos(elem,1),1)
mvet(elem,2)=C(mnos(elem,2),2)C(mnos(elem,1),2)
mvet(elem,3)=C(mnos(elem,2),3)C(mnos(elem,1),3)
mcomp(elem)=SQRT(mvet(elem,1)**2+mvet(elem,2)**2+mvet(elem,3)**2)
ENDDO
!Clculodamdiadosesforosnoselementos.
esfmedio=0
DOi=1,(nelemiso+ntirobrig)
esfmedio=esfmedio+mgeralesf(ocomb,i)
ENDDO
esfmedio=esfmedio/(nelemiso+ntirobrig)
!Verificaodocruzamentodasbielas
t=0
DOi=(ntirobrig+1),(nelemiso+ntirobrig1)
elem1=mcomb(ocomb,i)
IF(mgeralesf(ocomb,i)<10E5)THEN
DOj=(i+1),(nelemiso+ntirobrig)
elem2=mcomb(ocomb,j)
88
IF(mgeralesf(ocomb,j)<10E5)THEN
IF((mnos(elem1,1)==mnos(elem2,1)).or.(mnos(elem1,2)==&
mnos(elem2,1)).or.(mnos(elem1,2)==mnos(elem2,2)))GOTO20
aux(1)=C(mnos(elem2,1),1)C(mnos(elem1,1),1)
aux(2)=C(mnos(elem2,1),2)C(mnos(elem1,1),2)
aux(3)=C(mnos(elem2,1),3)C(mnos(elem1,1),3)
w=aux(1)*mvet(elem1,2)*mvet(elem2,3)
w=w+aux(2)*mvet(elem1,3)*mvet(elem2,1)
w=w+aux(3)*mvet(elem1,1)*mvet(elem2,2)
w=waux(1)*mvet(elem1,3)*mvet(elem2,2)
w=waux(2)*mvet(elem1,1)*mvet(elem2,3)
w=waux(3)*mvet(elem1,2)*mvet(elem2,1)
IF(ABS(w)<10E5)THEN
t=(C(mnos(elem1,1),2)C(mnos(elem2,1),2))*mvet(elem2,1)
t=t(C(mnos(elem1,1),1)C(mnos(elem2,1),1))*mvet(elem2,2)
t=t/(mvet(elem1,1)*mvet(elem2,2)mvet(elem2,1)*mvet(elem1,2))
IF(ABS(t)<mcomp(elem1))THEN
menerg(ocomb)=1E7
ENDIF
ENDIF
ENDIF
20ENDDO
ENDIF
ENDDO
!Verificaodetirantesdiagonais
DOi=ntirobrig+1,nelemiso+ntirobrig
elem=mcomb(ocomb,i)
cosdirz=ABS(mvet(elem,3))/mcomp(elem)
IF((cosdirz>10E5).and.(cosdirz<0.99))THEN
IF(mgeralesf(ocomb,i)>0)menerg(ocomb)=1E7
ENDIF
ENDDO
!Verificaodainclinaodasbielas
DOi=(ntirobrig+1),(nelemiso+ntirobrig1)
elem1=mcomb(ocomb,i)
IF((elem1<=(nelemtotalnelemtopo)).and.&
(mgeralesf(ocomb,i)>esfmedio/100))THEN
DOj=(i+1),(nelemiso+ntirobrig)
elem2=mcomb(ocomb,j)
IF((elem2<=(nelemtotalnelemtopo)).and.&
(mgeralesf(ocomb,j)>esfmedio/100))THEN
!Verificaoseosdoiselementostemumnemcomum.
IF((mnos(elem1,1)==mnos(elem2,1)).or.&
(mnos(elem1,2)==mnos(elem2,1)).or.&
(mnos(elem1,2)==mnos(elem2,2)))THEN
!Verificaoseosesforostemsinaisopostos.
IF((mgeralesf(ocomb,i)*mgeralesf(ocomb,j))<1E5)THEN
!Clculodonguloentrevetores.
cosalfa=mvet(elem1,1)*mvet(elem2,1)
cosalfa=cosalfa+mvet(elem1,2)*mvet(elem2,2)
cosalfa=cosalfa+mvet(elem1,3)*mvet(elem2,3)
cosalfa=ABS(cosalfa)/(mcomp(elem1)*mcomp(elem2))
IF((cosalfa>COS(3.1416*tetamin/180)).or.&
(cosalfa<COS(3.1416*tetamax/180)))menerg(ocomb)=1E7
ENDIF
ENDIF
ENDIF
ENDDO
ENDIF
ENDDO
89
!Diminuiodonmerodecombinaesaceitveis.
IF(menerg(ocomb)>9E4)nmodelok=nmodelok1
ENDSUBROUTINE
SUBROUTINErelatorio(hbloco,nest,nnoscarga,C,reacoes,mforext,menerg,nelemiso,&
ntirobrig,ncomb,mcomb,mgeralesf,nmodelok,omodelotimo)
IMPLICITNONE
!!
!Subrotinaparaaimpressodosdadosdoblocoeresutadosdaanlisenoarquivo!
!detextoRELATORIO.txt.!
!!
INTEGER::i,j,nest,nnoscarga,nelemiso,ntirobrig
INTEGER::nmodelok,omodelotimo(nmodelok),mcomb(ncomb,nelemiso+ntirobrig)
REAL::hbloco,C(20,3),reacoes(10),mforext(20,3),aux(1)
REAL::menerg(ncomb),menergaux(ncomb),mgeralesf(ncomb,nelemiso+ntirobrig)
INTEGER(KIND=8)::ncomb
!Verificaoseexistemodeloqueatendaatodasasverifiaes.
IF(MINVAL(menerg)>(9E4))THEN
PAUSE'Impssiveldemodelarcomoslimitesdeinclinaofornecidos.'
ENDIF
!Localizaodomodeloquegastamenosenergia.
menergaux=menerg
DOi=1,nmodelok
aux=MINLOC(menergaux)
omodelotimo(i)=aux(1)
menergaux(omodelotimo(i))=10E5
ENDDO
!Impressodosdadosdeentrada
OPEN(6,file='RELATORIO.txt')
WRITE(6,15)
15FORMAT('RESULTADOSBTIDOSDAELABORAOEANLISEDEMODELODEBIELAE&
TIRANTE'/'PARAUMBLOCODECOROAMENTO.',///,'DADOSDEENTRADA:',//,'ALTURADO
BLOCO:',/)
WRITE(6,16)'H=',hbloco
16FORMAT(a6,f4.2)
WRITE(6,17)
17FORMAT(//,'COORDENADASDASESTACASNOFUNDODOBLOCO:',//,2x,'N(ESTACA)',9x,&
'X',15x,'Y',/)
DOi=1,nest
WRITE(6,18)i,C(i,1),C(i,2)
ENDDO
18FORMAT(i8,f16.2,f16.2)
WRITE(6,19)
19FORMAT(//,'COORDENADASEFORASDOSNSCARREGADOSNAFACESUPERIORDOBLOCO:',&
//,6x,'N',13x,'X',15x,'Y',15x,'F',/)
DOi=1,nnoscarga
WRITE(6,20)i+nest,C(i+nest,1),C(i+nest,2),mforext(i+nest,3)
ENDDO
20FORMAT(i8,f16.2,f16.2,f16.2)
!Impressodasreaesdeapoio.
WRITE(6,25)
25FORMAT(//,'REAESDEAPOIO:',//,2x,'N(ESTACA)',9x,'F',/)
doi=1,nest
90
WRITE(6,26)i,reacoes(i)
ENDDO
26FORMAT(i8,f16.2)
!Impressodascoordenadasdosndetransfernciadecargaparafaceoposta
!dobloco.
WRITE(6,30)
30FORMAT(//,'NSDETRANSFERNCIADECARGAPARAAFACEOPOSTA:'/)
IF(ntirobrig==0)THEN
WRITE(6,*)'NOHFORASEXTERNASDETRAONOBLOCO.'
ELSE
WRITE(6,31)
31FORMAT(/,6x,'N',13x,'X',15x,'Y')
DOi=1,ntirobrig
WRITE(6,32)i+nest+nnoscarga,C(i+nest+nnoscarga,1),&
C(i+nest+nnoscarga,2)
ENDDO
32FORMAT(i8,f16.2,f16.2)
ENDIF
!Impressodonmerodecombinaesdeelementos(modelosisstticos)aserem
!anlisados.
WRITE(6,35)
35FORMAT(//,'NMERODETRELIASISOSTTICOSASEREMANLISADAS')
WRITE(6,*)nmodelok
!Impressodosesforosaxiasemcadaelemento.
WRITE(6,40)
40FORMAT(//,'ESFOROSNOSELEMENTOSDOMODELOCOMMENOSENERGIADEDEFORMAO:'&
//,2x,'ELEMENTO',5x,'ESFOROAXIAL')
DOi=1,nelemiso+ntirobrig
WRITE(6,45,advance='no')mcomb(omodelotimo(1),i)
WRITE(6,50)mgeralesf(omodelotimo(1),i)
ENDDO
45FORMAT(i7)
50FORMAT(f15.1)
REWIND(6)
CLOSE(6)
!Impressodearquivoscomotodososelementosdecadacombinaoeaenergia&
!decadaum.
OPEN(7,file='ENERGIA.txt')
OPEN(8,file='ELEMENTOS.txt')
DOi=1,ncomb
IF(menerg(i)>0)THEN
WRITE(7,*)menerg(i)
DOj=1,(ntirobrig+nelemiso1)
WRITE(8,55,advance='no')mcomb(i,j)
ENDDO
WRITE(8,55)mcomb(i,ntirobrig+nelemiso)
55FORMAT(i5)
ENDIF
ENDDO
REWIND(7)
CLOSE(7)
ENDSUBROUTINE
SUBROUTINEgraficos(C,nnostotal,ncomb,nelemiso,ntirobrig,mnos,mcomb,mgeralesf,&
menerg,omodelotim,nmodelok)
91
USEIFQWIN
USEIFLPORT
implicitnone
!!
!Rotinaparaimpressodosmodelosmaisprovveisnateladocomputador.!
!!
TYPE(XYCOORD)xy
TYPE(QWINFO)winfo
TYPE(WINDOWCONFIG)wc
RECORD/VIDEOCONFIG/video
LOGICAL::result
CHARACTER(1)::tecla
CHARACTER(8)::a8
INTEGER::i,j,teste,modelo,status,style,width
INTEGER::maxx,maxy,xe,ye,exx,exy,exz,eyx,eyy,eyz
INTEGER::nnostotal,mnos(190,2),nelemiso,ntirobrig
INTEGER::nmodelok,omodelotim(nmodelok),mcomb(ncomb,nelemiso+ntirobrig)
INTEGER(KIND=8)::ncomb
DOUBLEPRECISIONxmax,ymax,zmax,xmin,ymin,zmin,esc,xc,yc,a,b,pi,dz
INTEGER,ALLOCATABLE::xt(:),yt(:)
DOUBLEPRECISION,ALLOCATABLE::x0(:),y0(:),z0(:)
REAL::r,xm(20),ym(20),zm(20)
REAL::C(20,3),menerg(ncomb),mgeralesf(ncomb,nelemiso+ntirobrig)
ALLOCATE(x0(nnostotal),y0(nnostotal),z0(nnostotal))
ALLOCATE(xt(nnostotal),yt(nnostotal))
pi=3.1415926
!Ajustedomodogrfico.
status=SETVIDEOMODE($MAXRESMODE)
callGETVIDEOCONFIG(video)
maxx=video.NUMXPIXELS
maxy=video.NUMYPIXELS
!Expandindoealterandoonomedajanela.
!winfo.TYPE=QWIN$MAX
!status=SETWSIZEQQ(QWIN$FRAMEWINDOW,winfo)
!status=SETWSIZEQQ(0,winfo)
wc%TITLE="MODELO"C
result=SETWINDOWCONFIG(wc)
IF(.not.result)result=SETWINDOWCONFIG(wc)
!Montagemdomenudeopes.
DOi=1,7
result=DELETEMENUQQ(1,0)
ENDDO
result=INSERTMENUQQ(1,0,$MENUENABLED,'Arquivo'C,NUL)
result=INSERTMENUQQ(1,1,$MENUENABLED,'Abrir'C,NUL)
result=INSERTMENUQQ(1,2,$MENUENABLED,'Salvar'C,WINSAVE)
result=INSERTMENUQQ(1,3,$MENUENABLED,'Sair'C,WINEXIT)
result=INSERTMENUQQ(2,0,$MENUENABLED,'Editar'C,NUL)
result=INSERTMENUQQ(2,1,$MENUENABLED,'Copiar'C,WINCOPY)
result=INSERTMENUQQ(2,2,$MENUENABLED,'Colar'C,WINPASTE)
result=INSERTMENUQQ(3,0,$MENUENABLED,'TelaCheia'C,WINFULLSCREEN)
!Definiodofundodetela
status=SETBKCOLORRGB(#FFFFFF)
status=SETTEXTCOLORRGB(#000000)
status=SETCOLORRGB(#000000)
CALLCLEARSCREEN($GCLEARSCREEN)
92
!Novaorigemnocentrodafigura
DOi=1,nnostotal
xm(i)=C(i,1)
ym(i)=C(i,2)
zm(i)=C(i,3)
ENDDO
xmax=MAXVAL(xm)
ymax=MAXVAL(ym)
zmax=MAXVAL(zm)
xmin=MINVAL(xm)
ymin=MINVAL(ym)
zmin=MINVAL(zm)
xm=xm(xmax+xmin)/2
ym=ym(ymax+ymin)/2
zm=zm(zmax+zmin)/2
xc=0
yc=0
!Inicializarescala,foco,ngulosdavisadaeacessoasfontes
esc=0.5*min(maxx/(xmaxxmin),maxy/(ymaxymin))
dz=5000*(zmaxzmin)
a=3*pi/8
b=0
!Plotagem
tecla="5"
teste=1
modelo=1
DOWHILE(.true.)
CALLCLEARSCREEN($GCLEARSCREEN)
status=INITIALIZEFONTS()
status=SETFONT('t''Arial''h16w8')
CALLMOVETO(150,10,xy)
CALLOUTGTEXT('GIRO(WSAD)DESL.Y(93)DESL.X(0,)ZOOM(+)&
FOCO(71)(C)ENTRARVISTAS(XYZ)')
CALLMOVETO(150,30,xy)
CALLOUTGTEXT('(E)SFOROSNOSELEMENTOS(N)MERODOSELEMENTOS')
!Projeo
x0=xm*COS(b)+zm*SIN(b)
y0=ym*COS(a)+SIN(a)*(xm*SIN(b)zm*COS(b))
z0=ym*SIN(a)+COS(a)*(xm*SIN(b)zm*COS(b))
!Perspectiva
zmax=MAXVAL(z0);zmin=MINVAL(z0)
x0=x0*(dz+zmaxz0)/(dz+zmaxzmin)
y0=y0*(dz+zmaxz0)/(dz+zmaxzmin)
!Translao
x0=x0xc
y0=y0yc
!Coordenadasnatela
xt=INT(maxx/2+x0*esc);yt=INT(maxy/2y0*esc)
!Plotarns
DOi=1,nnostotal
IF(xt(i)>0.and.xt(i)<maxx.and.yt(i)<maxy.and.yt(i)>0)THEN
status=ELLIPSE($GBORDER,xt(i)2,yt(i)2,xt(i)+2,yt(i)+2)
ENDIF
ENDDO
IF(teste==0)THEN
!Esforosaxiaisnoselementos.
DOi=1,(nelemiso+ntirobrig)
93
j=mcomb(omodelotim(modelo),i)
r=mgeralesf(omodelotim(modelo),i)
xe=INT((xt(mnos(j,1))+xt(mnos(j,2)))/2)
ye=INT((yt(mnos(j,1))+yt(mnos(j,2)))/2)
CALLMOVETO(xe,ye,xy)
CALLreal_to_character(r,a8)
CALLOUTGTEXT(a8)
ENDDO
ELSEIF(teste==1)THEN
!Numerarelementos.
DOi=1,nelemiso+ntirobrig
j=mcomb(omodelotim(modelo),i)
xe=INT((xt(mnos(j,1))+xt(mnos(j,2)))/2)
ye=INT((yt(mnos(j,1))+yt(mnos(j,2)))/2)
CALLMOVETO(xe,ye,xy)
CALLinteger_to_character(j,a8)
CALLOUTGTEXT(a8)
ENDDO
ENDIF
!Plotarelementos
DOi=1,(nelemiso+ntirobrig)
j=mcomb(omodelotim(modelo),i)
CALLMOVETO(xt(mnos(j,1)),yt(mnos(j,1)),xy)
IF(mgeralesf(omodelotim(modelo),i)>0)THEN
status=SETCOLORRGB(#FF0000)
style=Z'FFFF'
width=2
ELSE
status=SETCOLORRGB(#0000FF)
style=Z'EEEE'
width=1
ENDIF
CALLSETLINESTYLE(style)
CALLSETLINEWIDTHQQ(width)
status=lineto(xt(mnos(j,2)),yt(mnos(j,2)))
ENDDO
status=SETTEXTCOLORRGB(#000000)
status=SETCOLORRGB(#000000)
style=Z'FFFF'
CALLSETLINESTYLE(style)
!Numerarns
DOi=1,nnostotal
CALLMOVETO(xt(i)+3,yt(i),xy)
CALLinteger_to_character(i,a8)
CALLOUTGTEXT(a8)
ENDDO
!Eixos
exx=INT(6045*COS(b));eyx=INT(50+45*SIN(a)*SIN(b))
exy=60;eyy=INT(50+45*COS(a))
exz=INT(60+45*SIN(b));eyz=INT(50+45*SIN(a)*COS(b))
CALLMOVETO(50,60,xy);status=LINETO(exx,eyx)
CALLOUTGTEXT('X')
CALLMOVETO(50,60,xy);status=LINETO(exy,eyy)
CALLOUTGTEXT('Y')
CALLMOVETO(50,60,xy);status=LINETO(exz,eyz)
CALLOUTGTEXT('Z')
!Dadosdomodelo
CALLMOVETO(60,maxy80,xy)
CALLOUTGTEXT('ORDEMDOMODELO:')
CALLinteger_to_character(modelo,a8)
CALLOUTGTEXT(a8)
94
CALLMOVETO(60,maxy60,xy)
CALLOUTGTEXT('ENERGIADEDESLOCAMENTODOMODELO:')
CALLreal_to_character(menerg(omodelotim(modelo)),a8)
CALLOUTGTEXT(a8)
!Tecladeopo
tecla=GETCHARQQ()
SELECTCASE(tecla)
CASE('c','C');dz=2*(zmaxzmin);a=3*pi/8;b=0;xc=0;yc=0
CASE('+');esc=esc*1.12;esc=esc*1.12
CASE('');esc=esc/1.125;esc=esc/1.125
CASE('9');yc=ycmaxy/40/esc
CASE('3');yc=yc+maxy/40/esc
CASE(',');xc=xcmaxx/40/esc
CASE('0');xc=xc+maxx/40/esc
CASE('Y','y');a=PI/2;b=pi/2
CASE('X','x');a=0;b=pi/2
CASE('Z','z');a=0;b=0
CASE('W','w');a=api/60
CASE('S','s');a=a+pi/60
CASE('A','a');b=bpi/60
CASE('D','d');b=b+pi/60
!CASE('7');dz=dz/1.2
!CASE('1');dz=dz*1.2
CASE('E','e');teste=0
CASE('N','n');teste=1
CASE('p','P');modelo=modelo+1
CASE('o','O');modelo=modelo1
ENDSELECT
IF(modelo==nmodelok+1)modelo=1
ENDDO
ENDSUBROUTINE
95