Está en la página 1de 12

UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR

FACULTAD DE INGENIERIA MECANICA Y ELECTRICA

DINAMICA
Aplicación con el método de elementos finitos usando octave
Profesor:
SALAZAR HUAMANI, GUSTAVO NESTOR
Alumno:
Baca Garay, Carlos Sebastian

2021
VMT
Algoritmo del ejercicio:
numelementos=3;
E=[30*10^6 30*10^6 15*10^6];
area=[1 1 2];
nodos=[0 ; 30 ; 60 ; 90];
UnionNodos=[1 2 ; 2 3 ; 3 4];
Desplazamientos=[0 1 1 0];
Fuerzas=[0 3000 0 0];
L=[30 30 30];
%Construcción de las matrices de rigidez por cada elemento
A = zeros(2,2,numelementos);
for i = 1:numelementos
A(:,:,i) = ((E(i).*area(i))./L(i))*[1 -1 ; -1 1];
end
A

S=size(nodos,1);
MG=zeros(S,S);
for i=1:numelementos
m=UnionNodos(i,1);
n=UnionNodos(i,2);
MG([m n],[m n],i)=A(:,:,i);
end
MG=sum(MG,3)

%Reducir la matriz global


v=find(Desplazamientos==0);
MGR=MG;
MGR(v,:)=0;
MGR(:,v)=0;
indicefil=zeros(1,S);
indicecol=zeros(1,S);
for i=1:S
if MGR(i,:)==0
indicefil(i)=i;
end
if MGR(:,i)==0
indicecol(i)=i;
end
end
MGR(indicefil~=0,:)=[];
MGR(:,indicecol~=0)=[]
Fuerzas(indicefil~=0)=[]

%Calcular los desplazamientos por nodo


d=MGR\Fuerzas'
k=1;
d2=zeros(S,1);
for i=1:length(Desplazamientos)
if Desplazamientos(i)==0
d2(i,1)=0;
else
d2(i,1)=d(k);
k=k+1;
end
end
Esfuerzos=zeros(1,numelementos);
for i=1:numelementos %Calcular los esfuerzos por elemento
indice=UnionNodos(i,:);
Esfuerzos(i)=(E(i)./L(i))*[-1 1]*[d2(indice(1,1));d2(indice(1,2))];
end

