Vous êtes sur la page 1sur 13

2012

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA
MAESTRIA INGENIERIA ESTRUCTURAL
UNIVERSIDAD DE EL SALVADOR
21/03/2012

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERA Y ARQUITECTURA
MAESTRA EN INGENIERA ESTRUCTURAL
ELEMENTOS FINITOS
Proyecto No. 1
Catedrtico: Dip.-Ing. Manuel de Jess Gutirrez
Alumnos: Ing. Miguel ngel Lemus Hernndez.
Ing. Carlos Eduardo Parada
Desarrollar un programa para automatizar el anlisis de armaduras planas por el mtodo de
Elementos Finitos.
Siguiendo la metodologa del Elemento Finito se ha desarrollado un programa que realiza
las siguientes funciones:

Ensamble de forma automtica de la matriz de rigidez de cualquier estructura articulada.


Ensamble de las cargas en el vector de fuerzas globales.
Introduccin de las condiciones de contorno del problema.
Resolucin del sistema de ecuaciones resultante.
Post-proceso para visualizar los resultados.

Esto se logra siguiendo el proceso mostrado en el siguiente flujograma.

INTRODUCCION
DE DATOS

RESOLUCION DE
DESPLAZAMIENTOS

ENSAMBLE DE
MATRIS DE RIGIDEZ

RESOLUCION DE
ESFUERZOS

ENSAMBLE DE CONDICIONES DE BORDE

SALIDA DE DATOS

Para la implementacin de este programa se ha utilizado el cdigo de programacin de


MATLAB, el cual es un software para la realizacin de operaciones matemticas y especficamente operaciones matriciales.

2/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

Programa para Ensamblaje y Resolucin de Estructuras Articuladas en MATLAB


Se explica el desarrollo de un programa en MATLAB que realiza las siguientes acciones:
1. Ensamblaje de forma automtica de la matriz de rigidez de cualquier estructura articulada.
2. Ensamblar las cargas en el vector de fuerzas globales.
3. Introducir las condiciones de contorno del problema.
4. Resolver el sistema de ecuaciones resultante.
5. Realizar un post-proceso para visualizar los resultados.
El organigrama del programa propuesto se muestra en la Figura 4.27, los elementos que
constituyen el programa son los siguientes:
Datos de entrada
p: vector que contiene las propiedades de cada barra, indicando el tipo de material de que
estn constituidas.
E: vector que contiene los mdulos de elasticidad o de Young para cada tipo de material.
A: vector que contiene las reas para cada tipo de barra (material).
Con: matriz de conectividad.
Cbo: matriz con las informacin de las condiciones de contorno.
P: vector de cargas externas.
x: matriz de coordenadas locales en las que se dan las coordenadas de cada uno de los nodos de la discretizacin.
Variables
ne: nmero de elementos (barras).
ngn: nmero de grados de libertad por nodo.
nne : nmero de nodos por elemento.
nn: nmero de nodos totales de la estructura.
ngt : nmero de grados de libertad totales de la estructura ngt = nn ngn.
nnb : nmero de nodos donde el desplazamiento est impuesto, es decir, nodos en los que
hay una condicin de contorno.
nnc : nmero de nodos cargados, es decir, nodos en los que se aplican fuerzas exteriores.
nec : nmero de estados de carga.
A(e): matriz de transformacin de coordenadas locales a globales.
k(e): matriz de rigidez del elemento e-nesimo.
K: matriz de rigidez de la estructura.

3/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

Funciones.
Las funciones y scripts que constituyen el programa son:
data.m: Script para la introduccin de los datos del sistema.
Amatrix.m: Funcin que genera la matriz de transformacin de coordenadas y que calcula
la longitud de las barras en funcin de las coordenadas locales.
rigid.m: Funcin que proporciona la matriz de rigidez k(e).
ensam.m: Funcin que obtiene la matriz de rigidez global de la estructura K a travs del
ensamblaje de las matrices de rigidez de todos los elementos, y que genera el vector de
fuerzas globales F a partir de los datos de cargas P.
cbound.m: Funcin que modifica tanto la matriz de rigidez de la estructura K como el vector de fuerzas globales F para que se tengan en cuenta las condiciones de contorno, y que el
sistema tenga solucin.
esfuerzos.m: Funcin mediante la cual, una vez obtenidos los desplazamientos solucin u,
obtiene las reacciones en los apoyos, las fuerzas que equilibran cada elemento, las fuerzas
aplicadas en cada nodo, y las tensiones sobre las barras.
trigrid.m: Funcin mediante la cual se dibuja tanto la estructura como su deformada numerando barras y nodos segn conveniencia.
A continuacin, se procede a describir cada una de las funciones.

