Sei sulla pagina 1di 4

D:\PhD\Coursework\CEN-545 Finite element methods\CEN-545 PRA\Copy_of_trussfivebar.

m Thursday, April 30, 2015 8:54 PM

% Truss with 5 bar elements

% Beginning of data input %


nnd = 4; % Number of nodes:
nel = 5; % Number of elements:
nne = 2 ; % Number of nodes per element
nodof =2 ; % Number of degrees of freedom per node
eldof = nne*nodof; % Number of degrees of freedom per element

% Nodes coordinates X and Y


geom = zeros(nnd,2);
geom = [0. 0. ; % X and Y coord. node 1
1500. 3500. ; % X and Y coord. node 2
0. 5000. ; % X and Y coord. node 3
5000. 5000.]; % X and Y coord. node 4

% Element connectivity
connec=zeros(nel,2);
connec = [1 2 ; % 1st and 2nd node of element 1
2 4 ; % 1st and 2nd node of element 2
1 3 ; % 1st and 2nd node of element 3
3 4 ; % 1st and 2nd node of element 4
2 3]; % 1st and 2nd node of element 5

% Material and section properties


% prop(1,1) = E; prop(1,2)= A
prop=zeros(nel,2);
prop = [20000000 40; % E and A of element 1
20000000 40; % E and A of element 2
20000000 30; % E and A of element 3
20000000 30; % E and A of element 4
7000000 20]; % E and A of element 5

% Boundary conditions
nf = ones(nnd, nodof); % Initialize the matrix nf to 1
nf(1,1) = 0 ; % Prescribed nodal freedom of node 1
nf(1,2) = 0 ; % Prescribed nodal freedom of node 1
nf(4,1) = 0 ; % Prescribed nodal freedom of node 4
nf(4,2) = 0 ; % Prescribed nodal freedom of node 4

% Counting of the free degrees of freedom


n=0;
for i=1:nnd
for j=1:nodof
if nf(i,j) ~= 0
n = n+1;
nf(i,j) = n;
end
end
end

% loading
load = zeros(nnd, 2);
load(2,:)=[0 -150000]; % forces in X and Y directions at node 2

kl = zeros(2,2) % Local 2 x 2 stiffness matrix


KK = zeros(n); % Initialize global stiffness matrix to zero

-1-
D:\PhD\Coursework\CEN-545 Finite element methods\CEN-545 PRA\Copy_of_trussfivebar.m Thursday, April 30, 2015 8:54 PM

F = zeros(n,1); % Initialize global force vector to zero

delta = KK\F ; % solve for unknown displacements


% Extract nodal displacements
for i=1:nnd
for j=1:nodof
node_disp(i,j) = 0;
if nf(i,j)~= 0;
node_disp(i,j) = delta(nf(i,j)) ;
end
end
end

% The element stiffness matrix in local coordinates


for i=1:nel
% Retrieve the nodes of element i
node_1 = connec(i,1);
node_2 = connec(i,2);
% Retrieve the x and y coordinates of nodes 1 and 2
x1 = geom(node_1,1); y1 = geom(node_1,2);
x2 = geom(node_2,1); y2 = geom(node_2,2);
% Evaluate length of element i
L(i) = sqrt((x2-x1)^2 + (y2-y1)^2);
end
for i=1:5
% Retrieve section properties of element i
E(i) = prop(i,1); A(i) = prop(i,2);
k(i) = ((E(i)*A(i))/L(i)); % spring constant of the bar element
kl(i)= k(i)*[1 -1;-1 1]; % local stiffness matrix
% The transformation between local and global coordinates
% Retrieve the nodes of element i
node_1 = connec(i,1);
node_2 = connec(i,2);
% Retrieve the x and y coordinates of nodes 1 and 2
x1 = geom(node_1,1); y1= geom(node_1,2);
x2 = geom(node_2,1); y2= geom(node_2,2);
% Evaluate the angle that the member makes with the global axis X
if(x2-x1)==0
if(y2>y1)
theta = 2*atan(1);
else
theta = -2*atan(1);
end
else
theta = atan((y2-y1)/(x2-x1));
end
% Form the transformation matrix
C = [cos(theta) -sin(theta) 0 0 ; sin(theta) cos(theta) 0 0];
% Transform the element matrix from local to global coordinates
kg = C*kl*C' ;
% The steering vector for element i
% retrieve the nodes of element i
node_1=connec(i,1);
node_2=connec(i,2);
% Form the steering vector from elements degrees of freedom
g=[nf(node_1,1); nf(node_1,2); nf(node_2,1);nf(node_2,2)];
end