d2
Esfuerzos
Reacciones=MG*d2
% grafica
line([nodos(1) nodos(end)],[0 0],'Color','k','LineWidth',2);
hold on
plot(nodos',zeros(1,length(nodos)),'or','MarkerSize',6,'MarkerFaceColor','r');
grid on
NodosDesp=nodos'+d2';
Nocero=find(d2~=0);
hold on
plot(NodosDesp(Nocero),zeros(1,length(Nocero)),'og','MarkerSize',6,'MarkerFaceColor','g');
axis([nodos(1)-10 nodos(end)+10 -1 1]);
title('Sistema resuelto (Haga zoom en cada nodo hasta ver el desplazamiento');
legend({'Barra';'Nodos empotrados' ; 'Nodos desplazados'});
Algoritmo del ejercicio 2.
numelementos=3;
E(1:numelementos)=210*10^9;
area(1:numelementos)=10*10^-4;
nodos=[12 -3 -4 ; 0 0 0 ; 12 -3 -7 ; 14 6 0];
UnionNodos=[1 2 ; 1 3 ; 1 4];
Desplazamientos=[1 1 1 0 0 0 0 0 0 0 0 0];
Fuerzas=[20000 0 0 0 0 0 0 0 0 0 0 0];
L = zeros(1,numelementos);
Cx = zeros(1,numelementos);
Cy = zeros(1,numelementos);
Cz = zeros(1,numelementos);
LAMDA = zeros(6,6);

for i = 1:numelementos
indice = UnionNodos(i,:);
P1 = [nodos(indice(1),1) nodos(indice(1),2) nodos(indice(1),3)];
P2 = [nodos(indice(2),1) nodos(indice(2),2) nodos(indice(2),3)];
L(i) = norm(P1-P2);
Cx(i) = (P2(1) - P1(1))/ L(i);
Cy(i) = (P2(2) - P1(2))/ L(i);
Cz(i) = (P2(3) - P1(3))/ L(i);
lamda = [Cx(i)^2 Cx(i)*Cy(i) Cx(i)*Cz(i) ; Cy(i)*Cx(i) Cy(i)^2 Cy(i)*Cz(i) ;...
Cz(i)*Cx(i) Cz(i)*Cy(i) Cz(i)^2];
LAMDA(:,:,i) = [lamda -lamda ; -lamda lamda];
end
k = (E.*area)./L;
A = zeros(6,6);

%Ensamble de la matriz global de rigidez

for i = 1:numelementos

A(:,:,i) = k(i)*LAMDA(:,:,i);

j = UnionNodos(i,:);
B(:,:,i) = mat2cell(A(:,:,i),[3 3],[3 3]);

%Asignamos cada paquete en los índices correspondientes de la matriz


%global de rigidez
C(j(1),j(1),i) = B(1,1,i);
C(j(1),j(2),i) = B(1,2,i);
C(j(2),j(1),i) = B(2,1,i);
C(j(2),j(2),i) = B(2,2,i);
end
A

S = 3*size(nodos,1);
m = cell(S/3,S/3);
for i = 1:size(nodos,1)
for j = 1:size(nodos,1)
%En cada vuelta recogemos todos los elementos con el mismo índice
%(i,j), los superponemos y sumamos entre sí.
clear x
x(:,:,:) = cell2mat(reshape(C(i,j,:),1,[],numelementos));
m(i,j) = {sum(x,3)};

if size(m{i,j}) == [0 0]
m(i,j) = {zeros(3,3)};
end

end
end
MG = cell2mat(m)

%Reducir la matriz global


v = find(Desplazamientos==0);
MGR = MG;
MGR(v,:) = 0;
MGR(:,v) = 0;
indicefil = zeros(1,S);
indicecol = zeros(1,S);
for i = 1:S
if MGR(i,:) == 0
indicefil(i) = i;
end
if MGR(:,i) == 0
indicecol(i) = i;
end
end
MGR(indicefil~=0,:) = [];
MGR(:,indicecol~=0) = []
Fuerzas(indicefil~=0) = [];

d = MGR\Fuerzas';
dfinal = zeros(S,1);
k = 1;
for i = 1:length(Desplazamientos)
if Desplazamientos(i) == 0
dfinal(i,1) = 0;
else
dfinal(i,1) = d(k);
k = k+1;
end
end
d2 = mat2cell(dfinal,3*ones(1,size(nodos,1)),1);
Esfuerzos = zeros(1,numelementos);
Flocal = zeros(numelementos,6);
j = 1;
for i = 1:numelementos
indice = UnionNodos(i,:);
Esfuerzos(i) = (E(i)./L(i)) * [-Cx(i) -Cy(i) -Cz(i) Cx(i) Cy(i) Cz(i)] * [d2{indice(1,1)} ; d2{indice(1,2)}];
Flocal(i,:) = A(:,:,i)*[d2{indice(1,1)} ; d2{indice(1,2)}];
j = j + 2;
end

dfinal
Esfuerzos
Reacciones=MG*dfinal
Flocal
d3 = reshape(dfinal,[3,size(nodos,1)])';
NodosDesp = nodos + d3;
d4 = reshape(Desplazamientos,[3,size(nodos,1)])';

for j = 1:numelementos
indice = UnionNodos(j,:);
line([nodos(indice(1),1) nodos(indice(2),1)],...
[nodos(indice(1),2) nodos(indice(2),2)],...
[nodos(indice(1),3) nodos(indice(2),3)],...
'LineWidth',1.5,'Color','k');
hold on
line([NodosDesp(indice(1),1) NodosDesp(indice(2),1)],...
[NodosDesp(indice(1),2) NodosDesp(indice(2),2)],...
[NodosDesp(indice(1),3) NodosDesp(indice(2),3)],...
'LineWidth',1,'Color','b');
end

for i = 1:size(nodos,1)
plot3(nodos(i,1),nodos(i,2),nodos(i,3),'ro','MarkerSize',6,'MarkerFaceColor','r');
hold on
end
grid on
NodosDespx = NodosDesp(:,1);
NodosDespy = NodosDesp(:,2);
NodosDespz = NodosDesp(:,3);
[fil,col] = find(d4 ~= 0);
plot3(NodosDespx(fil),NodosDespy(fil),NodosDespz(fil),'og','MarkerSize',6,'MarkerFaceColor','g');
view(45,45);

También podría gustarte