La funcin data.m es un script en el que se introducen los datos de la matriz de conectividad con, la matriz con las condiciones de contorno Cbo, el vector que contiene las reas y
los mdulos de elasticidad de cada uno de los materiales (A,E), el vector que indica el tipo
de material que compone cada barra (prop), la matriz de cargas nodales (P) cuyas dimensiones son (nnc , ngn, nec), y la matriz con las coordenadas nodales (x).
La funcin Amatrix.m se encarga de calcular la matriz transformacin de coordenadas que
permiten calcular la matriz de rigidez del elemento barra en coordenadas globales. Adems
calcula la longitud de la barra en funcin de las coordenadas de los nodos.
La funcin rigid.m se encarga de calcular la matriz de rigidez de cada elemento. Recibe
como argumentos la matriz de coordenadas de los nodos x, el mdulo de elasticidad del
elemento E y su rea A.
La funcin ensam.m se encarga de calcular la matriz de rigidez global de la estructura y
adicionalmente ensambla las fuerzas en el vector de fuerzas globales.

4/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

La funcin cbound.m se encarga de modificar la matriz de rigidez y el vector de fuerzas


globales para que se cumplan las condiciones de contorno. Recibe como argumentos la matriz de rigidez global de la estructura, el vector de cargas globales, y la matriz con la informacin de las condiciones de contorno.
La Funcin esfuerzos.m, una vez obtenidos los desplazamientos, tras la resolucin del sistema, obtiene las fuerzas que equilibran cada elemento, y las fuerzas aplicadas en cada nodo incluidas las reacciones en los apoyos, y tanto las tensiones como los esfuerzos axiles a
los que estn sometidos cada una de las barras.
Script de Ejecucin
Para permitir la ejecucin y el clculo de la matriz de rigidez de un caso concreto se emplea
un script ejecucin.m que gestiona la ejecucin.
Cdigo implementado.
Se presenta el cdigo implementado de acuerdo a cada funcin y/o script.
Funcin data.m
% Numero de grados de libertad por nodo
ngn = 2;
% Vector que contiene la informacin del tipo de material que constituye
% cada barra
prop = [1 1];
% Modulos de elasticidad asociados a cada tipo de material
E = [1];
% Areas transversales asociados a cada tipo de material
A = [1];
% Condiciones de borde de los elementos
% Numero de nodos de borde
nnb = 2;
Cbo = zeros(nnb,1+2*ngn);
Cbo = [1 1 1 0 0;
3 1 1 0 0];
% Vector de cargas en los nodos
% Numero de nodos cargados
nnc = 1;
% Numero de estados de carga
nec = 1;
P = zeros(nnc,1+ngn,nec);
P(1,1,1)=2; P(1,2,1)=1; P(1,3,1)=1;
% Matriz de conectividad
Con = [2 1; 2 3];
% Matriz de coordenadas de los nodos
x = [0 0; sqrt(2)/2 sqrt(2)/2; 0 sqrt(2)];

5/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

