Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CAJAMARCA
Facultad de Ingeniera Civil
TESIS
Para Obtener Titulo de Ingeniero Civil
Anlisis Estructural por el Mtodo de Elementos Finitos Asistido por Computadora
(Vigas-Prticos,Placas,Slidos de Revolucin.)
SECCIN PRELIMINAR.
DEDICATORIA:
Dedico esta tesis a mis padres ya que a ellos les debo la vida y
mis estudios y lo que puedo ser ms adelante.
AGRADECIMIENTOS:
* A mis profesores que con su esfuerzo y buen nimo me aconsejaron y me ensearon en todos estos aos.
RESUMEN
La presente tesis trata en forma objetiva del anlisis de estructuras con el mtodo de elementos finitos, lo cual se empezar primero con el aprendizaje del mtodo y despus con la aplicacin
a diferentes sistemas tanto sencillos como complejos,para lo cual
se desarrollar un software en python en el sistema windows para
ejemplos tericos y simples, el objetivo principal de la tesis es demostrar que los resultados obtenidos por el mtodo de elementos
finitos en este caso representado con el script programado llamado FEMAX son los ms cercanos posibles a los resultados aceptados por la comunidad de ingeniera,ya que estos fueron comparados con el software aceptados en forma estandard como el
SAP 2000 V14,en el mbito comparativo se vio que los resultados
obtenidos con el script programado en este caso por objetivos de
la tesis FEMAX fueron satisfactorios obteniendo un error hasta de
0.01 % por lo que se da como resultados aceptables y que se ha
llegado a un caso satisfactorio de la presente tesis.
ndice general
1. Problema de Investigacin.
15
1.1. Ubicacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.2. Poblacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
15
15
16
16
1.3.4. Justificacin. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
1.3.5. Alcances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.3.6. Hiptesis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.3.7. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.3.8. Limitaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
20
20
20
1.5.3. Objetivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
23
2.1. Deformaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
2.2. Tensiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
26
3. ANLISIS DE VIGAS.
28
28
34
34
36
40
42
. . . .
44
46
51
51
53
54
63
4.1. Introduccin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
65
65
66
67
67
71
72
. . . . . . . . . .
76
78
79
82
85
93
114
. . . . . . . . . . . . . . . . . . . 115
. . . . . . . . . . . 122
6. Metodologa de Estudio.
124
127
139
180
183
211
ndice de figuras
2.1. Anlisis de un sistema continuo. . . . . . . . . . . . . . . . . . . . . .
24
25
29
31
32
35
37
37
43
44
49
51
3.11.Smbolo de Numpy . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
64
66
. .
71
73
75
77
79
82
83
83
4.11.Mapeo del espacio natural al espacio real para un elemento lineal unidimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
87
90
90
94
95
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
96
97
99
. . . . . . . . . . . . . . . . 105
10
. . . . . . . . . . . . . . . . . . . . . 128
. . . . . . . . . . . . . . . . . 130
. . . . . . . . . . . . . . . . 136
11
12
ndice de cuadros
3.1. Valores por cada caso de discretizacin de la Barra. . . . . . . . . . .
36
86
4.2. Relacin de los nodos del elemento bilineal y sus coordenadas naturales. 91
4.3. Ordenamiento de elementos en dos dimensiones. . . . . . . . . . . .
98
. . . . . . 129
13
. . 136
14
Captulo 1
Problema de Investigacin.
1.1.
Ubicacin.
La investigacin por tener carcter terico no se menciona el lugar de la investigacin,pero por motivos de formalismos,se propondr el sitio de estudios a la Universidad Nacional de Cajamarca.
1.2.
Poblacin.
1.3.
1.3.1.
15
1.3.2.
1.3.3.
Las limitaciones de la mente humana son tales que no pueden captar el comportamiento que el complejo mundo que lo rodea en una sola operacin global.Por
ello,una forma natural de proceder de ingenieros consiste en separar los sistemas en
sus componentes individuales,o Elementos,cuyo comportamiento pueden conocerse sin dificultad,y a continuacin reconstruir el sistema original para estudiarlo a partir
de dichos componentes.
En muchos casos se obtiene un modelo adecuado usando un numero finito de componentes bien definidos.A tales problemas los denominaremos discretos. En otros,las
subdivisin prosigue indefinidamente y el problema solo puede definirse haciendo uso
de la ficcin matemtica infinitesimal.
Ello nos conduce a ecuaciones diferenciales o expresiones equivalentes con un numero infinito de elementos implicados. a tales sistemas los llamaremos continuos.
Su campo de aplicacin de este mtodo es muy amplio,y en consecuencia es una
herramienta importante en las nuevas formulas de analizar y simular fenmenos estructurales,as como tambin en el campo de la hidrulica y la geotcnia. [1, pag.4]
1
1.3.4.
Justificacin.
A.Computadora
16
1.3.5.
Alcances.
Al ser una tesis de carcter terico a lo que queremos llegar es primero, al conocimiento formal del mtodo,as como demostrar la fiabilidad del mtodo programado en
la computadora y tratar de demostrar de por que los programas comerciales trabajan
con el mtodo de elementos finitos.
1.3.6.
Hiptesis.
1.3.7.
Variables.
1.3.8.
Limitaciones.
17
el programa femax tiene como problema el sistema de instalacin ya que su ejecucin cuenta con libreras especiales la cual complica el sistema de instalado
o de generacin de un archivo.exe.
1.4.
142
,en
45
ticas uso un polgono regular inscrito en una circunferencia para poder aproximar la
cual hallo un valor de 3.1416 (3927/1250);es interesante notar que el uso un polgono
de 3072 lados,es decir elementos finitos. De acuerdo con el manuscrito Ahmes, se
muestra que para 1500 A.C. , los Egipcios usaban como valor de = 3,1416. Un
papiro de tiempos mas tempranos, ahora en Mosc, indica que los egipcios usaron
la frmula para el volumen de una pirmide y el rea de un crculo de manera aproximada en 1800 A. C.. Arqumedes uso el concepto de elementos finitos para calcular
volmenes.
En el contexto estructural, las soluciones tanto en elasticidad como en anlisis es-
18
tructural tuvieron un inicio del Mtodo del Elemento Finito con Timoshenko, pero si
se considera que el anlisis de marcos establece el inicio del mtodo del Elemento
Finito, entonces los pioneros fueron Castigliano, Mhor y Maxwell, entre otros, en el
periodo 1850-1875.
19
aplicaciones que incluyen diversos efectos fsicos y vibraciones en el Anlisis dinmico, pandeo y post-pandeo, no linealidades en la geometra y en el material,
efectos trmicos, interaccin entre fluidos y estructuras, aero elasticidad, interaccin
acstica-estructura, teora de la fractura, estructuras laminadas, propagacin de oleaje, dinmica estructural, respuesta dinmica aleatoria, y muchas ms aplicaciones.
Como una consecuencia de tantos campos de estudio, el uso de los programas de
computadora orientados a cada caso, se han convertido en una prctica en los sitios
involucrados en el anlisis estructural. [1, pag.5]
1.5.
Existen gran nmero de estructuras que su paso de revisin tanto como post y
pre proceso de diseo,son sometidos a rigurosos procesos de evaluacin tales como
para verificacin de cortantes y flectores y saber si el diseo dado esta correcto.
1.5.1.
En programas como el sap el staad pro tanto en el anlisis de Int-estructuraestructura y anlisis de suelo-estructura como el safe o el plaxis que son de uso para
el clculo por elementos finitos.
1.5.2.
El mtodo de elementos finitos tambin puede ser usado en el anlisis de mecnica de fluidos libreras en python como ECOASTER o el Fenics o programas como
Abaqus,Nastram nos pueden dar una idea de como este elemento fsico se mueve
e interacciona con el mundo aplicando soluciones particulares a la formulacin de
de la ecuacin general de los fluidos Navier y Stokes,idealizaciones de presas as
como simulaciones de comportamiento de las turbulencias de los fluidos en turbinas
hidrulicas.
20
1.5.3.
Objetivos.
Objetivos Generales.
Anlisis Estructural por el mtodo de elementos finitos asistido por computadora(VigasPrticos,Placas,Slidos de Revolucin).
Objetivos Especficos.
Crear un pequeo software en lenguaje de programacin python,as como la
comprobacin de los resultados obtenidos con programas comerciales en este
caso el sap 2000 v14.
21
MARCO TERICO
22
Captulo 2
MTODO DE ELEMENTOS FINITOS
Las recetas para deducir las caractersticas de un elemento finito de un continuo,
sern presentadas bajo una forma matemtica ms detallada. Es conveniente obtener los resultados de una forma general aplicable a cualquier situacin, pero para
evitar la introduccin de conceptos ms complicados se ilustraran las expresiones
generales con un ejemplo. [2, Pag.21]
a1
X
a2
u = N a
Ni xai = [N1 , N2 . . . Nn ]
..
.
i
(2.1)
Un elemento tpico e, se define por sus nodosi, j, m etc y por su contorno formado por lneas rectas. Aproximemos los desplazamientos u de cualquier punto del
elemento mediante un vector u, como en la formula anterior. [2, Pag.22]
En el caso particular de tensin plana.
u(x, y)
u=
v(x, y)
(2.2)
u
i
ai =
v
i
23
(2.3)
2.1.
Deformaciones.
Una vez conocidos los desplazamientos para todos los puntos del elemento,pueden
determinarse las deformaciones en cualquier punto.stas darn siempre resultado en
relacin que podr escribirse como sigue en forma matricial.
= Su
(2.4)
= Ba
(2.5)
B = SN
(2.6)
Donde S es un operador lineal apropiado en los casos de la tensin plana las deformaciones se expresan en funcin de los desplazamientos mediante las conocidas
1
ca,Problemas Lineales).
24
x
x
=
= 0
y
(2.7)
2.2.
Tensiones.
Conociendo el contorno del material o elemento puede estar sujeto a deformaciones iniciales,tales como las debidas a cambios de temperatura etc.Debern diferenciarse entre Esfuerzos iniciales y Esfuerzos 0 que muy bien podran medirse,pero
25
cuya prediccin seria imposible sin un conocimiento completo de la historia del material.estas tensiones pueden sencillamente aadirse a las ecuaciones generales asumiendo un comportamiento elstico lineal. [3, Pag 27]
x
y
xy
2.3.
Ev y
1
= Ev
Ev x
E y
0
G xy
1
E x
i = D( 0 ) + 0
x
i =
y
xy
Ev 0
x
1
y
0
E
xy
0 G
(2.8)
(2.9)
(2.10)
q1
qe
2
qi =
...
qe
bi =
be
(2.11)
(2.12)
26
Z Z Z
Z
(i )dV +
Z Z Z
e T
(ub)dV =
((u)Xi )
(2.13)
(2.14)
K i ai + f i = q i
Z
Ki = (B T DB)dV
VZ
fi = (N T b)dV
(2.15)
([a ] B DBa)dV ) +
V
[2]
27
(2.16)
(2.17)
Captulo 3
ANLISIS DE VIGAS.
El anlisis de vigas para el estudio de elementos finitos,se hace para entender
en forma elemental las diferentes tipos de discretizaciones a elementos de simples a
complejos,ya que para poder entender los anlisis y clculo de placas y slidos de
revolucin es necesario entender los diferentes items del estudio de vigas tanto sometidas a fuerzas axiales como a flexiones que pueden ser tratadas por teoras muy
conocidas como Bernully y Timoshenko sobre todo entendimiento de condiciones de
contorno para pasar a estadios mas complejos. [2, Pag.22]
3.1.
1
Una vez deducida las ecuaciones principales tanto de Tensin como de defor-
i = E = E
du
dx
(3.1)
finitos,MGGraw-Hill,(1998)
28
Z Z Z
Z
()dV =
p
X
(ub)dx +
(ui Xi )
EA
0
du
=
dx
(3.2)
i=1
p
ubdx +
0
ui Xi
(3.3)
i=1
ui = N1 a1 + N2 a2
(3.4)
(3.5)
u 1 = a0 + a1 x 1
(3.6)
u 2 = a0 + a1 x 2
(3.7)
29
u1 u2
x1 x2
x2 u 1 x1 u 2
a1 =
x2 x1
a0 =
(3.8)
(3.9)
Para una mejor trabajabilidad de los dos casos hay que tomar en cuenta las secciones
anteriores donde tendramos Ni ...Nm los cuales son las funciones de forma entonces
sabiendo que x2 x1 = le ,se tendra que: [3, pag.28]
x2
x1
dN1
dN2
(
u1 )AE(
u2 )
dx
dx
x2
[N1 u1 + N2 u2 ] = u1 X1 + u2 X2
(3.10)
x1
x2
dN1
dN1
(
(EA)
u1 +
dx
dx
x1
Z x2
dN2
dN2
(EA)
u1 +
(
dx
dx
x1
Z x2
dN1
dN2
(EA)
u2 )dx
N1 bdx X1 = 0
dx
dx
x1
Z x2
dN2
dN1
(EA)
u2 )dx
N1 bdx X2 = 0
dx
dx
x1
(3.11)
(3.12)
x2
x1
1
1
2
1
( dN
(EA) dN
) ( dN
(EA) dN
)
dx
dx
dx
dx
dx
dN2
dN2
dN2
dN1
u
( dx (EA) dx ) ( dx (EA) dx )
2
N
Z x2
1
x1
N
2
bdx =
(3.13)
X
2
con la cual obtenemos que para este caso de vigas sometidas a tension tendramos
las siguientes formulas:
x2
Ki =
x1
1
1
1
2
( dN
(EA) dN
) ( dN
(EA) dN
)
dx
dx
dx
dx
2
2
2
1
( dN
(EA) dN
) ( dN
(EA) dN
)
dx
dx
dx
dx
k i ai + f i = q i
(3.14)
Z x2
(BiT DBi)dx
dx =
x1
(3.15)
fi =
Z x2
1
x1
bdx
(3.16)
En elementos finitos se hablan de coordenadas naturales,pues se analizan en espacio natural la mayora de sus geometras,llevando esta solucin ah espacio natural.
[3, Pag.34]
30
Ni =
( 1 )( 2 ) . . . ( n )
(i 1 )(i 2 ) . . . (i n )
n
Y
j
)
Ni =
(
i
j
i=1
(3.17)
(3.18)
1
)
2
1+
N2 = (
)
2
N1 = (
(3.19)
(3.20)
Con esto ya tendramos la posibilidad de calcular tanto el Ki y fi de la cual obtendramos los parmetros ya dados en la parte anterior.
x2 x1 = le
2(x x1 )
s =
1
(x2 x1 )
d
2
=
dx
le
31
(3.21)
(3.22)
(3.23)
N1 2 N2 2
,
]
le
le
(3.24)
N1 2 N2 2 le
,
])( )d
(AE)[
le
le 2
(3.25)
Bi = [
(
KI =
1
N1
N2
2
le
2
le
KI =
AE 1 1
L
1 1
ble 1
fe =
2 1
(3.26)
(3.27)
32
( 2 )( 3 )
( 1)
=
(1 2 )(1 3 )
2
( 1 )( 3 )
( + 1)
L(2,2) =
=
(2 1 )(2 3 )
2
( 1 )( 2 )
= (1 2 )
L(2,3) =
(3 1 )(3 2 )
L(2,1) =
(3.28)
(3.29)
(3.30)
Ahora resolviendo el caso de i para el caso de solucin del caso general de los tres
nodos:
x = N1 x1 + N2 x2 + N3 x3
dN1
dN2
dN3
dx
=
x1 +
x2 +
x3
d
d
d
d
dx
2 1
2 + 1
=
x1 +
x2 2x3
d
2
2
d
2
=
dx
2(x1 + x2 2x3 ) + le
d
2
=
dx
le
(3.31)
(3.32)
(3.33)
(3.34)
(3.35)
Usando las Ecuaciones EC(2.16) y EC(2.17) de Matriz de Rigidez para poder solucionar la aproximacin en el caso de tres nodos la cual quedara de la siguiente
manera:
( 1 ) 2
Z 1
2 le
(
(2) l2e
1
( + 1 )( 2 )
2 le
2
1 2
le
1 2
AE{( ) , (2) , ( + )( )}( ))d
2 le
le
2 le
2
(3.36)
33
lineal donde A,E ,son constantes Resolviendo el sistema anterior. [3, Pag.45]
14 16 2
EA
Ke = (
) 16 32 16
6
2 16 14
(3.37)
(1)
fi =
1 2
1
(+1)
2
l
e
b d
2
1
l
e
fi = 4 b
6
1
3.2.
(3.38)
(3.39)
3.2.1.
34
dw
dx
d2 w
= y = y 2
dx
d2 w
= Ey 2
dx
d2 w
dFi = (Ey 2 )dA
dx
2
dw
dMi = (E 2 )y 2 dA
dx
d2 w
Mi = EI 2
dx
=
35
(3.40)
(3.41)
(3.42)
(3.43)
(3.44)
(3.45)
3.2.2.
dw
,coincide
dx
w = 0 + 1 + 2 2 + 3 3
(3.46)
w = 1 + 22 + 33 2
(3.47)
dw
dw
w = N1 w1 + N 1 ( )1 + N2 w2 + N 2 ( )2
dx
dx
(3.48)
Analizaremos para cada caso las Condiciones frontera con la cual sacamos el siguiente cuadro comparativo :
H1
H 1
H2
H 2
H3
H 3
H4
H 4
36
37
1 1
0 1 2
1 1
1
0 1
2
1 1 1
0 1 2
1 1
1
0 1
2
1 1 1
0 1 2
1 1
1
0 1
2
1 1 1
0 1 2
1 1
1
0 1
2
3
1
1
2
0
3
3
1
0
3
1
1
2
0
3
3
1
0
3
1
1
1
2
0
3
3
1
0
0
0
1
0
2
3
3
1
1
38
(3.49)
(3.50)
(3.51)
(3.52)
Hi = 0 + 1 + 2 2 + 3 3
con la cual tendramos los coeficientes para cada caso de las condiciones de Contorno.
39
(3.53)
(3.54)
1
2
3
4
1
4
14
1
4
1
4
(3.55)
(3.56)
Con esto obtendramos las funciones de forma para el caso de flexin de Viga Bernoulli.
1
N1 = (2 3 + 3 )
4
1
N1 = (1 2 + 3 )
4
1
N2 = (2 + 3 3 )
4
1
N2 = (1 + 2 + 3 )
4
3.2.3.
(3.57)
(3.58)
(3.59)
(3.60)
R
V
BiT DBi dv
con la cual veremos las particularidades flectores y complementaramos con el sistema Axial de fuerzas para completar la matriz de rigidez de una viga.
Para ello haremos uso de la discretizacin de dos nodos para los ejes x en la cual
40
x=
1
1+
x1 +
x2
2
2
(3.61)
dx
le
=
d
2
(3.62)
Ki =
1
4
le2
dN1
d
dN1
d
dN2
d
dN2
d
EI{
(3.63)
12
6le 12 6le
2
2
6l
4l
6l
2l
EI
e
e
e
e
Ki = 2
le
12 6le 12 6le
6le
2le2 6le 4le2
(3.64)
Como se pueden ver es la matriz de rigidez aprendida en el curso de Anlisis Estructural ;estaramos estableciendo ya en este momento la matriz de K(6x6) para lo cual
nos agenciaramos de la Ec(3.26)y tambin la ecuacin EC(3.64).[3, Pag.107]
41
AE
le
AE
le
0
6 EI
12 EI
le3
le2
0
6 EI
4 EI
le2
le
KT =
AE
l
0
0
e
0
12 EI
6 EI
le3
le2
2 EI
0
6 EI
l2
le
e
12 EI
l3
e
6 EI
l2
6 EI
l2
2 EI
le
AE
le
12 EI
l3
6 EI
l2
6 EI
l2
4 EI
le
(3.65)
Para hallar las fuerzas en las vigas en forma general usaremos la ecuacin general
de Ki ai + f e = q la cual f e es igual a
R
v
3.2.4.
N1
N
1
N
2
qdx =
ql2
ql12
ql2
ql2
12
V1
V2
M
2
(3.66)
La teora de vigas de Timoshenko comparte hiptesis de la teora clsica.Por contrapartida,la nueva hiptesis establece que Las secciones planas normales al eje
de viga antes de la deformacin,permanecen planas pero no necesariamente
normales al eje despus de la deformacin.
Esta hiptesis representa una mayor aproximacin a la deformacin real de la seccin
42
transversal en vigas de gran canto.A medida que la relacin longitud/canto disminuye,las secciones transversales dejan de conservarse planas despus de la deformacin. [3, Pag.119]
dw
dx
du
d
x =
= z
dx
dx
dw du
dw
=
+
=
=
dx
dz
dx
=+
xz
(3.67)
(3.68)
(3.69)
Por consiguiente la teora de Timoshenko equivale a considerar el efecto de la deformacin por cortante transversal,coincidiendo la magnitud de dicha deformacin
adicional de la norma los dos esfuerzos tanto de x y xz se relacionan con las
correspondientes deformaciones por: [3, Pag.121]
d
dx
dw
d
xz = G(
)Mi = EI
dx
dx
dw
Qi = GA(
) = GAxz
dx
x = Ex = zE
43
(3.70)
(3.71)
(3.72)
Z Z Z
Z
(x + xz xz )dV =
qdx +
l
n
X
i=1
X
dw
( )i Mi +
wi Zi
dx
i=1
(3.73)
Z
[(
l
3.2.5.
d
d
dw
dw
)EI( ) + (
)GA ( )]dx
dx
dx
dx
dx
(3.74)
44
(3.75)
() = N1 ()1 + N2 ()2
(3.76)
d
N1 ()
N2 () d
=(
1 +
2 )
dx
dx
dw
d
N1 ()
N2 ()
d
=
=
=(
w1 +
w2 ) N1 1 N2 2
dx
dx
dx
=
xy
(3.77)
(3.78)
2
le
= Bf a
(3.79)
xz = Bc a
(3.80)
2 N1
2 N2
, 0,
]
le
le
2 N1
2 N2
Bc = [
, N1 ,
, N2 ]
le
le
ai = [w1 , 1 , w2 , 2 ]
Bf = [0,
(3.81)
(3.82)
(3.83)
1
1
Bf = [0, , 0, ]
le
le
1 1 1 1
Bc = [ ,
, ,
]
le
2 le
2
(3.84)
(3.85)
[a ]
le
[BfT (EI)Bf
e T
= [a ]
le
45
(3.87)
=
BfT (EI)Bf dx
Z le
Kce =
BcT (GA )Bc dx
Kfe
(3.88)
(3.89)
le
f =
N qdx
(3.90)
N = [N1 , 0, N2 , 0]
(3.91)
le
le
d ,las
2
ecuaciones Ec(3.88,3.89,3.90)
le
BfT (EI)Bf d
2
1
Z 1
le
Kg =
BgT (EI)Bg d
2
1
Z 1
T le
fe =
N
d
2
1
Kf =
3.2.6.
(3.92)
(3.93)
(3.94)
Como en las anteriores ecuaciones se deduce que solo debe existir un solo punto
de integracin,ya que todos los trminos del integrando de Kf exige un solo punto
de integracin,ya que todos los trminos del integrando son contantes as pues tras
46
0 0
0 1
EI
Kf = ( )
le
0 0
0 1
0 1
0 0
0 1
(3.95)
Por otra parte la integracin exacta de la matriz de rigidez de cortante precisa dos
puntos de integracin por parecer en el integrando Kc trminos de segundo grado
,obtenindose:
le
2
le
2
le
le2
2
l2e l2e
3
GA
Kc = (
)
l
1 l2e 1 l2e
2
le
le
l2e l3e
2
2
(3.96)
Ahora sumamos las matrices y obtendremos una matriz general para lo cual la matriz quedar de la siguiente manera y hallando a la vez un sistema de voladizo y
resolviendo con el sistema de V.Timoshenko. [3, Pag ]
GA
l
GA
2
GAl
GA
2
( GA
l + EI
) GA
3
l
2
GA
GA
l
GA
2
l
GA
( GA
l EI
) GA
2
3
l
2
GA
EI
( 3 l l )
GA
GA
EI
( 3 l+ l )
GA
2
47
w1
w2
V1
(3.97)
GA
l
GA
2
GA
EI
2
( 3 l+ l )
GA
2
(3.98)
+1
2
donde =
12EI
GA l2
( GA
l
3
l2
EI
EI
)
l
l2
EI
l
EI
(3.99)
w2 =
l3
l
l3
0
=
(
+
)P
w
P
2
+ 1 GA 3EI
3EI
(3.100)
Analizando el cociente entre la solucin sin cortante y la solucin con cortante, quedara de la siguiente manera:
w2
3(42 + 3)
0 =
42 (2 + 3)
w2
(3.101)
48
1 1 1
1
, , , ]
le 2 le 2
(3.102)
1 1 1
1 le
GA [ , , , ]) d
le 2 le 2 2
(3.103)
Bc = [
Z 1
(
1
1
le
1
2
1
le
1
2
49
le
2
GA
Kc = (
)
l
le
2
le
2
le2
4
l2e
le
2
le2
4
le
2
le
2
le2
4
l2e
le2
4
(3.104)
K=
GA
l
GAl
GAl
( GA
l + EI
)
4
l
3
l2
( 1 + l ) 2EI
GA 4EI
F =
l2
l
2EI
( EI
(3.105)
(3.106)
La relacin entre este valor y el exacto para las vigas esbeltas es:
w2
32 + 3
=
(w2)eexacta
42
(3.107)
es igual a 0.75.
Pero analizando la anterior solucin vemos que existe un bloqueo ya que al acercarse
a 0 esto tiende al infinito.
50
3.3.
Deberamos empezar esta seccin con la pregunta del rigor por que en python?,
conociendo otro paquetes de programacin como el Visual Basic,Mathcad,Matlab y
otros, es que si tomamos en cuentas todos los lenguajes anteriores son privativos es
decir si no compras las licencias correspondientes tu script o pequeo programa no
sirve y como funcionan como pre compilacin pues las licencias y todo eso se vuelven prcticamente insostenibles se esta optando por una programacin de software
libres pues esto va acompaado a la lgica y a la moralidad de compartir pues en lo
personal me parece maligno y egosta guardar el conocimiento pues es un derecho
universal de la educacin mundial en ese sentido quiero empezar este bloque diciendo que el mundo necesita una lgica y argumentos diferentes para subsistir sobre
todo en pases con subdesarrollo como el nuestro la cual merece una oportunidad de
cambio no solo moral si no tambin tecnolgico.
3.3.1.
Que es Python?.
Un lenguaje interpretado o de script es aquel que se ejecuta utilizando un programa intermedio llamado intrprete, en lugar de compilar el cdigo a lenguaje mquina que pueda comprender y ejecutar directamente una computadora
(lenguajes compilados).
La ventaja de los lenguajes compilados es que su ejecucin es ms rpida. Sin
51
Tipado Dinmico.
La caracterstica de tipado dinmico se refiere a que no es necesario declarar
el tipo de dato que va a contener una determinada variable, sino que su tipo se
determinar en tiempo de ejecucin segn el tipo del valor al que se asigne, y
el tipo de esta variable puede cambiar si se le asigna un valor de otro tipo.
Fuertemente Tipado.
No se permite tratar a una variable como si fuera de un tipo distinto al que tiene,
es necesario convertir de forma explcita dicha variable al nuevo tipo previamente. Por ejemplo, si tenemos una variable que contiene un texto (variable de tipo
cadena o string) no podremos tratarla como un nmero . En otros lenguajes el
tipo de la variable cambiara para adaptarse al comportamiento esperado, aunque esto es ms propenso a errores.
Multiplataforma.
El intrprete de Python est disponible en multitud de plataformas (UNIX, Solaris, Linux, DOS, Windows, OS/2, Mac OS, etc.) por lo que si no utilizamos
libreras especficas de cada plataforma nuestro programa podr correr en todos estos sistemas sin grandes cambios.
52
Orientado a Objetos.
La orientacin a objetos es un paradigma de programacin en el que los conceptos del mundo real relevantes para nuestro problema se trasladan a clases y
objetos en nuestro programa. La ejecucin del programa consiste en una serie
de interacciones entre los objetos.
Python tambin permite la programacin imperativa, programacin funcional y
programacin orientada a aspectos.
3.3.2.
Python dispone de una amplia coleccin de libreras, que simplifican nuestra tarea
a la hora de escribir cdigo. El objetivo de este tema es ensear cmo funcionan
algunas de las libreras, para que los usuarios noveles de este lenguaje tengan una
base para utilizar la mayora de las libreras disponibles, que son muchas, adems
de proporcionar unos consejos que, evitarn ms de un dolor de cabeza o fallos
inesperados a la hora de ejecutar un cdigo.
Numpy
53
Scipy
Depende directamente de numpy es una librera de calculo numrico sirve para
establecer todo tipo de calculo numrico y potencialmente grande para establecer datos de todo tipo matemtico.
Matplotlib
matplotlib es una de las biblioteca de trazado 2D que produce figuras de calidad
de publicacin,en una variedad de formatos impresos y entornos interactivos,a
travs de plataformas. Matplotlib se puede utilizar en scripts para python, la pitn y la ipython shell, servidores de aplicaciones web.
Matplotlib trata de hacer las cosas fciles . Puede generar grficos, histogramas, espectro de potencia, grficos de barras, errorcharts, diagramas de dispersin, etc, con slo unas pocas lneas de cdigo. [5]
3.3.3.
Con lo dicho anteriormente vamos ah establecer la primera parte del cdigo fuente
del sistema y hacer unos pequeos ejemplos de aplicacin de vigas continuas y esto
compararlo con programas como el sap.
54
55
E=[]
I=[]
for i in range ( len ( Pt )) :
E = E + [ Pt [ i ] [ 0 ] ]
# ELEMENTOS DE INERCIA DE LOS ELEMENTOS
for i in range ( len ( Pt )) :
I = I + [ Pt [ i ] [ 1 ] * ( Pt [ i ] [ 2 ] * * 3 ) / 12 . 0 ]
# MATRICES DE RIGIDEZ DE LOS ELEMENTOS
K=[]
for i in range ( len ( Pt )) :
s = Matrix ( E [ i ] ,I [ i ] ,L [ i ] )
K = K + [ s . Constructor () ]
# ACOPLAMIENTO DE LA MATRIZ GLOBAL
R1 = range ( n )
R2 = range (1 , n + 1 )
U1 = ()
for i in range ( len ( R1 )) :
for j in range ( len ( R2 )) :
if i = = j :
U1 = U1 + ( R1 [ i ] , R2 [ j ] )
U2 = np . array ( [ U1 [ i ] + 1 for i in range ( len ( U1 )) ] )
s = len ( U1 ) / 2
U3 = np . reshape ( U2 ,( s , 2 ))
U4 = U3 * 2
O=[]
WQ = array ( [ range ( U4 [ i ] [ 0 ] -2 , U4 [ i ] [ 0 ] ) for i in range ( len ( U4 )) ] )
WR = array ( [ range ( U4 [ i ] [ 1 ] -2 , U4 [ i ] [ 1 ] ) for i in range ( len ( U4 )) ] )
56
57
FI = array ( F )
# MATRIZ DE FUERZAS DE LOS ELEMENTOS
# ------ ------- ------- ------ ------- ------- ------ ------- -----FR = [ ]
for i in range (1 , len ( FI ) -1 , 2 ) :
for j in range (2 , len ( FI ) -1 , 2 ) :
if i ! = 0 :
if j ! = 0 :
if i ! = len ( FI ) - 1 :
if j ! = len ( FI ) - 1 :
if j - i = = 1 :
QW = [ array ( FI [ i ] ) + array ( FI [ j ] ) ]
FR = FR + QW
FU = array ( [ array ( FI [ 0 ] ) ] + FR + [ array ( FI [ len ( FI ) - 1 ] ) ] )
58
. reshape ( 2 * nodos , 1 )
# ----- ------ ----- ------ ------ ----- ------ ------ ----- ------ ----# CALCULO DE LA MATRIZ DE RIGIDEZ CORREGIDA .
GDL0 = [ ]
for i in range ( len ( N )) :
if N [ i ] = = 0 :
GDL0 = GDL0 + [ i ]
GDT = array ( GDL0 )
KM1 = delete ( KT , GDT , axis = 0 )
KM2 = delete ( KM1 , GDT , axis = 1 )
FGDL = [ ]
for i in range ( len ( N )) :
if N [ i ] ! = 0 :
FGDL = FGDL + [ FU [ i ] ]
FGDL1 = array ( FGDL ). reshape ( len ( KM2 ) , 1 )
59
if N [ i ] = = 1 :
AMY = AMY + [ [ i ] ]
AMY1 = array ( AMY )
for i in range ( len ( AMY1 )) :
N [ AMY [ i ] ] = Desp [ i ]
N2 = N . reshape ( len ( N ) /2 , 2 )
POR = [ ]
for i in range ( len ( N2 )) :
for j in range ( len ( N2 )) :
if j - i = = 1 :
POR = POR + [ ( [ N2 [ i ] ] + [ N2 [ j ] ] ) ]
POW = np . array ( POR )
# ----- ------ ----- ------ ------ ----- ------ ------ ----- ------ ----# PARCIALIZAR LOS X [ i ] PARA DE TAL MOTIVO
SACAR LAS GRAFICAS DE LOS ELEMENTOS VIGAS .
X=[]
for i in range ( n ) :
x1 = arange (0 , L [ i ] ,0 . 1 )
X = X + [ x1 ]
Form = [ ]
for i in range ( n ) :
QR = Forma ( X [ i ] ,L [ i ] )
Form = Form + [ QR ]
Resid = [ ]
for i in range ( n ) :
QM = Residuo ( X [ i ] ,L [ i ] , FV [ i ] [ 0 ] ,E [ i ] ,I [ i ] )
Resid = Resid + [ QM ]
DEF = [ ]
60
for i in range ( n ) :
QT = Form [ i ] . N_1 () * POW [ i ] [ 0 ] [ 0 ] + Form [ i ] . N_2 () * POW [ i ] [ 0 ] [ 1 ] + Form [ i ]
. N_3 () * POW [ i ] [ 1 ] [ 0 ] + Form [ i ] . N_4 () * POW [ i ] [ 1 ] [ 1 ] + Resid [ i ] . R_1 ()
DEF = DEF + [ QT ]
DEFC = [ ]
for i in range ( n ) :
QE = Form [ i ] . Gr_1 () * POW [ i ] [ 0 ] [ 0 ] + Form [ i ] . Gr_2 () * POW [ i ] [ 0 ] [ 1 ] + Form [ i ]
. Gr_3 () * POW [ i ] [ 1 ] [ 0 ] + Form [ i ] . Gr_4 () * POW [ i ] [ 1 ] [ 1 ] + Resid [ i ] . R_2 ()
DEFC = DEFC + [ QE ]
Mom = [ ]
for i in range ( n ) :
QU = Form [ i ] . M_1 () * POW [ i ] [ 0 ] [ 0 ] + Form [ i ] . M_2 () * POW [ i ] [ 0 ] [ 1 ] + Form [ i ]
. M_3 () * POW [ i ] [ 1 ] [ 0 ] + Form [ i ] . M_4 () * POW [ i ] [ 1 ] [ 1 ] + Resid [ i ] . R_3 ()
Mom = Mom + [ QU ]
Cort = [ ]
for i in range ( n ) :
QV = Form [ i ] . V_1 () * POW [ i ] [ 0 ] [ 0 ] + Form [ i ] . V_2 () * POW [ i ] [ 0 ] [ 1 ] + Form [ i ]
. V_3 () * POW [ i ] [ 1 ] [ 0 ] + Form [ i ] . V_4 () * POW [ i ] [ 1 ] [ 1 ] + Resid [ i ] . R_4 ()
Cort = Cort + [ QV ]
# ----- ------ ----- ------ ------ ----- ------ ------ ----- ------ ----# GRAFICAS _TERMINAREMOS YA EL PRIMER Y SEGUNDO CAPITULO ;)
# ----- ----- ----- ----- ------ ----- ----- ----- ------ ----- ----- ----while True :
p = input ( ' Elegir Viga : ')
i=p-1
DefT . plot ( X [ i ] , DEF [ i ] , ' ro ')
GirT . plot ( X [ i ] ,- DEFC [ i ] , ' ro ')
MomT . plot ( X [ i ] , Mom [ i ] , ' ro ')
CorT . plot ( X [ i ] ,- Cort [ i ] , ' ro ')
plt . show ()
61
# --- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---# CREACION DE TABLAS DE RESULTADOS DE LOS ELEMENTOS
# --- ---- ---- ---- --- ---- ---- ---- --- ---- ---- ---- ---- --- ---- ---- ---- --- -
62
Captulo 4
PROBLEMAS DE ELASTICIDAD
BIDIMENSIONAL.
4.1.
Introduccin.
64
4.2.
4.2.1.
Campo de Desplazamientos.
u(x, y) =
u(x, y)
v(x, y)
(4.1)
65
4.2.2.
Campo de Deformaciones.
u
x
v
y =
y
v u
+
xy =
x y
xz = yz = 0
x =
(4.2)
(4.3)
(4.4)
(4.5)
= [x , y , xy ]T
66
(4.6)
4.2.3.
Campo de Tensiones.
Se deduce en las ecuaciones Ec.(4.2)... Ec(4.5) que las tensiones tangenciales xz y yz son nulas.Por otra parte por los mismos motivos explicados en el
apartado anterior para la deformacin z ,la tensin z no trabaja y el vector de
tensiones significativas es [3, Pag.158]
= [x , y , xy ]T
4.2.4.
(4.7)
La relacin entre tensiones y deformaciones se deduce de la ecuacin constitutiva de la elasticidad tridimensional,con la hiptesis simplificativas descritas anteriormente(z = 0 para tensin plana,z = 0 para deformacin plana y
= D
(4.8)
d11 d12
D = d21 d22 0
0
0 d33
1
(4.9)
tos finitos
67
Tensin Plana
d11 = d22 =
Deformacin Plana
E
1v 2
d11 = d22 =
E(1v)
(1+v)(12v)
(4.10)
d12 = d21 =
d33 =
vE
1v 2
E
v
d12 = d21 = ( 1v
2 )( 1v )
E
2(1+v)
d33 =
E
2(1+v)
=G
Tensin Plana D =
1
1vxy vyx
vx
vyx Ey
vxy Ex
Ey
(4.11)
Tensin Plana
aEx bEx
0
1
D = adbc
cEy dEy
0
0
0 (ad bc)Gxy
68
1
1 + vyx 1 + vxy
=
+
Gxy
Ex
Ey
a = 1 vyz vzy
d = 1 vxz vzx
(4.12)
(4.13)
Ey
vxy
E
b
=
(Tensin Plana) y y = (Deformacin Plana)
Ex
vyx
Ex
c
0
(4.14)
(P U )u = x
(P U )uort = y
xcos() + ysen() = x
xsen() + ycos() = y
(4.15)
(4.16)
(4.17)
(4.18)
u = ucos() + vsen()
(4.19)
v = ucos() + vcos()
(4.20)
du
dx
con la cual
xy0
u
u x
u y
x0 =
0 =
0 +
x
x x
y x0
0
0
0
v
v x
v x
y 0 = 0 =
+
y
x y 0
x y 0
0
0
0
0
0
0
u
v
v x
v y
u x
u x
= 0 + 0 =
+
+
+
y
x
x x0
y x0
x y 0
x y 0
69
(4.21)
(4.22)
(4.23)
Reemplazando las ecuaciones Ec(4.17-4.18-4.19-4.20) en las ecuaciones Ec(4.214.22-4.23) con la cual tendramos lo siguiente:
0
x
y 0
0
xy
cos ()
sen ()
sen2 ()
sen()cos()
cos2 ()
sen()cos()
xy
(4.27)
= T
(4.28)
Por otra parte tambin puede demostrase que que las tensiones en los ejes
0
= TT
0
=D
(4.29)
(4.30)
= T T D T = D
0
D = TTD T
70
(4.31)
(4.32)
= De = D( 0 )
4.2.5.
(4.33)
Nodos.
Consideraremos en primer lugar el uso del sencillo elemento triangular de tres
nodos.Este elemento est considerado primario en el estudio de problemas
estructurales bidimensionales por el mtodo de elementos finitos.ya hemos comentado que mucho antes de la aparicin de este mtodo Courant sugiri el
71
4.2.6.
72
73
nodos como
u = N1 u1 + N2 u2 + N3 u3
(4.34)
v = N1 v1 + N2 v2 + N3 v3
(4.35)
u
N1 0 N2 0 N3
u=
=
v
0 N1 0 N2 0
N3
u1
v1
u2
v2
u3
(4.36)
u = Ni ae
u
u=
v
(4.37)
(4.38)
N = [N1 , N2 , N3 ] : Ni =
Ni
0
0
Ni
(4.39)
ae =
ae2
ae
u
i
aei =
v
i
74
(4.40)
(4.41)
Son el vector de desplazamientos nodales del elemento y un nodo i. Adviertan se que N y ae estn compuestos de tantas submatrices Ni y subvectores
aei ,respectivamente ,como nodos tiene el elemento.Esto es una propiedad general que se cumple en todos los casos.
La expresin de las funciones de forma del elemento triangular de tres nodos
se puede obtener como sigue.
Los tres nodos del elemento definen una variacin lineal del campo de desplazamientos que puede escribirse como:
u = 1 + 2 x + 3 y
(4.42)
v = 4 + 5 x + 6 y
(4.43)
75
u1 = 1 + 2 x1 + 3 y1
(4.44)
u2 = 1 + 2 x2 + 3 y2
(4.45)
u3 = 1 + 2 x3 + 3 y3
(4.46)
u=
1
[(a1 + b1 x + c1 y)u1 + (a2 + b2 x + c2 y)u2 + (a3 + b3 x + c3 y)u3 ] (4.47)
2A
Se deduce que las funciones de forma del elemento triangular tienen la siguiente forma: [3, Pag.75]
Ni =
4.2.7.
1
(ai + bi x + ci y)
2A
(4.48)
N2
N3
N1
u1 +
u2 +
u(4.49)
3
x
x
x
N1
N2
N3
y =
v1 +
v2 +
v(4.50)
3
y
y
y
u v
N1
N1
N2
N2
N3
N3
=
+
=
u1 +
v1 +
u2 +
v2 +
u3 +
v(4.51)
3
y x
y
x
y
x
y
x
x =
xy
u
x
v
y
v
x
u
y
N1
= 0
N1
N2
x
N3
x
N1
y
N2
y
N1
x
N2
y
N2
x
N3
y
N3
N3
u1
v1
u2
(4.52)
v2
u3
v
3
= Bae (4.53)
B = [B1 , B2 , B3 ] (4.54)
76
Ni
x
Bi = 0
Ni
y
Ni
y
Ni
x
(4.55)
77
pag 195]
b1
0 b2
0 b3
B=
0 c1 0 c2 0 c3
2A
c 1 b1 c 2 b2 c 3 b 3
(4.56)
y por consiguiente
b 0
i
Bi =
0 ci
2A
c i bi
4.2.8.
(4.57)
= D = DBae
(4.58)
= D( 0 ) + 0 = DBae D0 + 0
(4.59)
78
4.2.9.
79
Z Z
Z Z
tdA =
u btdA +
u tds +
Ae
le
3
X
ui Ui +
i=1
3
X
vi Vi (4.60)
i=1
Ui y Vi las fuerzas nodales de equilibrio que corresponden a dichos desplazamientos .El trabajo virtual de dichas fuerzas pueden despejarse de la ecuacin
anterior como:
Z Z
Z Z
tdA
u btdA
Ae
uT ttds = [ae ]T qe
(4.61)
Ae
ae = [u1 , v1 , u2 , v2 , u3 , v3 ]T
(4.62)
q e = [U1 , V1 , U2 , V2 , U3 , V3 ]
(4.63)
uT = [aT ]N T
(4.64)
T = [aT ]B T
(4.65)
Z Z
[a ] [
e T
Z Z
B tdA
Ae
N T ttdS] = [ae ]T q e
N btdA
Ae
(4.66)
le
Teniendo en cuenta que los desplazamientos virtuales son arbitrarios ,se deduce que:
Z Z
Z Z
B tdA
Ae
N btdA
Ae
N T ttds = q e
(4.67)
le
80
Z Z
[
Z Z
B DBtdA]a
B D tdA +
e
Ae
Z AZ
I
N T btdA
N T tds = qe
Ae
Z Z
B T 0 tdA
Ae
(4.68)
le
K e ae f e = q e
Z Z
B T DBtdA
Ke =
(4.69)
(4.70)
Ae
f e = fe + fe + fbe + fte
(4.71)
f(e)
Z Z
=
Z ZA
f(e) =
(e)
fb
B T D0 tdA
(4.72)
B T 0 tdA
(4.73)
N T btdA
(4.74)
N T ttds
(4.75)
(e)
AZ
=
Ae
(e)
ft
I
=
le
Los vectores de fuerzas nodales equivalentes debidos a deformaciones iniciales,tensiones iniciales,y fuerzas repartidas por unidad de rea y fuerzas repartidas en el contorno,respectivamente.
La ecuacin de equilibrio global de la malla se obtiene,como en el caso de
problemas unidimensionales,estableciendo simplemente que la suma de sus
fuerzas nodales de equilibrio en cada nodo debe ser igual a la fuerza nodal
exterior.Es decir: [4, pag 205]
(e)
q i = Pj
81
(4.76)
4.3.
do de Interpolacin de Lagrange.
La definicin de las funciones de interpolacin o funciones bases que pueden
realizarse en el sistema de coordenadas global que se emplean para definir
una estructura;sin embargo,se ha encontrado que ello no es muy conveniente
por que los elementos as definidos ,por lo general,dependen de los parmetros
caractersticos de la geometra y no son fciles de adaptar a nuevas configuraciones .Tal es el caso de uno de los primeros elementos bidimensional que
tienen forma rectangular: [4, Pag 81]
82
Figura 4.10: Mapeo entre los puntos del espacio Natural y el Espacio Cartesiano
lo cual en la figura 4.10 anterior se muestra como un ejemplo de geometra de
un cuadriltero en dos dimensiones .El punto a en el espacio con coordenadas
XA = (a,a ) = a
(4.77)
XB = (b ,(b) ) = b
83
(4.78)
XB = XA + La
(4.79)
b = a + l
(4.80)
xB = b = a +l = a +
|a {l} + O{l2 }
(4.81)
La =
| {l} + O(l2 )
a
(4.82)
dx =
d = Jd
(4.83)
J=
(4.84)
En dos dimensiones.
J =
84
(4.85)
En tres dimensiones:
J =
4.3.1.
(4.86)
Elementos Lineales.
Considere un elemento lineal elstico definido por dos nodos .Este elemento
se muestra un espacio natural y el espacio real. Usando el mtodo de lgebra
Figura 4.11: Mapeo del espacio natural al espacio real para un elemento lineal unidimensional
lineal se tendra que la forma de relacionar los dos espacios serian:
x = a0 + a1 = [1, ]
(4.87)
1
la aproximacin por elementos finitos emplea valores nodales de la funcin
misma,de manera que es importante utilizar la aproximacin nodal sorteando
los valores de ,para distintos casos:
85
Nodos a
-1
+1
Cuadro 4.1: Relacin entre nodos de los elementos lineales y sus coordenadas naturales.
a = A1 u.
a
0
a1
1
1 1
xe2
1
[1, ]
1
e
e
x2
1
(4.88)
1 1
[N1 , N2 ]
xe
2
1
2
1+
N2 =
2
N1 =
86
(4.89)
(4.90)
(4.91)
(4.92)
87
u
b=
2
X
Na ()ua e
(4.93)
a=1
Esta aproximacin ser lineal a partir de los valores nodales ,para que esta interpolacin sea adecuada,es necesario verificar que se cumplen los requisitos
de continuidad ,suavidad y completez.
La continuidad en el dominio de este elemento ser del tipo C 0 puesto que
las funciones de forma son lineales;la primera derivada ser constante,pero la
segunda derivada no est ya definida.A travs de la frontera, la funcin es continua si dos elementos se unen con el mismo nodo,pero la primera derivada es
discontinua.Estas funciones sern adecuadas en problemas que tengan hasta
primeras derivadas (m = 1) en el integrando de las ecuaciones se nota continuidad en la primera funcin y discontinuidad en la primera derivada.
La suavidad de la interpolacin se verifica grficamente,en donde se observa
que las funciones de forma no tiene ningn punto singular en el dominio del
elemento y,por tanto,la funcin interpolada tampoco tendr y el mapeo se realizar uno a uno y sobre todo el dominio.El jacobiano de transformacin para
este elemento se define mediante Le del elemento como: [4, Pag 88]
xe1
x
dx
dN1 dN2
1 1
xe xe1
Le
=
=
,
=
,
= 2
=
d
d d xe
2 2
2
2
2
(4.94)
88
ue0 = c0 + c1 xea
(4.95)
P2
a=1
Na ()uea ,junto
Na ()uea
(4.96)
Na ()(c0 + c1 xea )
(4.97)
u
b=
a=1
u=
2
X
a=1
u=
2
X
!
Na () c0 +
a=1
2
X
!
Na ()xea c1
(4.98)
a=1
1
1
Na () = N1 () + N2 () = (1 ) + (1 + ) = 1
2
2
a=1
(4.99)
Debe notarse que el uso del concepto isoparamtrico es el que permite la simplificacin de la ecuacin a un polinomio lineal.Esta ventaja de los elementos
isoparamtricos,ya que,bsicamente ,para verificar los requisitos de convergencia de interpolacin lo nico que hace falta es demostrar que se cumpla los
requisitos de particin de la unidad. [4, Pag 89]
2
X
() = 1
(4.100)
a=1
El elemento que se presenta en esta seccin se emplea para modelar un dominio bidimensional plano que se define mediante la posicin de 4 nodos .La numeracin de los nodos y la configuracin geomtrica del elemento se muestran
en la figura 4.14: [4, Pag 89] De nueva cuenta ,como en el caso unidimensional,el espacio de definicin ser el espacio natural y ser necesario realizar un
mapeo al espacio real de la aplicacin ,el cual se muestra en la siguiente figura: la aproximacin geomtrica se puede expresar mediante polinomios.Dado
89
Figura 4.14: Mapeo del espacio natural bidimensional al espacio cartesiano real.
que se tiene cuatro nodos para representacin geomtrica,es natural pensar
en proponer en aproximaciones no-nodal en trminos de cuatro coeficientes
90
x(, ) = a0 + a1 + a2 + a3 =
y(, ) = 0 + 1 + 2 + 3 =
a0
a
1
a2
a
3
(4.101)
(4.102)
3
La transformacin a una aproximacin nodal se logra al evaluar las coordenadas mediante.
x(a , a , a0 , )
Nodo a
-1
-1
+1
-1
+1
+1
-1
+1
(4.103)
Cuadro 4.2: Relacin de los nodos del elemento bilineal y sus coordenadas naturales.
91
xe1
e
x2 1
{xea } =
=
e
x3 1
e
1
x4
1
ye
1
e
y2 1
e
{xa } =
=
e
y3 1
1
y4e
1 1 +1
+1 1 1
+1 +1 +1
1 +1 1
1 1 +1
+1 1 1
+1 +1 +1
1 +1 1
a0
a1
a2
a3
0
= Aai
(4.104)
= Ai
(4.105)
ai = A1 {xea }
(4.106)
i = A1 {yae }
(4.107)
x=
1 ai
i
x = 1 A1 {xi }
h
i
x = N1 N2 N3 N4 {xi }
h
92
(4.108)
(4.109)
(4.110)
1
N1 = (1 )(1 )
4
1
N2 = (1 + )(1 )
4
1
N3 = (1 + )(1 + )
4
1
N4 = (1 )(1 + )
4
4.3.2.
(4.111)
(4.112)
(4.113)
(4.114)
Lagrangiana.
Para el tipo de funciones C0 solo se requiere que las funciones de interpolacin
se evalen a partir de valores nodales.En teora de interpolacin se encuentran
que una familia de polinomios que cumplen precisamente con ese requisito es
la de polinomios de Lagrange.
La interpolacin se plantea de la siguiente forma para problemas unidimensionales.Si tienen (n) puntos 0 n y la funcin f tiene valores conocidos
en esos puntos,entonces es posible encontrar un polinomio () nico,de grado
mximo (n 1),que al evaluarse en esos puntos ,toma el valor de la funcin .El
polinomio se expresa como:[4, Pag 106]
P () = f (1 )Ln1,1 () + + f (n )Ln1,n ()
(4.115)
(4.116)
u
b=
n
X
Na ()ua e
(4.117)
a=1
Es posible concluir que los polinomios de Lagrange pueden ser las funciones
de forma directamente:
Na () = Ln1,a ()
93
(4.118)
Solucin:
Se considera la siguiente aproximacin:
u
b=
n
X
Na ()ua e
(4.119)
a=1
(1 )
( 2 )
=
(1 2 )
2
( 1 )
(1 + )
=
=
(2 1 )
2
N1 = L1,1 =
(4.120)
N2 = L1,2
(4.121)
Puede observarse que estas funciones de forma son idnticas a las obtenidas por el mtodo de lgebra lineal estudiadas ya anteriormente.
94
n
X
Na ()uea
(4.122)
a=1
( 2 )( 3 )
(1 2 )(1 3 )
( 1)( 0)
1
=
= ( 1)
(1 1)(1 0)
2
( 1 )( 3 )
N2 = L2,2 =
(2 1 )(2 3 )
( + 1)( 0)
1
=
= ( + 1)
(+1 + 1)(+1 0)
2
( 1 )( 2 )
N3 = L2,3 =
(3 1 )(3 2 )
( + 1)( 1)
=
= 1(1 2 )
(+0 + 1)(+0 1)
N1 = L2,1 =
95
(4.123)
(4.124)
(4.125)
96
Na (, ) = Ln,b ()xLm,c ()
(4.126)
Solucin.
Se considera la siguiente aproximacin :
u
b=
n
X
Na (, )uea
(4.127)
a=1
Las funciones de forma se determinan mediante interpolacin de Lagrange unidimensionalmente en las direcciones y respectivamente.Debe
notarse que,en cada direccin,se tiene dos estaciones de interpolacin
por lo que es posible descomponer la interpolacin bidimensional en dos
interpolaciones unidimensionales como se muestran en la figura.
97
La siguiente tabla se emplea para relacionar la numeracin nodal del elemento bidimensional con la numeracin nodal de las interpolaciones unidimensionales: La tabla anterior se emplea para relacionar la numeracin
n
L() L()
1
1
N1 = L1,1 ()xL1,1 () = (1 ) ( 1) =
2
2
1
1
N2 = L1,2 ()xL1,1 () = ( + 1) ( 1) =
2
2
1
1
N3 = L1,2 ()xL1,2 () = ( + 1) ( + 1) =
2
2
1
1
N4 = L1,1 ()xL1,2 () = (1 ) ( + 1) =
2
2
1
(1 )(1 )
4
1
(1 + )(1 )
4
1
(1 + )(1 + )
4
1
(1 )(1 + )
4
(4.128)
(4.129)
(4.130)
(4.131)
El siguiente cdigo esta hecho en python v.2.7 la cual esta usando las libreras de ipython(librera de clculo algebraico) y numpy(librera de calculo de Matrices),la cual nos resuelve la interpolacin de lagrange en n puntos.
98
99
Ejemplo 04.
Considere el elemento Bidimensional de nueve nodos que se presenta en
el espacio natural en la siguiente figura,obtener las funciones de forma
mediante combinaciones de Lagrange. Se considera la siguiente aproximacin :
u
b=
n
X
Na (, )uea
(4.132)
a=1
100
101
L() L()
102
1
1
1
N1 (, ) = L2,1 ()xL2,1 () = ()( 1) ()( 1) = ()( 1)( (4.133)
1)
2
2
4
1
1
1
N2 (, ) = L2,2 ()xL2,1 () = ()( + 1) ()( 1) = ()( + 1)( (4.134)
1)
2
2
4
1
1
1
N3 (, ) = L2,2 ()xL2,2 () = ()( + 1) ()( + 1) = ()( + 1)( +(4.135)
1)
2
2
4
1
1
1
N4 (, ) = L2,1 ()xL2,2 () = ()( 1) ()( + 1) = ()( 1)( +(4.136)
1)
2
2
4
1
1
N5 (, ) = L2,3 ()xL2,1 () = (1 2 ) ()(1 ) = (1 2 )()(1 (4.137)
)
2
2
1
1
N6 (, ) = L2,2 ()xL2,3 () = (1 2 ) ()(1 + ) = (1 2 )()(1 +(4.138)
)
2
2
1
1
N7 (, ) = L2,3 ()xL2,2 () = (1 2 ) ()(1 + ) = (1 2 )()(1 +(4.139)
)
2
2
1
1
)
N8 (, ) = L2,1 ()xL2,3 () = (1 2 ) ()(1 ) = (1 2 )()(1 (4.140)
2
2
N9 (, ) = L2,3 ()xL2,3 () = (1 2 )(1 2 ) = (1 2 )(1 (4.141)
2)
Los elementos formados as generan familias de elementos Lagrangianos,una de las familias de elementos estndar,que se presentan en la
siguiente figura: [4]
103
4.3.3.
Elementos de Transicin.
104
N5 (, ) = L1,2 ()xL2,3 ()
1
N5 (, ) = (1 + )(1 2 )
2
(4.142)
(4.143)
105
nodal.
N5 (, ) =
0 j = 1, 2, 3, 4
(4.144)
j=6
N1 = N2 = 0
1
N2 = N3 =
2
(4.145)
(4.146)
1
N1 = (1 )(1 )(4.147)
4
1
N2 = N2 N5(4.148)
2
1
1
1
N2 = (1 + )(1 ) (1 + )(1 2 )N2 = (1 + )( 1)(4.149)
4
4
4
1
N3 = N3 + N5(4.150)
2
1
1
N3 = (1 + )(1 + ) (1 + )(1 2 )(4.151)
4
4
1
N3 = (1 + )( + 1)(4.152)
4
1
N4 = (1 + )(1 )(4.153)
4
4.3.4.
En secciones anteriores de este capitulo,se ha encontrado que mediante la tcnica de degeneracin es posible crear elementos triangulares y tetrahedricos a
106
r=
A1
A
s=
A2
A
t=
A3
A
0 r, s, t 1
(4.154)
Cada terna de coordenadas define una forma nica a cualquier punto del trin-
107
r+s+t=1
(4.155)
Se observa que el rango de valores para cada coordenada va desde cero hasta
uno.Dada la posicin de los nudos en los vrtices del triangulo, es posible emplear directamente estas coordenadas como funciones como muestran en las
siguientes ecuaciones:
(4.156)
(4.157)
(4.158)
con:
N1 = r N2 = s N3 = t
(4.159)
u
b = N1 u1 e + N2 u2 e + N3 u3 e
(4.160)
Debe recordarse que solo se emplean realmente dos coordenadas independientes,por lo que se utiliza la ecuacin como una ecuacin de restriccin para
una de las variables,digamos t.
t=1rs
(4.161)
La convergencia en este caso,se asegura,como en los elementos cuadriliterales,verificando que hay continuidad y suavidad en las funciones de interpolacin.En particular,se tendr que verificar que el determinante del jacobiano de
la transformacin es positivo.Debido a la dependencia entre las variables,dada
por la ecuacin: [4, Pag 120]
J =
108
x
r
x
s
y
r
y
s
(4.162)
1 Para Valores de : I = 1
(4.163)
(4.164)
Para elementos en dos dimensiones,se hace el producto en tres interpolaciones,en direccin de las tres coordenadas triangulares ,formando una retcula de
nodos como la que se muestra en la siguiente figura,de manera que la funcin
de forma para un nodo a se expresa mediante:
(4.165)
Figura 4.28: Patrn para generar elementos de alta jerarqua en coordenadas triangulares.
Ejemplo 01.
Como ejemplo,las funciones de forma del elemento triangular de tres nodos
109
que se muestran en la figura se obtienen con dos estaciones a lo largo de cada coordenada.Para las funciones de interpolacin se aplica EC(163),EC(164)
resultan las mismas funciones que antes:
r ri
=r
r2 r1
s s1
=s
N2 = T1 (r) T2 (s) T1 (t) =
s2 s1
s s1
=t
N3 = T1 (r) T1 (s) T2 (t) =
s2 s1
N1 = T2 (r) T1 (s) T1 (t) =
(4.166)
(4.167)
(4.168)
Ejemplo 02.
Hallar las funciones de forma por el metodo antes mencionado de la siguiente
forma Triangular: Este elemento se presentan en la figura ,en ella se observa
110
(r r1 )(r r2 )
= r(2r 1) (4.169)
(r3 r1 )(r3 r2 )
(s s1 )(s s2 )
= s(2s 1) (4.170)
N2 (r, s, t) = T3 (s) T1 (r) T1 (t) =
(s3 s1 )(s3 s2 )
(t t1 )(t t2 )
N3 (r, s, t) = T3 (t) T1 (r) T1 (s) =
= t(2t 1) (4.171)
(t3 t1 )(t3 t2 )
r0
s0
1 = 4rs (4.172)
N4 (r, s, t) = T2 (s) T2 (r) T1 (t) =
0,5 0 0,5 0
s0
t0
N5 (r, s, t) = T2 (s) T2 (s) T1 (r) =
1 = 4st (4.173)
0,5 0 0,5 0
r0
t0
N6 (r, s, t) = T2 (r) T2 (t) T1 (r) =
1 = 4rt (4.174)
0,5 0 0,5 0
N1 (r, s, t) = T3 (r) T1 (s) T1 (t) =
(4.175)
4.4.
Z Z
Kij = D
xm y n dA
(4.176)
Ae
m!n!
Elementos Triangulares
(4.177)
(m + n + 2)!
(2a)m+1 (2b)n+1
Kij = D
Elementos Rectangulares
(4.178)
(m + 1)(n + 1)
Kij = Dcn+1 am+1 (b)m+1
111
(4.179)
T =
cos(xx) cos(xy)
cos(yx
cos(yy)
(4.180)
siendo(xx) el ngulo que forma el eje x con el eje global x,etc. El clculo de
Figura 4.30: Coordenadas x,y para el clculo analtico de las integrales de elementos
triangulares y rectangulares.
la matriz de rigidez en elementos triangulares exige obtener derivadas de las
funciones de forma expresadas en coordenadas de rea es decir (r, s, t),con
respecto a las coordenadas cartesianas.As por ejemplo [3]
(r, s, t)
N1 r N1 s N1 t
=
+
+
x
r x
s x
t x
(4.181)
(r, s, t)
bi
(r, s, t)
ci
=
y
=
x
2Ae
y
2Ae
112
(4.182)
Z Z
k! l! m!
rk sl tm dA = 2Ae
(2 + k + l + m)!
Ae
I
k! l!
rk sl ds = le
(1 + k + l)!
l(e)
(4.183)
(4.184)
113
Captulo 5
SLIDOS DE REVOLUCIN.
5.1.
Introduccin.
114
5.2.
5.2.1.
Formulacin Bsica.
Campo de Desplazamiento.
u(r, s)
u=
w(r, s)
5.2.2.
(5.1)
Campo de Deformaciones.
r =
u
w
u w
: z =
: rz =
+
r
z
z
r
115
(5.2)
2(r + u)
u
=
2r
r
(5.3)
5.2.3.
rz
u
r
w
z
u
r
u
z
w
r
(5.4)
Campos de Tensiones.
= {r , z , , rz }
(5.5)
5.2.4.
Ecuacin Constitutiva.
la Relacin entre tensiones y deformaciones se deduce de la elasticidad tridimensional de forma anloga al caso de elasticidad bidimensional.En presencia
116
= D( 0 ) + 0
(5.6)
D=
(1 + )(1 2)
12
2
(5.7)
5.2.5.
La expresin del PTV(principio de trabajos virtuales) es anloga a la de elasticidad biimensional ,estando ahora todas las integrales referidas al volumen del
117
dV = (rd)dr.dz = rddA
(5.8)
Z Z Z
Z Z Z
u brdds +
u brddA +
rddA =
A
I Z
XZ
i
b=
b
z
:t=
t
z
y qi =
ri
q
zi
(5.10)
Son los vectores de fuerzas exteriores msicas ,de superficie y puntuales ,respectivamente .Recordemos de nuevo que ahora todas las cargas tienen simetra de revolucin.
Haciendo uso de la simetra axial puede efectuarse la integracin sobre la variable circunferencial para dar:
Z Z
Z Z
dA = 2
A
u brdA + 2
A
uT rds + 2
aTi qi ri (5.11)
Se observa que el coeficiente 2 aparece multiplicando todos los trminos ,pudiendo por lo tanto eliminarse.No obstante,conviene mantenerlo por razones
didcticas,y,fundamentalmente ,para recordar que los valores de las cargas
puntuales qi se refieren a las intensidades de carga por unidad de longitud
circunferencial. [3, Pag 249]
118
uTi qi ri d(5.9)
5.3.
5.3.1.
119
tres nodos.
N u1 N2 u2 N3 u3
1
=
u=
w
N1 w1 N2 w2 N3 w3
N
0 N2 0 N3 0
1
N = [N1 , N2 , N3 ] =
0 N1 0 N2 0 N3
a1
e
= [u1, w1, u2, w2, u3, w3]T
a =
a2
(5.12)
(5.13)
(5.14)
Las funciones de forma Ni se obtienen directamente de las del elemento triangular de tres nodos de elasticidad plana,sustituyendo simplemente las coordenadas x,y por r,z.La interpolacin de las expresiones anteriores al caso de un
elemento de n nodos.
5.3.2.
nes.
Del Vector de deformaciones y las ecuaciones de obtienen.
Ni
r
0
3
X
i=1
Nri
Ni
z
a
1
Ni
u
i
= [B1 , B2 , B3 ] a2
= Bae
0 wi
a3
Ni
r
120
(5.15)
Ni
r
Bi =
2A
bi
0
(ai +bi r+ci z)
r
ci
ci
bi
(5.16)
3
X
Bi Da(e) D0 + 0
(5.17)
i=1
u
r
5.3.3.
121
K e ae f e = q e
(5.18)
Z Z
= 2
A(e)
(5.19)
La expresin anterior es vlida para cualquier elemento bidimensional de n nodos.En la figura se muestra la forma desarrollada Kije para el elemento triangular de tres nodos .
5.3.4.
Z Z
f = 2
Z Z
2
Z Z
N trds + 2
N brdA + 2
A
le
B T 0 rdA
B T D0 rdA
(5.20)
Ae
fbe ;la segunda a las fuerzas de superficie fte ;la tercera a la fuerza debida a las
tensiones iniciales fe y la cuarta debida a tensiones iniciales fe . [3, Pag 257]
122
METODOLOGA DE ESTUDIO.
123
Captulo 6
Metodologa de Estudio.
La metodologa de estudio para la tesis,fue terico ya que se us el mtodo
inductivo-deductivo,basndose en informacin hecha por investigaciones anteriores,para dar fruto a unos scripts en lenguaje python.As como los mtodos
de acoplamiento de matrices de rigidez usndose para tal fin el sistema ordenamiento de la matriz que es un sencillo algoritmo de acoplamiento general
para todo tipo de matrices de rigidez.El anlisis de fuerzas viene sometido al
estudio de las funciones de forma las cuales son resultado de la demostracin
terica de la formula de la deformada general de vigas la cual se puede esclarecer con las formulas obtenidas en el capitulo 3,especficamente en el apartado
de anlisis de flexin de vigas por la teora Euler-Bernulli.
u = N2 w1 + N3 1 + N4 w2 + N5 2 + Ri (x, l)
124
(6.1)
125
EJEMPLOS,PRESENTACIN Y
DISCUSIN DE RESULTADOS .
126
Captulo 7
Ejemplos y Problemas de
Elementos Finitos.
7.1.
Vigas.
7.1.1.
Problema N01:
127
128
0.00
0.00
-25200
0.00
0.00
0.00
0.00
0.00
0.00
90.72
226.8
0.00
-90.72
226.80
0.00
0.00
0.00
0.00
226.8
756
0.00
-226.80
378.00
0.00
0.00
0.00
-25200
0.00
0.00
67200.00
0.00
0.00
-42000.00
0.00
0.00
0.00
-90.72
-226.8
0.00
510.72
403.2
0.00
-420.00
630
0.00
226.80
378.00
0.00
403.20
2016.00
0.00
-630.00
630.00
0.00
0.00
0.00
-42000.00
0.00
0.00
420000.00
0.00
0.00
0.00
0.00
0.00
0.00
-420.00
-630.00
0.00
420.00
630.00
0.00
0.00
0.00
0.00
630.00
630.00
0.00
-630.00
1260.00
129
2016.00
0.00
-630.00
630.00
0.00
420000
0.00
0.00
-630.00
0.00
420.00
-630.00
630.00
0.00
-630.00
1260.00
130
Femax 1.01
%Comparacin
Nudo A
0.01044200
0.01036155
99.22 %
Nudo B-1
0.069695
0.06917898
99.25 %
Nudo B-2
0.0294900
0.02940917
99.72 %
Femax
% Comparacin
F y1
2.65
2.6561
99.77 %
M z1
0.25
0.28
89.28 %
F y2
11.34
11.39
99.56 %
131
7.2.
7.2.1.
Prticos.
Problema N02.
132
Figura 7.8: Comparacin de Grficos del Femax con Sap 2000 V14.
133
Femax
% Comparacin
u2
0.0038200
0.00372745
97.57 %
v2
0.00012800
0.00012827
100.2 %
0.003245
0.0031947
98.44 %
u3
0.003743
0.00364976
97.50 %
v3
0.00015745
0.00015745
100 %
0.0014770
0.00145116
98.25 %
134
135
Femax
% Comparacin.
F x1
0.427000
0.44712991
104.7 %
F y1
5.389200
5.387303570
99.96 %
M z1
0.38189
0.33563433
87.87 %
F x4
2.4270
2.4471
100.8 %
F y4
6.6108
6.6126
100.00 %
M z4
3.1751
3.2136
101.2 %
136
Figura 7.14: Comparacin de Fuerzas Internas del Femax y el Sap 2000 V14.
137
138
Captulo 8
Programacin general del Femax.
La aplicacin con xito en este caso del mtodo de elementos finitos se reduce
a un programa que he elaborado con uso del lenguaje de python y con un sistema de clases y funciones de listas y libreras,conceptos que fueron desarrollando con teoras de elementos finitos de los captulos anteriores,el concepto que
se elabor para poder desarrollar el programa fue,en un sistema simple,grfico
y que tenga un fin solo explicativo,pues el programa aun es muy simple para
ser usado para clculos complejos,ya que su fin es simplemente el Femax 1.00
es solo para uso docente y para explicacin en si del mtodo ya que el lenguaje fue desarrollado de manera que pueda ser entendida para los que tengan
inters en el tema y puedan seguir investigando en el mtodo la cual se deja
a criterio de posteriores tesistas que tengan inters de investigacin en este
mtodo.
8.1.
las etapas fundamentales asociadas al anlisis de una estructura por un programa de elementos finitos,asi como la relacin de cada etapa con la subrutinas
puestas en el diagrama de flujo principal.
8.1.1.
Puesta de Datos.
Grilla.
La grilla es un sistema de referencia que se trata de unas lineas de contorno
dbil y que son aproximadas en los puntos de inters con un sistema de osnap
o de acercamiento cuando los eventos del mause se acercan a los (x, y) de
los puntos ya derivados del software o puntos de inters del mismo,todos los
puntos son referenciados con el osnap y se traduce en facilidad en el trazo de
las barras,fuerzas.
140
def grilla () :
global Ubicaciones_Universales
Ubicaciones_Universales = [ ]
def dibujo_grilla () :
if nx . get () ! = 0 and ny . get () ! = 0 :
for i in range ( nx . get () + 1 ) :
dibujo . create_line ( 50 + i * mx . get () * 50 , 550 , 50
+ i * mx . get () * 50 , 550 ny . get () * my . get () * 50
, fill = ' gray ' , activefill = ' red ' , dash = (3 , 5 ) ,
tag = ( ' Recta01 ' ))
for i in range ( ny . get () + 1 ) :
dibujo . create_line ( 50 , 550 - i * my . get () * 50 ,
141
else :
tkMessageBox . showinfo ( message = '
Por Favor poner Datos ')
ventana_grilla = Toplevel ()
ventana_grilla . title ( ' DIBUJAR GRILLA P / ESQUEMA ')
ventana_grilla . minsize ( 500 , 200 )
ventana_grilla . geometry ( ' 500x200 + 0 + 0 ')
# --------- ---------- ---------- ---------- ---------- ------nx = IntVar ()
mx = DoubleVar ()
ny = IntVar ()
my = DoubleVar ()
# -------- -------- --------- -------- --------- -------- ------texto_principal = Label ( ventana_grilla ,
text = ' COORDENADAS EN EL EJE X : Y ')
. place ( x = 100 , y = 0 )
Texto_01 = Label ( ventana_grilla ,
text = 'N : Ejes - X ' ). place ( x = 10 , y = 20 )
texto_02 = Label ( ventana_grilla ,
142
ELEMENTOS DE VARIABLE
Lineas de Barras.
Subrutina creada para el trazo de barras la cual contiene un algoritmo de
eventos consecutivos en dos puntos [inicial, nal],las cuales contienen eventos
de posiciones y los dibujos creados en un sistema de la librera visual Tkinter,contiene el lienzo o Canvas la cual es un sector de dibujo creado para hacer
143
144
global start
global u
global u2
if start is not None :
x = start [ 0 ]
y = start [ 1 ]
dibujo . create_line (x ,y , evento .x ,
evento .y , width = 4 .5 , arrow = LAST ,
activefill = ' gray ' , tag = ( ' linea1 ' ))
dibujo . itemconfig ( ' linea1 ' , fill = ' red ')
u = u + [ ( x - 50 ) / 50 ,( 550 - y ) / 50 ,
( evento . x - 50 ) / 50 ,( 550 - evento . y ) / 50 ]
longitudes = longitudes +
[ norm ( array ( [ ( evento . x - 50 ) / 50 ,( 550 - evento . y ) / 50 ] )
- array ( [ ( x - 50 ) / 50 ,( 550 - y ) / 50 ] )) ]
start = None
Las figuras de barras son hechas de color rojo y flechas indicando su posicin inicial y final de las mismas,la cual nos ayudaran a hallar las matrices o
arreglos de sus caractersticas como longitud,Seno,Coseno de las barras respectivamente para porder calcular las matrices de transformacin y consecuentemente hallar la matriz de rigidez.
Con el algoritmo descrito nos darn la forma para el clculo del esquema,ms
aun definiremos tambin los materiales de las barras la cual estar descrito
ms adelante.
145
Materiales.
Es una subrutina encargada de obtener los materiales tanto de Ii , Ei , Ai ,el sistema es consecuencia o depende del numero de las barras con la cual se puede
introducir los datos en el arreglo para el respectivo clculo de la matriz de rigidez,con
la cual se hace el arreglo de la matriz general ya calculada y demostrada en el capi-
146
AE
L
AE
L
0
12 EI
6 EI
L3
L2
0
6 EI
4 EI
L2
L
KT =
AE
L
0
0
0
12 EI
6 EI
L3
L2
0
6 EI
2 EI
L2
L
12 EI
L3
6 EI
L2
6 EI
L2
2 EI
L
AE
L
12 EI
L3
6 EI
L2
6 EI
L2
4 EI
L
(8.1)
Ser establecido para casos particulares de de barras claro que en este sistema
tambin se podr evaluar las transformadas y de tal manera poder sumar las matrices
147
Ku = T T K i T
(8.2)
148
def Materiales_Calculo () :
global u2
global numero
global C3_Materiales
global nodos_espacio
nodos_espacio = u2
ventana_Materiales = Toplevel ()
ventana_Materiales . title ( ' Materiales de Elementos ')
lista_1 = [ ' Inercia '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
lista_2 = [ ' Elasticidad '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
lista_3 = [ ' Area '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
ventana_Materiales . geometry ( ' 800x300 + 0 + 0 ')
numero = len ( u2 ) / 2
for i in range ( len ( u2 ) / 2 ) :
lista_1 [ i ] = DoubleVar ()
lista_2 [ i ] = DoubleVar ()
lista_3 [ i ] = DoubleVar ()
for i in range ( len ( u2 ) / 2 ) :
u1 = Label ( ventana_Materiales ,
text = ' Inercia '+ str ( i ) , fg = ' red ' ). place ( x =0 , y = 20 + i * 20 )
u2 = Label ( ventana_Materiales ,
text = ' Elasticidad '+ str ( i ) , fg = ' red ' ). place ( x = 200 , y = 20 + i * 20 )
u3 = Label ( ventana_Materiales
, text = ' Area '+ str ( i ) , fg = ' red ' ). place ( x = 400 , y = 20 + i * 20 )
for j in range ( numero ) :
Entrada_Inercia = Entry ( ventana_Materiales ,
textvariable = lista_1 [ j ] , width = 10 ). place ( x = 100 , y = 20 + j * 20 )
Entrada_Elasticidad = Entry ( ventana_Materiales ,
textvariable = lista_2 [ j ] , width = 10 ). place ( x = 300 , y = 20 + j * 20 )
Entrada_Area = Entry ( ventana_Materiales ,
textvariable = lista_3 [ j ] , width = 10 ). place ( x = 500 , y = 20 + j * 20 )
# ------- ------- -------- ------- -------- ------- -------- -----C_Materiales = None
149
def guardar_datos () :
global C_Materiales
global C3_Materiales
C_Materiales = [ ]
for t in range ( numero ) :
C_Materiales = C_Materiales + [ lista_1 [ t ] . get () ] +
[ lista_2 [ t ] . get () ] + [ lista_3 [ t ] . get () ]
C2_Materiales = array ( C_Materiales )
C3_Materiales = C2_Materiales . reshape ( numero , 3 )
print C3_Materiales
# ----- ------ ----- ------ ------ ----- ------ ------ ----- ------ ----# BOTON DE GUARDAR CARACTERISTICAS DE LOS ELEMENTOS
Boton01 = Button ( ventana_Materiales , text = ' GUARDAR ' ,
command = guardar_datos ). place ( x = 600 , y = 250 )
# ---- ----- ----- ----- ----- ----- ----- ----- ---- ----- ----- ----- -----
150
Como vemos las caracteristicas del material lo controla un algoritmo que depende
del numero de elementos de barra.
151
Clase Apoyos dibujo. esta clase fu creada para poder establecer los grficos
en el lienzo de tkinter ya que se tenia que ahorrar lineas de cdigo y para su
mejor manejo de los conceptos a la hora de programar,la clase necesaria para
tal fin en este sentido vemos la linea de cdigo del paquete nodos.
152
class Apoyos () :
def __init__ ( self , evento , lienzo ) :
self . evento = evento
self . lienzo = lienzo
def Aempotrados ( self ) :
self . lienzo . create_line ( self . evento .x , self . evento .y ,
self . evento .x , self . evento . y + 10 , fill = ' blue ')
self . lienzo . create_line ( self . evento .x , self . evento . y + 10 ,
self . evento . x - 10 , self . evento . y + 10 , fill = ' blue ')
self . lienzo . create_line ( self . evento .x , self . evento . y + 10 ,
self . evento . x + 10 , self . evento . y + 10 , fill = ' blue ')
def Afijos ( self ) :
self . lienzo . create_line ( self . evento .x , self . evento .y ,
self . evento . x - 10 , self . evento . y + 10 , fill = ' blue ')
self . lienzo . create_line ( self . evento .x , self . evento .y ,
self . evento . x + 10 , self . evento . y + 10 , fill = ' blue ')
self . lienzo . create_line ( self . evento . x - 10 , self . evento . y + 10 ,
self . evento . x + 10 , self . evento . y + 10 , fill = ' blue ')
def Amoviles ( self ) :
self . lienzo . create_line ( self . evento .x , self . evento .y ,
self . evento . x -5 , self . evento . y +5 , fill = ' blue ')
self . lienzo . create_line ( self . evento .x , self . evento .y ,
self . evento . x +5 , self . evento . y +5 , fill = ' blue ')
self . lienzo . create_line ( self . evento . x -5 , self . evento . y +5 ,
self . evento . x +5 , self . evento . y +5 , fill = ' blue ')
self . lienzo . create_oval ( self . evento . x -2 , self . evento . y +5 ,
self . evento . x +2 , self . evento . y + 10 , fill = ' blue ')
153
# --- --- --- --- ---- --- --- ---- --- --- --- ---- --- --- --- ---- --- --- --- ---- --- --- Im_Fijos = PhotoImage ( file = ' fijo . gif ')
Im_Empotrados = PhotoImage ( file = ' empotrado . gif ')
Im_Moviles = PhotoImage ( file = ' movil . gif ')
# --- --- --- --- --- --- ---- --- --- --- --- --- ---- --- --- --- --- --- --- ---- --- --- --ventana_apoyos . title ( ' Tipo - Apoyos ')
selec = IntVar ()
Texto_Empotrados = Label ( ventana_apoyos , text = ' Apoyo Empotrado ' ). place ( x = 100
Texto_Fjos = Label ( ventana_apoyos , text = ' Apoyo Fijo ' ). place ( x = 100 , y = 60 )
154
Texto_Moviles = Label ( ventana_apoyos , text = ' Apoyo Moviles ' ). place ( x = 100 , y = 10
# --- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- -
botton_01 = Button ( ventana_apoyos , text = ' Ejecutar ' , fg = ' blue ' ). place ( x = 200 , y =
dibujo . bind ( ' < Button -1 > ' , apoyos_general )
ventana_apoyos . geometry ( ' 400x300 + 0 + 0 ')
ventana_apoyos . minsize ( 400 , 300 )
ventana_apoyos . mainloop ()
155
8.1.2.
Matriz de Rigidez.
156
1 2 3
a 1 d
b 2 e
c 3 f
1 4 4
2 5 5
Grados de Libertad
(8.3)
3 6 6
1
1
Esta forma de acoplamiento se encuentra en el libro de Tena Colunga Anlisis Estructural con M-
157
(8.4)
Figura 8.11: Procedimiento del ensamblaje global por medio del mtodo i
158
# -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- --- -- -- --- -- --- -- --- -- -- --- -- --- -- -#
# -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- --- -- -- --- -- --- -- --- -- -- --- -- --- -- -for i in range ( len ( C )) :
ordenamiento [ i ] = C [ i ]
print ordenamiento
for i in range ( numero_datos ) :
for j in range ( len ( C )) :
if ordenamiento [ j ] [ 0 ] = = nodos_espacio [ i ] [ 0 ] and
ordenamiento [ j ] [ 1 ] = = nodos_espacio [ i ] [ 1 ] :
ordenamiento_primario . append ( j )
print ordenamiento_primario
ordenamiento2 = array ( ordenamiento_primario )
numero_filas = len ( ordenamiento2 ) / 2
ultimo_ordenamiento = ordenamiento2 . reshape ( numero_filas , 2 )
P_01S = ultimo_ordenamiento + 1
P_02S = P_01S * 3
WQ = array ( [ range ( P_02S [ i ] [ 0 ] -3 , P_02S [ i ] [ 0 ] ) for i in range ( len ( P_02S )) ] )
WR = array ( [ range ( P_02S [ i ] [ 1 ] -3 , P_02S [ i ] [ 1 ] ) for i in range ( len ( P_02S )) ] )
O=[]
for i in range ( len ( WQ )) :
for j in range ( len ( WR )) :
if i = = j :
O = O + [ array ( [ WQ [ i ] , WR [ j ] ] ). reshape ( 6 ) ]
P_03S = array ( O )
matriz_ordenamiento = transpose ( P_03S )
print matriz_ordenamiento
159
Matriz simplificada.
160
# -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- --- -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- #
#
k [ PI [ i ][ n ] , PI [ j ][ n ]] < - - - - - - - - - - - - - - - - - - K { n } [ i ][ n ]
# -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- --- -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- KT = zeros (( 3 * len ( C ) , 3 * len ( C )))
for i in range ( 6 ) :
for j in range ( 6 ) :
for n in range ( len ( K_Rtodos )) :
KT [ matriz_ordenamiento [ i ] [ n ] ] [ matriz_ordenamiento [ j ] [ n ] ]
# -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- --- -- -- --- -- --- -- --- -- -- --- -- --- -- --- -- #
#
# -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- GDL01 = [ ]
for i in range ( len ( C )) :
for j in range ( len ( tipo_apoyos1 )) :
if ordenamiento [ i ] [ 0 ] = = tipo_apoyos1 [ j ] [ 0 ] and ordenamiento [ i ] [ 1 ]
161
= = tipo_apoyos1 [ j ] [ 1 ] :
GDL01 . append ( i )
GDL02 = array ( GDL01 )
GDL03 = GDL02 + 1
GDL04 = GDL03 * 3
MQ = array ( [ range ( GDL04 [ i ] -3 , GDL04 [ i ] ) for i in range ( len ( GDL04 )) ] )
EL = MQ * codigo_apoyos1
K_reducida_inicial = delete ( KT , EL , axis = 0 )
Antes del acoplamiento es bueno saber que las matrices tendrn que estar
sujetas o calculadas en el sistema global la cual se calcula por medio de las
siguientes formulas las cuales son establecidas por medio de las siguientes
formulas.
AE
L
0
12 EI
6 EI
L3
L2
0
6 EI
4 EI
L2
L
Ki =
AE
L
0
0
0
12 EI
6 EI
L3
L2
0
6 EI
2 EI
L2
L
162
AE
L
12 EI
L3
6 EI
L2
6 EI
L2
2 EI
L
AE
L
12 EI
L3
6 EI
L2
6 EI
L2
4 EI
L
(8.5)
La matriz antes mencionada en la frmula es establecida como matriz de elementos locales es decir para ejes que sean paralelos a la barra con la cual
nosotros sabemos que en los problemas de anlisis estructural estn geomtricamente basados en barras conectadas en forma geomtricas complejas pues
para ello nos basaremos en la matriz de transformacin:
cos()
sen() 0
sen() cos() 0
0
0
0
0
0
1
0
0
0
T =
0
0
0 cos() sen() 0
0
0
0 sen() cos() 0
0
0
0
0
0
1
(8.6)
Kg = T T Ki T
8.1.3.
(8.7)
Clculo de Deformaciones.
Esta subrutina se encarga del clculo de las deformaciones globales y deformaciones locales la cual nos dan la oportunidad de aplicar las funciones de
deformadas por medio de las funciones de interpolacin o funciones de forma
que se usan para hallar las grficas que son halladas por medio de la suma y
multiplicacin de las deformadas en los grados de libertad. 1 , v1 , u1 , 2 , v2 , u2
ug = N1 u1 + N2 v1 + N3 1 + N4 u2 + N5 v2 + N6 2
163
(8.8)
x
N1 (x, l) = 1
l
x 3
x 2
N2 (x, l) = 2( ) 3( ) + 1
l
l
x
N3 (x, l) = x(1 )2
l
x
N4 (x, l) =
l
x 2
x 3
N5 (x, l) = 3( ) 2( )
l
l
x2
x
N6 (x, l) = (1 )
l
l
(8.9)
(8.10)
(8.11)
(8.12)
(8.13)
(8.14)
164
(8.15)
# ............................................................................
#
#
# -- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- -esquema_fuerzasp = [ ]
for i in range ( len ( ordenamiento )) :
for j in range ( len ( Puntos_AFuerzasP1 )) :
if ordenamiento [ i ] [ 0 ] = =
# -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- --- -- --- -- --- -- --- -- --- -- --- -- --- -- #
#
# -- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- -F5 = F4 . reshape ( len ( F4 ) *2 , 2 )
esquema_FuerzasD = [ ]
for i in range ( len ( ordenamiento )) :
for j in range ( len ( F5 )) :
if ordenamiento [ i ] [ 0 ] = = F5 [ j ] [ 0 ] and
ordenamiento [ i ] [ 1 ] = = F5 [ j ] [ 1 ] :
esquema_FuerzasD . append ( i )
165
# -- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -Fuerzas_nequivalentes = Fuerzas_puntuales - Fuerzas_Distribuidas
Fuerzas_NodD = delete ( Fuerzas_nequivalentes , EL , axis = 0 )
print Fuerzas_NodD
# -- -- -- -- -- --- -- -- -- -- --- -- -- -- -- -- --- -- -- -- -- --- -- -- -- -- --- -- -- -- -- -- --- -- -Deformaciones01 = dot ( inv ( K_reducida_final ) , Fuerzas_NodD )
print Deformaciones01
WUP = range (0 , len ( Fuerzas_nequivalentes ))
166
8.1.4.
Esta subrutina es para el clculo de las fuerzas internas que en este caso es por
barra la cual nos dan la oportunidad de hallar el clculo de las fuerzas internas
por barra:
0
ui = T ui
(8.16)
K i (T ui ) = Fint x Barra
(8.17)
167
# ----------------------------------------------#
#
#
# -----------------------------------------------us01 = transpose ( matriz_ordenamiento )
ordenamiento_fuerzasU = [ ]
for i in range ( len ( us01 )) :
sx = us01 [ i ] . reshape (1 , 6 )
ordenamiento_fuerzasU = ordenamiento_fuerzasU + [ sx ]
ordenamiento_ff = array ( ordenamiento_fuerzasU ).
reshape ( len ( ordenamiento_fuerzasU ) , 6 )
SMR = array ( [ [ 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 ,
0 . 000000 , 0 . 000000 ]
for i in range ( len ( ordenamiento_ff )) ] )
for i in range ( len ( ordenamiento_ff )) :
for j in range ( 6 ) :
SMR [ i ] [ j ] = SMR [ i ] [ j ] +
Deformaciones_totales [ ordenamiento_ff [ i ] [ j ] ]
print SMR
SMRWW = [ ]
for i in range ( len ( ordenamiento_ff )) :
SMRWW = SMRWW + [ dot ( T [ i ] , SMR [ i ] . reshape (6 , 1 )) ]
SMRWW1 = array ( SMRWW )
SMRWW2 = SMRWW1 . reshape ( len ( SMRWW ) , 6 )
print SMRWW2
resultados_fuerzapb = [ ]
for i in range ( len ( SMR )) :
resultados_fuerzapb = resultados_fuerzapb +
[ dot ( K_Rtodos [ i ] , SMR [ i ] . reshape (6 , 1 )) ]
print resultados_fuerzapb
restar_altotal = Fuerzas_nequivalentes - Fuerzas_puntuales
SMR1 = array ( [ [ 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 ,
168
0 . 000000 , 0 . 000000 ]
for i in range ( len ( ordenamiento_ff )) ] )
WNN = WP . reshape ( len ( WP ) / 6 . 00 , 6 . 00 )
for i in range ( len ( ordenamiento_ff )) :
for j in range ( len ( WNN )) :
if ordenamiento_ff [ i ] [ 0 ] = = WNN [ j ] [ 0 ] and
ordenamiento_ff [ i ] [ 1 ] = = WNN [ j ] [ 1 ] and
ordenamiento_ff [ i ] [ 2 ] = = WNN [ j ] [ 2 ] and
ordenamiento_ff [ i ] [ 3 ] = = WNN [ j ] [ 3 ] and
ordenamiento_ff [ i ] [ 4 ] = = WNN [ j ] [ 4 ] and
ordenamiento_ff [ i ] [ 5 ] = = WNN [ j ] [ 5 ] :
SMR1 [ i ] [ 0 ] = ordenamiento_ff [ i ] [ 0 ]
SMR1 [ i ] [ 1 ] = ordenamiento_ff [ i ] [ 1 ]
SMR1 [ i ] [ 2 ] = ordenamiento_ff [ i ] [ 2 ]
SMR1 [ i ] [ 3 ] = ordenamiento_ff [ i ] [ 3 ]
SMR1 [ i ] [ 4 ] = ordenamiento_ff [ i ] [ 4 ]
SMR1 [ i ] [ 5 ] = ordenamiento_ff [ i ] [ 5 ]
else :
SMR1 [ i ] [ 0 ] = 0 . 000000000
SMR1 [ i ] [ 1 ] = 0 . 000000000
SMR1 [ i ] [ 2 ] = 0 . 000000000
SMR1 [ i ] [ 3 ] = 0 . 000000000
SMR1 [ i ] [ 4 ] = 0 . 000000000
SMR1 [ i ] [ 5 ] = 0 . 000000000
SMR2 = array ( [ [ 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 ,
0 . 000000 , 0 . 000000 ]
for i in range ( len ( ordenamiento_ff )) ] )
for i in range ( len ( ordenamiento_ff )) :
for j in range ( 6 ) :
SMR2 [ i ] [ j ] = SMR2 [ i ] [ j ] + restar_altotal [ SMR1 [ i ] [ j ] ]
fuerzas_bfinal = [ ]
for i in range ( len ( ordenamiento_ff )) :
169
Figura 8.14: Tabla de Resultados para el clculo de Fuerzas Internas del programa
Femax.
8.1.5.
Esta subrutina es encargada del clculo de los grficos de los esquemas usados en los acapites anteriores de las subrutinas anteriores ,esta parte del programa esta programada con la librera de Matplotlib,una librera usada para
grficos de gran capacidad la cual nos ayudaran para graficar las funciones de
Cortantes,Momentos,Deformadas y giros, la cual queda establecida por medio
de las funciones de forma.
170
N1
N2
N3
N4
N5
(u1 ) +
(v1 ) +
(1 ) +
(u2 ) +
(v2 )
x
x
x
x
x
N6
0
+
(2 ) + Ri (x, l)
x
2u
2 N1
2 N2
2 N3
=
(u
)
+
(v
)
+
(1 ) +
1
1
x2
x2
x2
x2
2 N6
00
(
)
+
R
(x,
l)
+
2
i
x2
3 N1
3 N2
3 N3
3u
(u
)
+
(v
)
+
(1 ) +
Vi =EI 3 =
1
1
x
x3
x3
x3
3 N5
3 N6
000
+
(v
)
+
(2 ) + Ri (x, l)
2
3
3
x
x
Mi =EI
(8.19)
2 N4
2 N5
(u
)
+
(v2 )
2
x2
x2
(8.20)
3 N4
(u2 )
x3
(8.21)
Algoritmo de Graficas de u , a_ { i } , M_ { i } , V_ { i }
#
# --------- ---------- ---------- ---------- --------- -------X=[]
for i in range ( len ( ordenamiento_ff )) :
xi = arange (0 , longitudes [ i ] ,0 . 1 )
X = X + [ xi ]
print X
VVUW = nodos_espacio . reshape ( len ( nodos_espacio ) /2 , 4 )
print ' esta mierda es : ' , VVUW
P0 = [ ]
FMMUT = zeros (( len ( VVUW ) , 1 ))
for i in range ( len ( VVUW )) :
for j in range ( len ( F4 )) :
if VVUW [ i ] [ 0 ] = = F4 [ j ] [ 0 ] and
VVUW [ i ] [ 1 ] = = F4 [ j ] [ 1 ]
and VVUW [ i ] [ 2 ] = = F4 [ j ] [ 2 ] and
171
VVUW [ i ] [ 3 ] = = F4 [ j ] [ 3 ] :
FMMUT [ i ] [ 0 ] = - Valores_FD [ j ]
print FMMUT
F_DD = FMMUT
print F_DD
Form = [ ]
for i in range ( len ( ordenamiento_ff )) :
Form = Form + [ Forma_GG ( X [ i ] , longitudes [ i ] ,
C3_Materiales [ i ] [ 1 ] , C3_Materiales [ i ] [ 0 ] , F_DD [ i ] ) ]
DEFF = [ ]
for i in range ( len ( ordenamiento_ff )) :
DEFF = DEFF + [ Form [ i ] . N_1 () * SMRWW2 [ i ] [ 0 ] + Form [ i ] . N_2 ()
* SMRWW2 [ i ] [ 1 ] +
Form [ i ] . N_3 () * SMRWW2 [ i ] [ 2 ] + Form [ i ] . N_4 ()
* SMRWW2 [ i ] [ 3 ] +
Form [ i ] . N_5 () * SMRWW2 [ i ] [ 4 ] + Form [ i ] . N_6 ()
* SMRWW2 [ i ] [ 5 ] +
Form [ i ] . R_1 () ]
print DEFF
DEFG = [ ]
for i in range ( len ( ordenamiento_ff )) :
DEFG = DEFG + [ ( Form [ i ] . W_1 () * SMRWW2 [ i ] [ 0 ]
+ Form [ i ] . W_2 () * SMRWW2 [ i ] [ 1 ] + Form [ i ] . W_3 ()
* SMRWW2 [ i ] [ 2 ]
+ Form [ i ] . W_4 () * SMRWW2 [ i ] [ 3 ] + Form [ i ] . W_5 ()
* SMRWW2 [ i ] [ 4 ]
+ Form [ i ] . W_6 () * SMRWW2 [ i ] [ 5 ] + Form [ i ] . R_2 ()) ]
print DEFG
Momenx = [ ]
for i in range ( len ( ordenamiento_ff )) :
Momenx = Momenx + [ - 1 * ( Form [ i ] . M_1 () * SMRWW2 [ i ] [ 0 ]
+ Form [ i ] . M_2 () * SMRWW2 [ i ] [ 1 ] + Form [ i ] . M_3 ()
* SMRWW2 [ i ] [ 2 ]
+ Form [ i ] . M_4 () * SMRWW2 [ i ] [ 3 ] + Form [ i ] . M_5 ()
172
* SMRWW2 [ i ] [ 4 ]
+ Form [ i ] . M_6 () * SMRWW2 [ i ] [ 5 ] + Form [ i ] . R_3 ()) ]
print Momenx
Cort = [ ]
for i in range ( len ( ordenamiento_ff )) :
Cort = Cort + [ Form [ i ] . V_1 () * SMRWW2 [ i ] [ 0 ] +
Form [ i ] . V_2 () * SMRWW2 [ i ] [ 1 ] + Form [ i ] . V_3 ()
* SMRWW2 [ i ] [ 2 ] +
Form [ i ] . V_4 () * SMRWW2 [ i ] [ 3 ] + Form [ i ] . V_5 ()
* SMRWW2 [ i ] [ 4 ] +
Form [ i ] . V_6 () * SMRWW2 [ i ] [ 5 ] + Form [ i ] . R_4 () ]
print Cort
print longitudes
# -------------------------------------------------#
#
#
# -------------------------------------------------def Diagramasfinales () :
def Diagrama () :
fiig = figure ( 1 )
TDef = fiig . add_subplot ( 221 )
title ( r ' $D_ { i } $ ')
grid ( True )
xlabel ( r ' $x_ { i } $ ')
ylabel ( r '$ \ delta$ ')
TDef . plot ( X [ m . get () ] , DEFF [ m . get () ] )
TGir = fiig . add_subplot ( 222 )
title ( r '$ \ theta_ { i } $ ')
xlabel ( r ' $x_ { i } $ ')
ylabel ( r '$ \ theta_ { i } $ ')
grid ( True )
TGir . plot ( X [ m . get () ] , DEFG [ m . get () ] )
TMom = fiig . add_subplot ( 223 )
173
174
ventana_Deformaciones . mainloop ()
def Matriz_RRIG () :
ventana_matrix = Toplevel ()
ventana_matrix . geometry ( ' 600x600 + 0 + 0 ')
ventana_matrix . title ( ' Matriz de Rigidez ')
textos = Canvas ( ventana_matrix , width = 400 , height = 400 ,
scrollregion = (0 ,0 , 2000 , 2000 ) ,
highlightcolor = ' black ' , relief = ' solid ' , background = ' white ')
for i in range ( len ( KT )) :
for j in range ( len ( KT )) :
textos . create_text ( 100 * i + 40 , 100 * j + 40 , text = KT [ i ] [ j ] )
for i in range ( len ( KT )) :
textos . create_text ( 100 * i + 40 , 10 , text = i +1 , fill = ' red ')
textos . create_text ( 10 , 100 * i + 40 , text = i +1 , fill = ' red ')
textos01 = Label ( ventana_matrix ,
text = ' CALCULO DE MATRIZ GENERAL ' , fg = ' red ')
textos01 . grid ( row =1 , column = 3 )
scrollY = Scrollbar ( ventana_matrix ,
orient = VERTICAL , command = textos . yview )
scrollY . grid ( row =1 , column =2 , sticky = N + S )
scrollX = Scrollbar ( ventana_matrix ,
175
176
ventana_matrixD . mainloop ()
ventana_Resultados = Toplevel ()
ventana_Resultados . geometry ( ' 600x400 + 0 + 0 ')
ventana_Resultados . title ( ' Resultados de Analisis ')
texto_01 = Label ( ventana_Resultados ,
text = ' Deformaciones Internas : ' , fg = ' blue ' ). place ( x = 20 , y = 20 )
Boton01 = Button ( ventana_Resultados , text = ' Ejecutar ' , fg = ' red ' ,
command = Deformaciones_FFU ). place ( x = 180 , y = 20 )
texto_02 = Label ( ventana_Resultados ,
text = ' Matriz de rigidez ' , fg = ' blue ' ). place ( x = 20 , y = 50 )
Boton02 = Button ( ventana_Resultados ,
text = ' Ejecutar ' , fg = ' red ' ,
command = Matriz_RRIG ). place ( x = 180 , y = 50 )
texto03 = Label ( ventana_Resultados ,
text = ' Matriz de Rigidez Simplificada ' , fg = ' blue ' ). place ( x = 20 , y = 80 )
Boton03 = Button ( ventana_Resultados , text = ' Ejecutar ' ,
command = Matriz_DMM , fg = ' red ' ). place ( x = 180 , y = 80 )
texto04 = Label ( ventana_Resultados ,
text = ' Fuerzas Internas ' , fg = ' blue ' ). place ( x = 20 , y = 110 )
Boton04 = Button ( ventana_Resultados , text = ' Ejecutar ' ,
command = Fuer_Int , fg = ' red ' ). place ( x = 180 , y = 110 )
texto05 = Label ( ventana_Resultados ,
text = ' Diagramas ' , fg = ' blue ' ). place ( x = 20 , y = 140 )
Boton05 = Button ( ventana_Resultados , text = ' ejecuta ' ,
command = Diagramasfinales , fg = ' red ' ). place ( x = 180 , y = 140 )
ventana_Resultados . mainloop ()
177
Figura 8.15: Grfica de Resultados del Anlisis del Femax de ui ,i ,Mi ,Vi .
Con esta subrutina se termina el programa femax.
178
CONCLUSIONES Y
RECOMENDACIONES.
179
Captulo 9
Conclusiones y Recomendaciones.
9.1.
Conclusiones.
Se pudo ver que al ser los resultados obtenidos por el programa FEMAX,en contra partida de los resultados obtenidos por el Software Comercial SAP V14 hay un parecido de 99.8 % por lo tanto se puede concluir
que los programas comerciales trabajan con el mtodo de elementos finitos y nuestra tesis hiptesis ha sido resuelta como cierta.
9.2.
(9.1)
Recomendaciones.
El uso de las funciones de forma son fundamentales en el anlisis estructurales del mtodo de elementos finitos y se recomienda el estudio
minucioso de ello ya que es tambin un sistema universal para el clculo
de las grficas y clculo de ui , i , Mi , Vi en cualquier punto estructural.
181
ANEXOS.
182
Captulo 10
Codigo Fuente del Programa
Femax.
# PROGRAMACION FEMAX
from matplotlib import *
from pylab import *
import matplotlib . pylab as plt
from Tkinter import *
from Matrix2D import *
import tkMessageBox
import time
from apoyos import *
from Fuerza2D import *
from Formax import *
# ---------------------------------------------C=[]
C3_Materiales = [ ]
longitudes = [ ]
K_todos = [ ]
u=[]
u2 = [ ]
nodos_espacio = None
T=[]
183
K_Rtodos = [ ]
ordenamiento = None
puntos = [ ]
tipo_apoyos = None
codigo_apoyos = None
tipo_apoyos1 = None
codigo_apoyos1 = None
Ubicaciones_Universales = None
Puntos_FuerzasP = None
Puntos_AFuerzasP = None
Puntos_FuerzasP1 = None
Puntos_AFuerzasP1 = None
inicio_FuerzasD = None
linea_FuerzasD = [ ]
F4 = [ ]
Valores_FD = [ ]
longitudesFD = [ ]
# -------------------------------------------def Fuerzas_puntuales () :
global Puntos_AFuerzasP
global Puntos_FuerzasP
global Puntos_FuerzasP1
global Puntos_AFuerzasP1
Puntos_FuerzasP = [ ]
Puntos_AFuerzasP = [ ]
def dibujar_Fuerzas ( evento ) :
global Puntos_FuerzasP1
global Puntos_AFuerzasP1
global Puntos_FuerzasP
global Puntos_AFuerzasP
if selec01 . get () = = 1 :
val = selecP01 . get ()
fuerzas ( evento , dibujo , val ). Fuerza_VP ()
Puntos_FuerzasP = Puntos_FuerzasP + [0 , val , 0 ]
Puntos_AFuerzasP = Puntos_AFuerzasP + [ ( evento . x - 50 ) / 50 ,
184
( 550 - evento . y ) / 50 ]
if selec01 . get () = = 2 :
val = selecP02 . get ()
fuerzas ( evento , dibujo , val ). Fuerza_VN ()
Puntos_FuerzasP = Puntos_FuerzasP + [0 , - val , 0 ]
Puntos_AFuerzasP = Puntos_AFuerzasP + [ ( evento . x - 50 ) / 50 ,
( 550 - evento . y ) / 50 ]
if selec01 . get () = = 3 :
val = selecP03 . get ()
fuerzas ( evento , dibujo , val ). Fuerza_HP ()
Puntos_FuerzasP = Puntos_FuerzasP + [ val ,0 , 0 ]
Puntos_AFuerzasP = Puntos_AFuerzasP + [ ( evento . x - 50 ) / 50 ,
( 550 - evento . y ) / 50 ]
if selec01 . get () = = 4 :
val = selecP04 . get ()
fuerzas ( evento , dibujo , val ). Fuerza_HN ()
Puntos_FuerzasP = Puntos_FuerzasP + [ - val ,0 , 0 ]
Puntos_AFuerzasP = Puntos_AFuerzasP + [ ( evento . x - 50 ) / 50 ,
( 550 - evento . y ) / 50 ]
u = array ( Puntos_FuerzasP )
s = len ( u )
u2 = array ( Puntos_AFuerzasP )
s1 = len ( u2 )
Puntos_FuerzasP1 = u . reshape ( s /3 , 3 )
Puntos_AFuerzasP1 = u2 . reshape ( s1 /2 , 2 )
print Puntos_FuerzasP1
print Puntos_AFuerzasP1
ventana_FuerzasP = Toplevel ()
ventana_FuerzasP . title ( ' Fuerzas Puntuales ')
ventana_FuerzasP . geometry ( ' 500x300 + 0 + 0 ')
ventana_FuerzasP . minsize ( 500 , 300 )
# --------------------------------------------------IM_FVP = PhotoImage ( file = ' FPV . gif ')
185
186
187
188
189
# --- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---Im_Fijos = PhotoImage ( file = ' fijo . gif ')
Im_Empotrados = PhotoImage ( file = ' empotrado . gif ')
Im_Moviles = PhotoImage ( file = ' movil . gif ')
# --- ---- --- ---- ---- --- ---- --- ---- ---- --- ---- ---- --- ---- ---- --- ---- --- ventana_apoyos . title ( ' Tipo - Apoyos ')
selec = IntVar ()
Texto_Empotrados = Label ( ventana_apoyos ,
text = ' Apoyo Empotrado ' ). place ( x = 100 , y = 20 )
Texto_Fjos = Label ( ventana_apoyos ,
text = ' Apoyo Fijo ' ). place ( x = 100 , y = 60 )
Texto_Moviles = Label ( ventana_apoyos ,
text = ' Apoyo Moviles ' ). place ( x = 100 , y = 100 )
Empotrados = Radiobutton ( ventana_apoyos ,
image = Im_Empotrados , value =1 , variable = selec )
Empotrados . place ( x = 20 , y = 20 )
Fijos = Radiobutton ( ventana_apoyos ,
image = Im_Fijos , value =2 , variable = selec )
Fijos . place ( x = 20 , y = 60 )
Moviles = Radiobutton ( ventana_apoyos ,
image = Im_Moviles , value =3 , variable = selec )
Moviles . place ( x = 20 , y = 100 )
# --- --- ---- --- --- ---- --- --- ---- --- ---- --- --- ---- --- --- ---- --- --- ---- --- #
# --- --- ---- --- --- ---- --- --- ---- --- ---- --- --- ---- --- --- ---- --- --- ---- --- -
botton_01 = Button ( ventana_apoyos , text = ' Ejecutar ' , fg = ' blue ' ). place ( x = 200 , y =
dibujo . bind ( ' < Button -1 > ' , apoyos_general )
ventana_apoyos . geometry ( ' 400x300 + 0 + 0 ')
ventana_apoyos . minsize ( 400 , 300 )
ventana_apoyos . mainloop ()
def Materiales_Calculo () :
global u2
global numero
global C3_Materiales
190
global nodos_espacio
nodos_espacio = u2
ventana_Materiales = Toplevel ()
ventana_Materiales . title ( ' Materiales de Elementos ')
lista_1 = [ ' Inercia '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
lista_2 = [ ' Elasticidad '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
lista_3 = [ ' Area '+ str ( i ) for i in range ( len ( u2 ) / 2 ) ]
ventana_Materiales . geometry ( ' 800x300 + 0 + 0 ')
numero = len ( u2 ) / 2
for i in range ( len ( u2 ) / 2 ) :
lista_1 [ i ] = DoubleVar ()
lista_2 [ i ] = DoubleVar ()
lista_3 [ i ] = DoubleVar ()
for i in range ( len ( u2 ) / 2 ) :
u1 = Label ( ventana_Materiales , text = ' Inercia '+ str ( i ) ,
fg = ' red ' ). place ( x =0 , y = 20 + i * 20 )
u2 = Label ( ventana_Materiales , text = ' Elasticidad '+ str ( i ) ,
fg = ' red ' ). place ( x = 200 , y = 20 + i * 20 )
u3 = Label ( ventana_Materiales , text = ' Area '+ str ( i ) ,
fg = ' red ' ). place ( x = 400 , y = 20 + i * 20 )
for j in range ( numero ) :
Entrada_Inercia = Entry ( ventana_Materiales ,
textvariable = lista_1 [ j ] , width = 10 ). place ( x = 100 , y = 20 + j * 20 )
Entrada_Elasticidad = Entry ( ventana_Materiales ,
textvariable = lista_2 [ j ] , width = 10 ). place ( x = 300 , y = 20 + j * 20 )
Entrada_Area = Entry ( ventana_Materiales ,
textvariable = lista_3 [ j ] , width = 10 ). place ( x = 500 , y = 20 + j * 20 )
# --- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- C_Materiales = None
def guardar_datos () :
global C_Materiales
global C3_Materiales
C_Materiales = [ ]
for t in range ( numero ) :
191
C_Materiales = C_Materiales +
[ lista_1 [ t ] . get () ] + [ lista_2 [ t ] . get () ] + [ lista_3 [ t ] . get () ]
C2_Materiales = array ( C_Materiales )
C3_Materiales = C2_Materiales . reshape ( numero , 3 )
print C3_Materiales
# ------------------------------- --------------------# BOTON DE GUARDAR CARACTERISTICAS DE LOS ELEMENTOS
# -------------- --------------- --------------- ---------Boton01 = Button ( ventana_Materiales ,
text = ' GUARDAR ' , command = guardar_datos ). place ( x = 600 , y = 250 )
# ------- ------- -------- ------- -------- ------- -------- -----# ------ ------- ------- ------ ------- ------- ------- ------ -----#
# FUNCIONES DE CALCULO DE LA MATRIZ DE RIGIDEZ - CALCULO
#
#
# ------ ------ ------ ------ ------ ------ ------ ------ ------- ----def nodos_calculo () :
global Valores_FD
global F4
global Puntos_FuerzasP1
global Puntos_AFuerzasP1
global codigo_apoyos1
global tipo_apoyos1
global ordenamiento
global nodos_espacio
global C
global K_todos
global C3_Materiales
global T
global K_Rtodos
global longitudesFD
numero_datos = len ( nodos_espacio )
numero_barras = numero_datos / 2
192
C=[]
U=[]
lista_resumen = nodos_espacio . tolist ()
for i in lista_resumen :
if i not in C :
C=C+[i]
print C
for s in range ( numero_barras ) :
K_local = Matrix2D ( C3_Materiales [ s ] [ 2 ] ,
C3_Materiales [ s ] [ 1 ] , C3_Materiales [ s ] [ 0 ] , longitudes [ s ] ). constructor ()
K_todos = K_todos + [ K_local ]
Coord_Barras = nodos_espacio . reshape ( numero_barras , 4 )
for u in range ( numero_barras ) :
transformada_union = Transformada ( Coord_Barras [ u ] [ 0 ] ,
Coord_Barras [ u ] [ 1 ] , Coord_Barras [ u ] [ 2 ] , Coord_Barras [ u ] [ 3 ] ). T ()
T = T + [ transformada_union ]
for r in range ( numero_barras ) :
K_ultimo_1 = dot ( K_todos [ r ] ,T [ r ] )
K_ultimo_2 = dot ( transpose ( T [ r ] ) , K_ultimo_1 )
K_Rtodos = K_Rtodos + [ K_ultimo_2 ]
ordenamiento = { } # Biblioteca de calculo
ordenamiento_primario = [ ] # ordenamiento final de las barras
# ----------- ------------ ------------ ----------- --------# MATRIZ DE ORDENAMIENTO - - - - - > PI
# ----------- ------------ ------------ ----------- --------ordenamiento [ i ] = C [ i ]
print ordenamiento
for i in range ( numero_datos ) :
for j in range ( len ( C )) :
if ordenamiento [ j ] [ 0 ] = = nodos_espacio [ i ] [ 0 ]
and ordenamiento [ j ] [ 1 ] = = nodos_espacio [ i ] [ 1 ] :
ordenamiento_primario . append ( j )
print ordenamiento_primario
ordenamiento2 = array ( ordenamiento_primario )
193
ESTRUCTURA
k [ PI [ i ][ n ] , PI [ j ][ n ]] < - - - - - - - - - - - - - - - - - - K { n } [ i ][ n ]
# -- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- KT = zeros (( 3 * len ( C ) , 3 * len ( C )))
for i in range ( 6 ) :
for j in range ( 6 ) :
for n in range ( len ( K_Rtodos )) :
KT [ matriz_ordenamiento [ i ] [ n ] ]
[ matriz_ordenamiento [ j ] [ n ] ] =
KT [ matriz_ordenamiento [ i ] [ n ] ]
[ matriz_ordenamiento [ j ] [ n ] ] + K_Rtodos [ n ] [ i ] [ j ]
print KT
# --- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- ---- --- #
#
194
# --- --- --- --- --- --- ---- --- --- --- --- --- --- ---- --- --- --- --- --- ---- --- --- --- GDL01 = [ ]
for i in range ( len ( C )) :
for j in range ( len ( tipo_apoyos1 )) :
if ordenamiento [ i ] [ 0 ] = = tipo_apo
yos1 [ j ] [ 0 ] and ordenamiento [ i ] [ 1 ] = = tipo_apoyos1 [ j ] [ 1 ] :
GDL01 . append ( i )
GDL02 = array ( GDL01 )
GDL03 = GDL02 + 1
GDL04 = GDL03 * 3
MQ = array ( [ range ( GDL04 [ i ] -3 , GDL04 [ i ] )
for i in range ( len ( GDL04 )) ] )
EL = MQ * codigo_apoyos1
K_reducida_inicial = delete ( KT , EL , axis = 0 )
K_reducida_final = delete
( K_reducida_inicial , EL , axis = 1 )# calculo de K_reducida
print K_reducida_final
# ------------------- --------------------- ------------#
# Programacion de Calculo de Fuerzas Puntuales
#
# ----------- ------------ ------------ ----------- --------esquema_fuerzasp = [ ]
for i in range ( len ( ordenamiento )) :
for j in range ( len ( Puntos_AFuerzasP1 )) :
if ordenamiento [ i ] [ 0 ] = = Puntos_AFuerzasP1 [ j ] [ 0 ]
and ordenamiento [ i ] [ 1 ] = = Puntos_AFuerzasP1 [ j ] [ 1 ] :
esquema_fuerzasp . append ( i )
print esquema_fuerzasp
esquema_fuerzasp1 = array ( esquema_fuerzasp )
esquema_fuerzasp2 = ( esquema_fuerzasp1 + 1 ) * 3
WR = array ( [ range ( esquema_fuerzasp2 [ i ] -3 ,
esquema_fuerzasp2 [ i ] ) for i in range ( len ( esquema_fuerzasp2 )) ] )
WQ = WR . reshape ( len ( WR ) *3 , 1 )
Fuerzas_puntuales = zeros (( len ( ordenamiento ) *3 , 1 ))
195
#
# ------- ------- -------- ------- -------- ------- -------- -----F5 = F4 . reshape ( len ( F4 ) *2 , 2 )
esquema_FuerzasD = [ ]
for i in range ( len ( ordenamiento )) :
for j in range ( len ( F5 )) :
# -- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- -#
#
196
# -- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -Fuerzas_nequivalentes = Fuerzas_puntuales - Fuerzas_Distribuidas
Fuerzas_NodD = delete ( Fuerzas_nequivalentes , EL , axis = 0 )
print Fuerzas_NodD
# -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- #
#
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- --- -Deformaciones01 = dot ( inv ( K_reducida_final ) , Fuerzas_NodD )
print Deformaciones01
WUP = range (0 , len ( Fuerzas_nequivalentes ))
WUP1 = array ( WUP )
WUP2 = WUP1 . reshape ( len ( WUP ) , 1 )
WUP3 = delete ( WUP2 , EL , axis = 0 )
Deformaciones_totales = zeros (( len ( ordenamiento ) *3 , 1 ))
for i in range ( len ( WUP3 )) :
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- --- -#
#
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- --- -for i in range ( len ( us01 )) :
sx = us01 [ i ] . reshape (1 , 6 )
ordenamiento_fuerzasU = ordenamiento_fuerzasU + [ sx ]
197
print SMR
resultados_fuerzapb = [ ]
for i in range ( len ( SMR )) :
resultados_fuerzapb = resultados_fuerzapb +
[ dot ( K_Rtodos [ i ] , SMR [ i ] . reshape (6 , 1 )) ]
print resultados_fuerzapb
restar_altotal = Fuerzas_nequivalentes - Fuerzas_puntuales
SMR1 = array ( [ [ 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 , 0 . 000000 ]
for i in range ( len ( ordenamiento_ff )) ] )
WNN = WP . reshape ( len ( WP ) / 6 . 00 , 6 . 00 )
for i in range ( len ( ordenamiento_ff )) :
for j in range ( len ( WNN )) :
if ordenamiento_ff [ i ] [ 0 ] = = WNN [ j ] [ 0 ] and
ordenamiento_ff [ i ] [ 1 ] = = WNN [ j ] [ 1 ] and
ordenamiento_ff [ i ] [ 2 ] = = WNN [ j ] [ 2 ] and
ordenamiento_ff [ i ] [ 3 ] = = WNN [ j ] [ 3 ] and
198
for j in range ( 6 ) :
SMR2 [ i ] [ j ] = SMR2 [ i ] [ j ] + restar_altotal [ SMR1 [ i ] [ j ] ]
fuerzas_bfinal = [ ]
for i in range ( len ( ordenamiento_ff )) :
Algoritmo de Graficas de u , a_ { i } , M_ { i } , V_ { i }
199
# -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- #
#
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- --- -def Diagramasfinales () :
def Diagrama () :
fiig = figure ( 1 )
200
textoMM = Label ( ven01 , text = ' Elija la Barra : ' , fg = ' blue ' ). place ( x = 20 , y = 2
m = IntVar ()
EntradaMM = Entry ( ven01 , textvariable =m , width = 10 ). place ( x = 100 , y = 20 )
BotonMM = Button ( ven01 , text = ' ejecuta ' , command = Diagrama ). place ( x = 200 , y = 2
ven01 . mainloop ()
def Fuer_Int () :
def VFuerzas01 () :
ventana_alterna01 = Toplevel ()
201
ventana_Deformaciones . mainloop ()
def Matriz_RRIG () :
ventana_matrix = Toplevel ()
ventana_matrix . geometry ( ' 600x600 + 0 + 0 ')
ventana_matrix . title ( ' Matriz de Rigidez ')
textos = Canvas ( ventana_matrix , width = 400 ,
height = 400 , scrollregion = (0 ,0 , 2000 , 2000 ) ,
highlightcolor = ' black ' , relief = ' solid ' , background = ' white ')
for i in range ( len ( KT )) :
for j in range ( len ( KT )) :
textos . create_text ( 100 * i + 40 , 100 * j + 40 , text = KT [ i ] [ j ] )
for i in range ( len ( KT )) :
textos . create_text ( 100 * i + 40 , 10 , text = i +1 , fill = ' red ')
textos . create_text ( 10 , 100 * i + 40 , text = i +1 , fill = ' red ')
textos01 = Label ( ventana_matrix , text = ' CALCULO DE MATRIZ GENERAL ' , fg = ' re
textos01 . grid ( row =1 , column = 3 )
202
203
texto_01 = Label ( ventana_Resultados , text = ' Deformaciones Internas : ' , fg = ' blu
Boton01 = Button ( ventana_Resultados , text = ' Ejecutar ' ,
fg = ' red ' , command = Deformaciones_FFU ). place ( x = 180 , y = 20 )
texto_02 = Label ( ventana_Resultados ,
text = ' Matriz de rigidez ' , fg = ' blue ' ). place ( x = 20 , y = 50 )
Boton02 = Button ( ventana_Resultados , text = ' Ejecutar '
, fg = ' red ' , command = Matriz_RRIG ). place ( x = 180 , y = 50 )
204
else :
tkMessageBox . showinfo ( message = ' Por Favor poner Datos ')
ventana_grilla = Toplevel ()
ventana_grilla . title ( ' DIBUJAR GRILLA P / ESQUEMA ')
ventana_grilla . minsize ( 500 , 200 )
ventana_grilla . geometry ( ' 500x200 + 0 + 0 ')
# ----------- ------------ ------------ ----------- --------nx = IntVar ()
mx = DoubleVar ()
ny = IntVar ()
my = DoubleVar ()
# ------ ------- ------- ------ ------- ------- ------- ------ -----texto_principal = Label ( ventana_grilla ,
text = ' COORDENADAS EN EL EJE X : Y ' ). place ( x = 100 , y = 0 )
Texto_01 = Label ( ventana_grilla , text = 'N : Ejes - X ' ). place ( x = 10 , y = 20 )
texto_02 = Label ( ventana_grilla , text = ' Dist - Ejes - X ' ). place ( x = 250 , y = 20 )
texto03 = Label ( ventana_grilla , text = 'N : Ejes - Y ' ). place ( x = 10 , y = 60 )
texto04 = Label ( ventana_grilla , text = ' Dist - Ejes - Y ' ). place ( x = 250 , y = 60 )
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- Ejes_Horizontales = Entry ( ventana_grilla , textvariable = nx ). place ( x = 80 , y = 20 )
# -- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- --- -- -- -- Ejes_Verticales = Entry ( ventana_grilla , textvariable = ny ). place ( x = 80 , y = 60 )
205
def Borrador () :
dibujo . delete ( ALL )
def dibuja_barra () :
tkMessageBox . showinfo ( message = ' Poner el Primero y Segundo punto . ')
global puntos
global longitudes
global u2
global u
start = None
def punto ( evento ) :
global start
global u
start = [ evento .x , evento . y ]
def punto2 ( evento ) :
global puntos
global longitudes
global start
global u
global u2
if start is not None :
206
x = start [ 0 ]
y = start [ 1 ]
dibujo . create_line (x ,y , evento .x , evento .y , width = 4 .5 ,
arrow = LAST , activefill = ' gray ' , tag = ( ' linea1 ' ))
dibujo . itemconfig ( ' linea1 ' , fill = ' red ')
u = u + [ ( x - 50 ) / 50 ,( 550 - y ) / 50 ,( evento . x - 50 ) / 50 ,( 550 - evento . y ) / 50 ]
longitudes = longitudes + [ norm ( array ( [ ( evento . x - 50 ) / 50 ,
( 550 - evento . y ) / 50 ] ) - array ( [ ( x - 50 ) / 50 ,( 550 - y ) / 50 ] )) ]
start = None
X , Y = None , None
def coordenadas ( evento ) :
global Ubicaciones_Universales
global X , Y
kill_XY ()
X = dibujo . create_line ( evento .x ,0 , evento .x , 1000 , dash = [3 , 2 ] , tags = ' no ' , fill = '
Y = dibujo . create_line (0 , evento .y , 1000 , evento .y , dash = [3 , 2 ] , tags = ' no ' , fill = '
global cuadrado
207
( Ubicaciones_Universales [ s ] [ 0 ] - 10 , Ubicaciones_Universales [ s ] [
- 10 , Ubicaciones_Universales [ s ] [ 0 ]
+ 10 , Ubicaciones_Universales [ s ] [ 1 ]
+ 10 , outline = ' blue ' , tag = ' Cuadrado_Identificado '+ str ( s ))
else :
dibujo . delete ( ' Cuadrado_Identificado '+ str ( s ))
# --- --- --- --- ---- --- --- ---- --- --- --- ---- --- --- --- ---- --- --- --- ---- --- --- ventana = Tk ()
ventana . title ( ' FEMAX ')
ventana . minsize ( 1200 , 800 )
ventana . geometry ( ' 1200x800 + 0 + 0 ')
barra_dibujo = Frame ( ventana , width = 200 , height = 100 )
barra_dibujo . grid ( row =0 , column = 4 )
# --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---- --- --- --- --- --- --- --- -
dibujo = Canvas ( ventana , width = 950 , height = 600 , scrollregion = ( - 2000 , - 2000 , 2000 , 200
highlightcolor = ' black ' , relief = ' solid ' , background = ' white ')
# -- --- -- --- -- --- --- -- --- -- --- -- --- --- -- --- -- --- --- -- --- -- --- -- --- --- -- --- -- -dibujo . bind ( ' < Motion > ' , coordenadas )
208
flecha_X = dibujo . create_line ( 50 , 550 , 100 , 550 , arrow = LAST , fill = ' blue ')
X_sumate = dibujo . create_text ( 125 , 550 , text = ' Eje_X ' , fill = ' blue ')
flecha_Y = dibujo . create_line ( 50 , 550 , 50 , 500 , arrow = LAST , fill = ' blue ')
X_sumate = dibujo . create_text ( 50 , 480 , text = ' Eje_Y ' , fill = ' blue ')
# -- --- -- --- -- --- -- --- -- --- -- --- -- --- -- --- --- -- --- -- --- -- --- -- --- -- --- -- --- -- dibujo . grid ( row =1 , column = 1 )
scrollY = Scrollbar ( ventana , orient = VERTICAL , command = dibujo . yview )
scrollY . grid ( row =1 , column =2 , sticky = N + S )
scrollX = Scrollbar ( ventana , orient = HORIZONTAL , command = dibujo . xview )
scrollX . grid ( row =2 , column =1 , sticky = E + W )
dibujo [ ' xscrollcommand '] = scrollX . set
dibujo [ ' yscrollcommand '] = scrollY . set
# -- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -- --- -- -- --- -#
#
# -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- ''' TITULO DEL PROGRAMA EN GENERAL '''
Texto_General = Label ( ventana ,
# -- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- -- -- --- -- -- --- -- -- --- -Im_barra = PhotoImage ( file = ' frame . gif ')
Im_grilla = PhotoImage ( file = ' grilla . gif ')
Im_Borrador = PhotoImage ( file = ' borrador . gif ')
Im_Materiales = PhotoImage ( file = ' materiales_damier . gif ')
Im_Procesos = PhotoImage ( file = ' proceso . gif ')
Im_Apoyosgeneral = PhotoImage ( file = ' movil . gif ')
Im_Fuerzas1 = PhotoImage ( file = ' FP . gif ')
Im_Fuerzas2 = PhotoImage ( file = ' FD . gif ')
# -- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- -- --- -- -- --- -- -- --- -- -- --- -- --- -- barra_nodal = Button ( barra_dibujo , image = Im_barra ,
command = dibuja_barra , width = 30 , height = 30 ). place ( x = 20 , y = 20 )
209
210
Captulo 11
Figuras y Otros.
211
212
213
Bibliografa
[1] H. Partl: Perez Villar Luis Alberto,Tesis Anlisis de Estructuras por Mtodo de
Elementos finitos Asistido por computadora IPN,(2003)
[2] H. partl: O.CZienkiewichz-R.LTaylor,El Mtodo de Elementos Finitos,McGrawHill,(1998)
[3] H. partll: Eugenio Oate,Clculo de Estructuras por el mtodo de elementos finitos Anlisis Esttico Lineal,C.I de Mtodos Numricos en Ingeniera UPC,(1992)
[4] H. partll: Sergio Gallegos Czares,Anlisis de Slidos y Estructural mediante el
mtodo de Elementos finitos,Tecnolgico de Monterrey-LIMUSA,(2008)
[5] H. partll: Sandro Tosi,Matplotlib for Python Develops,Birmingham-Noviembre
2009.
[6] H.
partll:
Egor
P.Popov(University
of
California-Berkeley),Mecnica
de
Slidos,Educational-Person,Edition(2000)
[7] H. partll: Manuel Vasquez,Eloiza Lopez,El Mtodo de Elementos Finitos Aplicado al anlisis Estructural.
[8] H. partll: Arturo Tenna Colunga ,Anlisis de Estructuras con Mtodos Matriciales,Limusa Mxico-2007.
[9] H. partll: Manuel Casado Martin,Lenguaje de Programacin Python Orientado a
Objetos,Santiago Gualadajara Perez,Universidad de Salamanca.
214
215