Proyecto1 MEF
Proyecto1 MEF
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:
INTRODUCCION
DE DATOS
RESOLUCION DE
DESPLAZAMIENTOS
ENSAMBLE DE
MATRIS DE RIGIDEZ
RESOLUCION DE
ESFUERZOS
SALIDA DE DATOS
2/8
3/8
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
5/8
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
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
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
%
% 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
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
[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
-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
1
0
-1
0
-1
0
-1
1
0
13/8