Funcin Amatrix.m
function [Ae,le] = Amatrix(x)
%
% Funcion que obtiene la matriz de transformacion de coordenadas
% locales a globales de un elemento tipo barra
% trabajando en 1, 2 o 3 dimensiones, y la longitud de la barra
%
% Salida:
% Ae->Matriz de transformacion
% le->Longitud de la barra
%
% Recibe como datos:
% x-> matriz con las coordenadas de los nodos del elemento
%
[nne,ngn] = size(x);
% Calculo de la longitud del elemento y los cosenos directores
le = (x(2,:)-x(1,:));
Ae = zeros(2,2*ngn);
Ae(1,1:ngn) = le;
Ae(2,ngn+1:end) = le;
le = sqrt(le*le');
Ae = Ae/le;

Funcin cbound.m
function [K,F] = cbound(K,F,Cbo)
%
% CBOUND modifica K y F para considerar las condiciones de contorno
%
% Salida:
% K->Matriz de rigidez simetrica modificada
% F->Vector de fuerzas globales modificado
%
% Recibe como datos:
% K->Matriz de rigidez simetrica modificada
% F->Vector de fuerzas globales (Cada columna es un estado de carga)
% Cbo->Matriz con la informacion de las condiciones de contorno
%
%if nargin ~= 3,
%error('Numero de argumentos incorrecto, compruebe los datos de entrada');
%end
% Numero de nodos con condicion de contorno y numero de grados
% de libertad por nodos a partir de la matriz de condiciones
% de contorno
nnc = length(Cbo(:,1));
ngn = (length(Cbo(1,:))-1)/2;
% Nomero de estados de carga
nec = length(F(1,:));
% Ciclo sobre los nodos con condiciones de contorno
for i = 1:nnc,
% Numero de nodo cargado
nn=Cbo(i,1);

6/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

% Ciclo para cada grado de libertad


for j = 1:ngn,
% Comprobacion de si el grado de libertad esta impedido o no
if Cbo(i,1+j) == 1,
% Posicion del grado de libertad en la matriz de rigidez global
aux=(nn-1)*ngn+j;
for k = 1:nec,
F(:,k)=F(:,k)-K(:,aux)*Cbo(i,1+ngn+j);
F(aux,k)=Cbo(i,1+ngn+j);
end
K(aux,:)=0;
K(:,aux)=0;
K(aux,aux)=1;
end
end
end

Funcin ensam.m
function [K,F]=ensam(P,E,A,prop,Con,x)
%
% Funcion que obtiene la matriz de rigidez de una estructura en celosia
% trabajando en 1, 2 o 3 dimansiones, se ensambla solo la parte superior,
% ya que se sabe que va a ser simetrica
% Ademas ensambla las fuerzas en el vector de fuerzas globales
%
% Salida:
% K->Matriz diagonal superior (o completa)
% F->Vector de fuerzas
%
% Recibe como datos:
% E-> modulos de elasticidad de cada uno de los materiales
% A-> areas transversales de cada uno de los materiales
% prop-> vector que asocia a cada barra su tipo de material
% Con-> matriz de conectividad que indica para cada elemento (barra) que
% nodos del sistema lo componen
% P-> matriz de con las fuerzas que actuan en cada nodo (globales)
% x-> matriz de coordenadas nodales
%
if nargin ~= 6,
error('Numero de argumentos incorrecto, compruebe los datos de entrada');
end
% Numero de elementos y del numero de nodos por elemento
% a partir de las dimensiones de matriz de conectividad
[ne,nne] = size(Con);
if ne ~= length(prop),
error('La matriz Con y el vector prop no concuerdan, comprobar');
end
% Numero de nodos y numero de grados de libertad por nodo
% a partir de las dimensiones de matriz de coordenadas
[nn,ngn] = size(x);
% Numero de grados de libertad totales
ngt = nn*ngn;
% Rutina de ensamblaje de las fuerzas, recorrido de todas las cargas

7/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

% con el contador i y ensamblaje en el vector de fuerzas globales


nnc = length(P(:,1));
nec = length(P(1,1,:));
% Inicializacion del vector de fuerzas global como
% un vector de ceros de tipo sparse
F = (zeros(ngt,nec));
for j = 1:nec,
for i = 1:nnc,
F((P(i,1)-1)*ngn+1:P(i,1)*ngn,j)=P(i,2:end,j)';
end
end
% Inicializacion de la matriz de rigidez global como
% una matriz de ceros de tipo sparse
K = (zeros(ngt));
% Rutina de ensamblaje, recorrido de todos los elementos
% con el contador e y ensamblaje en la matriz de rigidez global
for e = 1:ne,
% Matriz de rigidez de la barra e
ke = rigid(x(Con(e,:),:),E(prop(e)),A(prop(e)));
% Ciclo para recorrer la parte superior de la matriz ke por bloques
for i = 1:nne,
% Indices de fila inicial y final para el bloque iesimo
auxin = (Con(e,i)-1)*ngn+1;
auxif = Con(e,i)*ngn;
for j = i:nne,
% Indices de fila inicial y final para el bloque jesimo
auxjn = (Con(e,j)-1)*ngn+1;
auxjf = Con(e,j)*ngn;
% Para solo construir la parte superior de la matriz
if Con(e,i) <= Con(e,j),
K(auxin:auxif,auxjn:auxjf)=K(auxin:auxif,auxjn:auxjf)+...
ke((i-1)*ngn+1:i*ngn,(j-1)*ngn+1:j*ngn);
else
K(auxjn:auxjf,auxin:auxif)=K(auxjn:auxjf,auxin:auxif)+...
ke((j-1)*ngn+1:j*ngn,(i-1)*ngn+1:i*ngn);
end % End del if
end % End del for j
end % End del for i
end % End del for e
% Matriz de rigidez global considerando la simetria
K = triu(K) + triu(K,1)';

Funcin esfuerzos.m
function [forcen,forcel,Ne,sigmae]=esfuerzos(u,x,prop,E,A,Con)
%
% ESFUERZOS es la rutina encargada del calculo de los resultados
% una vez obtenidos los desplazamientos solucion de la estructura
%
% Salida:
% forcel->Matriz con las fuerzas que equilibran cada elemento
% forcen->Fuerzas en los nodos
% Ne->Esfuerzos axiles en las barras
% sigmae->Tensiones en las barras

8/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

%
% Recibe como datos:
% u->desplazamientos solucion del problema
% E-> modulos de elasticidad de cada uno de los materiales
% A-> areas transversales de cada uno de los materiales
% prop-> vector que asocia a cada barra su tipo de material
% Con-> matriz de conectividad que indica para cada elemento (barra) que
% nodos del sistema lo componen
% x-> matriz de coordenadas nodales
%
if nargin ~=6,
error('Numero de argumentos incorrecto, compruebe los datos de entrada');
end
% Numero de elementos y del numero de nodos por elemento
% a partir de las dimensiones de matriz de conectividad
[ne,nne] = size(Con);
if ne ~= length(prop),
error('La matriz Con y el vector prop no concuerdan, comprobar');
end
% Numero de nodos y numero de grados de libertad por nodo
% a partir de las dimensiones de matriz de coordenadas
[nn,ngn] = size(x);
% Numero de grados de libertad totales
ngt = nn*ngn;
% Numero de estados de carga
nec = length(u(1,:));
% Inicializacion de las matrices y vectores necesarios
% Desplazamientos de los nodos de un elemento
ue = zeros(nne*ngn,nec);
% Fuerzas a las que esta sometido cada una de los muelles
forcel = zeros(ne,nne*ngn,nec);
% Fuerzas en los nodos incluidas las reacciones en los apoyos
forcen = zeros(nn,ngn,nec);
% Tensiones en cada barra
Ne = zeros(ne,nec);
sigmae = zeros(ne,nec);
for e = 1:ne,
% Matriz de rigidez de la barra e
ke = rigid(x(Con(e,:),:),E(prop(e)),A(prop(e)));
% Obtencion de la matriz de transformacion A
[Ae,le] = Amatrix(x(Con(e,:),:));
Lm = [-Ae(1,1:ngn) Ae(1,1:ngn)];
for i = 1:nec,
% Obtencion de los desplazamientos asociados al elemento e
for j = 1:nne,
ue((j-1)*ngn+1:j*ngn,i)=u((Con(e,j)-1)*ngn+1:Con(e,j)*ngn,i);
end
% Calculo de las tensiones y esfuerzos axiles
sigmae(e,i) = E(prop(e))*Lm*ue(:,i)/le;
Ne(e,i) = sigmae(e,i)*A(prop(e));
% Fuerzas en los nodos para cada elemento y el acumulado en los nodos
forcel(e,:,i) = (ke*ue(:,i))';
for j = 1:nne,
forcen(Con(e,j),:,i)=forcen(Con(e,j),:,i)+...
forcel(e,(j-1)*ngn+1:j*ngn,i);
end
end

9/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

end

Funcin rigid.m
function ke=rigid(x,E,A);
%
% Funcion que obtiene la matriz de rigidez de un elemento tipo barra
% trabajando en 1, 2 o 3 dimensiones
%
% Salida:
% ke->Matriz de rigidez del elemento tipo barra
%
% Recibe como datos:
% x-> matriz con las coordenadas de los nodos del elemento
% A-> area transversal del elemento
% E-> modulo de elasticidad del elemento
%
if nargin ~= 3,
error('Numero de argumentos incorrecto, compruebe los datos de entrada');
end
% Numero de nodos por elemento y numero de grados de libertad
% a partir de las dimensiones de matriz de coordenadas X
[nne,ngn] = size(x);
% Obtencion de la matriz de transformacion A
[Ae,le] = Amatrix(x);
% Matriz de rigidez del elemento barra en locales
ke = E*A*[1 -1; -1 1]/le;
% Matriz de rigidez del elemento barra en globales
ke = Ae'*ke*Ae;

Script ejecucion.m
clear; clc;
% Cargo los datos del problema en memoria
data;
% Llamada a la rutina de ensamblaje y obtencion de la matriz de
% rigidez del sistema de muelles
[K,F] = ensam(P,E,A,prop,Con,x)
disp('La matriz de rigidez es:')
K
% disp('El vector de fuerzas globales es:')
% F
figure(2)
spy(K)
% Introduccion de las condiciones de contorno
[K,F] = cbound(K,F,Cbo);
disp('La matriz de rigidez, tras introducir las c. de contorno, es:')
K
disp('El vector de fuerzas globales, tras introducir las c. de contorno,
es:')
F
% Resolucion del sistema de ecuaciones

10/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

[L,U] = lu(K);
u = L\F;
u = U\u;
disp('Los desplazamientos solucin son:')
u
% Obtencion de las reacciones en los apoyos
[forcen,forcel,Ne,sigmae] = esfuerzos(u,x,prop,E,A,Con);
disp('Las fuerzas que actan en cada barra son:')
forcel
disp('Las fuerzas que actan en cada nodo son:')
forcen
disp('Las esfuerzos axiles en las barras son:')
Ne
disp('Las tensiones en las barras son:')
sigmae

Ejemplo de aplicacin.
Considere la armadura mostrada en la figura y calcule los desplazamientos del nudo 2, los
esfuerzos en las barras y las reacciones en los apoyos. Considere un E = A = L = P1 = P2 =
1.0

Solucin:
Se introducen los datos de entrada de acuerdo a la geometra presentada en la figura.
Obtenindose los siguientes resultados:
K=
0.5000 0.5000 -0.5000 -0.5000
0
0.5000 0.5000 -0.5000 -0.5000
0
-0.5000 -0.5000 1.0000
0 -0.5000

0
0
0.5000
11/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

-0.5000 -0.5000
0 1.0000 0.5000 -0.5000
0
0 -0.5000 0.5000 0.5000 -0.5000
0
0 0.5000 -0.5000 -0.5000 0.5000

F=
0
0
1
1
0
0
La matriz de rigidez es:
K=
0.5000
0.5000
-0.5000
-0.5000
0
0

0.5000 -0.5000 -0.5000


0
0
0.5000 -0.5000 -0.5000
0
0
-0.5000 1.0000
0 -0.5000 0.5000
-0.5000
0 1.0000 0.5000 -0.5000
0 -0.5000 0.5000 0.5000 -0.5000
0 0.5000 -0.5000 -0.5000 0.5000

La matriz de rigidez, tras introducir las c. de contorno, es:


K=
1.0000
0
0
0
0
0
0 1.0000
0
0
0
0
0
0 1.0000
0
0
0
0
0
0 1.0000
0
0
0
0
0
0 1.0000
0
0
0
0
0
0 1.0000
El vector de fuerzas globales, tras introducir las c. de contorno, es:
F=
0
0
1
1
0
0
12/8

PROYECTO No. 1 ELEMENTOS FINITOS

MIGUEL ANGEL LEMUS HERNANDEZ


CARLOS EDUARDO PARADA

Los desplazamientos solucion son:


u=
0
0
1.0000
1.0000
0
0
Las fuerzas que actuan en cada barra son:
forcel =
1
0

1
0

-1
0

-1
0

Las fuerzas que actuan en cada nodo son:


forcen =
-1
1
0

-1
1
0

Las esfuerzos axiles en las barras son:


Ne =
1.4142
0
Las tensiones en las barras son:
sigmae =
1.4142
0

13/8

Vous aimerez peut-être aussi