%---------------------------------------------------------------------- % truss.m % Arquivo de script para o Matlab ou Octave, para cálculo de treliças planas % (c) Valdenir de Souza Jr., Setembro de 2008 % % Referência bibliográfica: % Programa adaptado a partir de código em Fortran de: % FLEMING, John F. Computer Analysis of Structural Systems % New York: McGraw-Hill, 1989 %---------------------------------------------------------------------- printf(" Analise de trelicas planas \n pelo Metodo da Rigidez Direta.\n\n") %---------------------------------------------------------------------- % Seção de entrada de dados %---------------------------------------------------------------------- % Quantidade de nós da estrutura nj = 4 % Quantidade de elementos da estrutura nm = 5 % Quantidade de seções diferentes nmat = 1 % % Coordenadas X,Y dos pontos nodais % Cada linha corresponde a um nó (linha 1=nó 1, etc.) coord = [ 0. 0.; 600. 0.; 300. 0.; 300. 400.]; % Restrições em cada nó % Cada linha corresponde a um nó (linha 1=nó 1, etc.) % Para cada nó, especifique ux e uy, colocando 0 (grau de liberdade livre) ou 1 (restrito) jr = [ 1 1; 0 1; 0 0; 0 0]; % Conectivadade nodal dos elementos (nó final e nó inicial) % Cada linha corresponde a um elemento % Para cada elemento, entre com nó inicial e nó final jm = [ 1 4; 1 3; 3 4; 2 4; 3 2]; % Área de cada elemento % Cada linha corresponde a um elemento ax = [ 1; 1; 1; 1; 1 ]; % Momento de inércia do material de cada elemento % Cada linha corresponde a um elemento e = [ 675.0; 675.0; 675.0; 675.0; 675.0]; % Matriz de carregamento de cada nó % Cada linha corresponde a um nó (linha 1=nó 1, etc.) % Para cada nó entre com Fx e Fy vt_load = [ 0. 0. 0. 0. 0. 0. 3. 0.]; % --------------------------------------------------------------------- % Seção de cálculos %---------------------------------------------------------------------- % Calcula vetor de carga W, a partir do vetor vt_load neq = 2*nj; w=zeros(neq,1); for n = 1: nj w(2*n-1) = vt_load(n,1); w(2*n) = vt_load(n,2); endfor printf("Calculando comprimento de cada elemento e cossenos diretores...\n\n") tl = zeros(nm,1); cx = zeros(nm,1); cy = zeros(nm,1); for n = 1:nm j1 = jm(n,1); j2 = jm(n,2); xl = coord(j2,1) - coord(j1,1); yl = coord(j2,2) - coord(j1,2); tl(n) = sqrt(xl^2 + yl^2); cx(n) = xl/tl(n); cy(n) = yl/tl(n); endfor clear j1 j2 xl yl; %---------------------------------------------------------------------- printf("Calculando matriz de rigidez da estrutura...\n\n") k = zeros(neq, neq); for n = 1:nm j1 = jm(n,1); j2 = jm(n,1); j1 = jm(n,1); j2 = jm(n,2); eal = e(n)*ax(n)/tl(n); xx = eal*cx(n)*cx(n); yy = eal*cy(n)*cy(n); xy = eal*cx(n)*cy(n); j12m1 = 2*j1-1; j12 = 2*j1; j22m1 = 2*j2-1; j22 = 2*j2; k(j12m1,j12m1) = k(j12m1,j12m1)+xx; k(j12m1,j12) = k(j12m1,j12)+xy; k(j12m1,j22m1) = k(j12m1,j22m1)-xx; k(j12m1,j22) = k(j12m1,j22)-xy; k(j12,j12m1) = k(j12,j12m1)+xy; k(j12,j12) = k(j12,j12)+yy; k(j12,j22m1) = k(j12,j22m1)-xy; k(j12,j22) = k(j12,j22)-yy; k(j22m1,j12m1) = k(j22m1,j12m1)-xx; k(j22m1,j12) = k(j22m1,j12)-xy; k(j22m1,j22m1) = k(j22m1,j22m1)+xx; k(j22m1,j22) = k(j22m1,j22)+xy; k(j22,j12m1) = k(j22,j12m1)-xy; k(j22,j12) = k(j22,j12)-yy; k(j22,j22m1) = k(j22,j22m1)+xy; k(j22,j22) = k(j22,j22)+yy; endfor clear j1j2 eal xx yy xy j12 j12m1 j22 j22m1 %---------------------------------------------------------------------- printf("Introduzindo restricoes apoio...\n\n") for n = 1:nj if (jr(n,1) ~= 0) n2m1 = 2*n-1; for j = 1:neq k(n2m1,j) = 0; k(j,n2m1) = 0; endfor k(n2m1,n2m1) = 1; w(n2m1) = 0; endif clear n2m1; if (jr(n,2) ~= 0) n2 = 2*n; for j = 1:neq k(n2,j) = 0; k(j,n2) = 0; endfor k(n2,n2) = 1; w(n2) = 0; endif endfor %---------------------------------------------------------------------- printf("Calculando deslocamentos globais...\n\n") d=k\w; displs = zeros(nj,2); for n = 1: nj displs(n,1) = d(2*n-1); displs(n,2) = d(2*n); endfor deslocamentos = displs %---------------------------------------------------------------------- printf("Calculando forca normal em cada elemento...\n\n") vt_n = zeros(nm,1); for n = 1: nm j1 = jm(n,1); j2 = jm(n,2); vt_n(n) = e(n)*ax(n)/tl(n)*(cx(n)*(d(2*j2-1)-d(2*j1-1))+cy(n)*(d(2*j2)-d(2*j1))); endfor clear j j1 j2 forca_normal_elemento = vt_n %---------------------------------------------------------------------- printf("Calculando reacoes de apoio...\n\n") rx = zeros(nj,1); ry = zeros(nj,1); for n = 1: nm j1 = jm(n,1); j2 = jm(n,2); if (jr(j1,1)~=0) rx(j1) = rx(j1)-cx(n)*vt_n(n); endif if (jr(j1,2)~=0) ry(j1) = ry(j1)-cy(n)*vt_n(n); endif if (jr(j2,1)~=0) rx(j2) = rx(j2)+cx(n)*vt_n(n); endif if (jr(j2,2)~=0) ry(j2) = ry(j2)+cy(n)*vt_n(n); endif endfor reactions = zeros(nj,2); for n = 1: nj reactions(n,1) = rx(n); reactions(n,2) = ry(n); endfor reacoes = reactions