Skip to content

Commit

Permalink
Mejora orden de código
Browse files Browse the repository at this point in the history
  • Loading branch information
ppizarror committed Apr 10, 2019
1 parent 4c50177 commit df93925
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 51 deletions.
88 changes: 47 additions & 41 deletions Programa_TEFAME/Analisis_Lib/ModalEspectral.m
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ function analizar(analisisObj, nModos, betacR, betacP, maxcond)
% analisis y de los modos conocidos con sus beta

% Ajusta variables de entrada
tInicio = cputime;
if ~exist('nModos', 'var')
nModos = 20;
end
Expand All @@ -200,11 +199,31 @@ function analizar(analisisObj, nModos, betacR, betacP, maxcond)

% Se calcula la matriz de masa
analisisObj.ensamblarMatrizMasa();
diagMt = diag(analisisObj.Mt);
analisisObj.Mtotal = sum(diagMt);

% Se ensambla el vector de fuerzas
% Calcula el metodo modal espectral
analisisObj.calcularModalEspectral(nModos, betacR, betacP, maxcond)

% Guarda el resultado para las cargas estaticas
analisisObj.ensamblarVectorFuerzas();
analisisObj.u = (analisisObj.Kt^-1) * analisisObj.F;
analisisObj.modeloObj.actualizar(analisisObj.u);

% Guarda el resultado para las cargas dinamicas
analisisObj.modeloObj.aplicarPatronesDeCargasDinamico();

end % analizar function

function calcularModalEspectral(analisisObj, nModos, betacR, betacP, maxcond)
% calcularModalEspectral: Calcula el metodo modal espectral
%
% calcularModalEspectral(analisisObj,nModos,betacR,betacP,maxcond)

% Calcula tiempo inicio
tInicio = cputime;

% Obtiene matriz de masa
diagMt = diag(analisisObj.Mt);
analisisObj.Mtotal = sum(diagMt);

% Obtiene los grados de libertad
ngdl = length(analisisObj.Mt); % Numero de grados de libertad
Expand Down Expand Up @@ -474,13 +493,7 @@ function analizar(analisisObj, nModos, betacR, betacP, maxcond)
analisisObj.numDGReal = analisisObj.modeloObj.obtenerNumerosGDL();
fprintf('\tSe completo el analisis en %.3f segundos\n\n', cputime-tInicio);

end % analizar function

% ---------- MÉTODO DE NEWMARK PARA SISTEMAS LINEALES ------------
%
% end
% ACA AUN NO ESTAN DEFINIDAS LAS COAS
% ----------------------------------------------------------------
end % calcularModalEspectral function

function ensamblarMatrizRigidez(analisisObj)
% ensamblarMatrizRigidez: es un metodo de la clase ModalEspectral que se usa para
Expand Down Expand Up @@ -700,48 +713,41 @@ function ensamblarVectorFuerzas(analisisObj)

end % obtenerDesplazamientos function


function NW = Newmark(analisisObj,p,dt,xo,vo)
function NW = Newmark(analisisObj, p, dt, xo, vo)
% NewmarkLineal: es un metodo de la clase ModalEspectral
% que se usa para obtener los valores de aceleracion
% velociadad y desplazamiento de los grados de libertad
% a partir del metodo de Newmark