-2-
D:\PhD\Coursework\CEN-545 Finite element methods\CEN-545 PRA\Copy_of_trussfivebar.m Thursday, April 30, 2015 8:54 PM

% Assemble the global stiffness matrix


for i=1:eldof
if g(i) ~= 0
for j=1: eldof
if g(j) ~= 0
KK(g(i),g(j))= KK(g(i),g(j)) + kg(i,j);
end
end
end
end

% Form the global force vector


for i=1:nnd
for j=1:nodof
if nf(i,j)~= 0
F(nf(i,j)) = load(i,j);
end
end
end
delta = inv(KK)*F; % solve for unknown displacements
for j=1:eldof
if g(j)== 0
edg(j)=0.; % displacement = 0. for restrained freedom
else
edg(j) = delta(g(j));
end
end
fg = kg*edg'; % Element force vector in global XY
fl = C'*fg ; % Element force vector in local xy
force(i) = fl(3);

fprintf( ' ******* PRINTING MODEL DATA **************\n\n\n');


% Print Nodal coordinates
fprintf( '------------------------------------------------------ \n');
fprintf( 'Number of nodes: %g\n', nnd );
fprintf( 'Number of elements: %g\n', nel );
fprintf( 'Number of nodes per element: %g\n', nne );
fprintf( 'Number of degrees of freedom per node: %g\n', nodof);
fprintf( 'Number of degrees of freedom per element: %g\n\n\n', eldof);
fprintf( '------------------------------------------------------ \n');
fprintf( 'Node X Y \n');
for i=1:nnd
fprintf( ' %g, %07.2f, %07.2f\n',i, geom(i,1), geom(i,2));
end
fprintf( '\n');
% Print element connectivity
fprintf( '------------------------------------------------------ \n');
fprintf( 'Element Node_1 Node_2 \n');
for i=1:nel
fprintf( '%g, %g, %g\n',i, connec(i,1), connec(i,2));
end
fprintf( '\n');
% Print element property
fprintf( '------------------------------------------------------ \n');
fprintf( 'Element E A \n');
for i=1:nel
fprintf( '%g, %g, %g\n',i, prop(i,1), prop(i,2));

-3-
D:\PhD\Coursework\CEN-545 Finite element methods\CEN-545 PRA\Copy_of_trussfivebar.m Thursday, April 30, 2015 8:54 PM

end
fprintf( '\n');
% Print Nodal freedom
fprintf( '------------------------------------------------------ \n');
fprintf( 'Node disp_U disp_V\n');
for i=1:nnd
fprintf( ' %g, %g, %g\n',i, nf(i,1), nf(i,2));
end
fprintf( '\n');
% Print Nodal loads
fprintf( '------------------------------------------------------ \n');
fprintf( 'Node load_X load_Y\n');
for i=1:nnd
fprintf( '%g, %07.2f, %07.2f\n',i, load(i,1), load(i,2));
end
%
fprintf( '------------------------------------------------------ \n');
fprintf( '\n');
fprintf( 'Total number of active degrees of freedom, n = %g\n',n);
fprintf( '\n');

fprintf( '-------------------------------------------------------- \n');


fprintf( '\n\n\n ******* PRINTING ANALYSIS RESULTS **************\n\n\n');
% Print global force vector
fprintf( '------------------------------------------------------ \n');
fprintf( 'Global force vector F \n');
fprintf( '%g\n',F);
fprintf( '\n');
% Print Displacement solution vector
fprintf( '------------------------------------------------------ \n');
fprintf( 'Displacement solution vector: delta \n');
fprintf( ' %8.5f\n',delta);
fprintf( '\n');
% Print nodal displacements
fprintf( '------------------------------------------------------ \n');
fprintf( 'Nodal displacements \n');
fprintf( 'Node disp_X disp_Y\n');
for i=1:nnd
fprintf( '%g, %8.5f, %8.5f\n',i, node_disp(i,1), node_disp(i,2));
end
fprintf( '\n');

-4-

Potrebbero piacerti anche