gamma = 1/2;
beta = 1/6;
gamma = 1 / 2;
beta = 1 / 6;
KT = analisisObj.obtenerMatrizRigidez();
MT = analisisObj.obtenerMatrizMasa();
CT = analisisObj.cRayleigh();
n = length(p);
tmax = dt * (n-1);
t = linspace(0,tmax,n)';
% tmax = dt * (n - 1);
% t = linspace(0, tmax, n)';
ngl = length(KT);
x=zeros(ngl,length(p));
v=zeros(ngl,length(p));
z=zeros(ngl,length(p));
x(:,1) = xo;
v(:,1) = vo;
z(:,1) = MT^(-1) * (p(:,1) - CT * v(:,1) - KT * x(:,1));
a1 = 1 /(beta * dt^2) * MT + gamma / (beta * dt) * CT;
x = zeros(ngl, length(p));
v = zeros(ngl, length(p));
z = zeros(ngl, length(p));
x(:, 1) = xo;
v(:, 1) = vo;
z(:, 1) = MT^(-1) * (p(:, 1) - CT * v(:, 1) - KT * x(:, 1));
a1 = 1 / (beta * dt^2) * MT + gamma / (beta * dt) * CT;
a2 = 1 / (beta * dt) * MT + (gamma / beta-1) * CT;
a3 = (1 / (2 * beta) - 1) * MT + dt * (gamma / (2 * beta) - 1) *CT;
a3 = (1 / (2 * beta) - 1) * MT + dt * (gamma / (2 * beta) - 1) * CT;
ks = KT + a1;
ps = zeros(ngl,length(p));
for i = 1:1:(n-1)
ps(:,i+1) = p(:,i+1) + a1 * x(:,i) + a2 * v(:,i) + a3 * z(:,i);
x(:,i+1) = ks^(-1) * ps(:,i+1);
v(:,i+1) = (gamma / (beta * dt)) * (x(:,i+1) - x(:,i)) + (1-gamma/beta) * v(:,i) + dt * (1 - gamma / (2 * beta)) * z(:,i);
z(:,i+1) = (1 / (beta * dt^2)) * (x(:,i+1) - x(:,i)) - (1 / (beta * dt)) * v(:,i) - (1 / (2 * beta) - 1) * z(:,i);
ps = zeros(ngl, length(p));
for i = 1:1:(n - 1)
ps(:, i+1) = p(:, i+1) + a1 * x(:, i) + a2 * v(:, i) + a3 * z(:, i);
x(:, i+1) = ks^(-1) * ps(:, i+1);
v(:, i+1) = (gamma / (beta * dt)) * (x(:, i+1) - x(:, i)) + (1 - gamma / beta) * v(:, i) + dt * (1 - gamma / (2 * beta)) * z(:, i);
z(:, i+1) = (1 / (beta * dt^2)) * (x(:, i+1) - x(:, i)) - (1 / (beta * dt)) * v(:, i) - (1 / (2 * beta) - 1) * z(:, i);
end
NW = [x , v , z];
NW = [x, v, z];

end % NewmarkLineal function



% Metodos para graficar la estructura


function plt = plot(analisisObj, varargin)
% plot: Grafica un modelo
%
Expand Down Expand Up @@ -916,14 +922,14 @@ function plotAnimado(analisisObj, deformada, modo, factor, phif, limx, limy, lim
for i = 1:numeroNodos
coords = nodoObjetos{i}.obtenerCoordenadas();
ngdlid = length(coords);
gdl = max(gdl, ngdlid);
gdl = max(gdl, ngdlid);
if ~deformada
nodoObjetos{i}.plot([], 'b', 10);
if j == 1
hold on;
end
j = j + 1;
end
end
end

% Grafica los elementos
Expand Down Expand Up @@ -961,7 +967,7 @@ function plotAnimado(analisisObj, deformada, modo, factor, phif, limx, limy, lim
ngdlid = length(coords);
gdl = max(gdl, ngdlid);
def = analisisObj.obtenerDeformadaNodo(nodoObjetos{i}, modo, gdl);
nodoObjetos{i}.plot(def .* factor * phif, 'k', 20);
nodoObjetos{i}.plot(def.*factor*phif, 'k', 20);
end

end
Expand Down
12 changes: 2 additions & 10 deletions test/modal/Modelo_DinamicaAvanzada.m
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,5 @@
%% Resuelve el sistema
analisisObj.analizar(50, [0.02, 0.05], [0.05, 0.02, 0]);
analisisObj.disp();
pt = analisisObj.plot('modo', 1, 'factor', 10, 'numcuadros', 25, ...
'gif', 'test/modal/out/Modelo_DinamicaAvanzada_%d.gif', 'defelem', true);

% for i = 1:8
% pt = analisisObj.plot('modo', i, 'factor', 10, 'numcuadros', 0, ...
% 'gif', 'test/modal/out/Modelo_DinamicaAvanzada_%d.gif', 'defelem', true);
% saveas(pt,strcat('Diagramas/Diagramamodo',num2str(i)),'epsc')
% close all
% end

pt = analisisObj.plot('modo', 8, 'factor', 10, 'numcuadros', 25, ...
'gif', 'test/modal/out/Modelo_DinamicaAvanzada_%d.gif', 'defelem', true);

0 comments on commit df93925

Please sign in to comment.