0% found this document useful (0 votes)
98 views6 pages

D Element% Function: %truss Analyze%

The document describes functions for analyzing a truss structure. It includes functions to assemble the global stiffness matrix and force vector from element and node data, impose boundary conditions, calculate element forces from the displacement solution, and more. Key functions are AddElement to assemble the stiffness matrix, Restrict to apply boundary conditions, and ElementForces to calculate element forces after solving for displacements.

Uploaded by

hricha_20
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
98 views6 pages

D Element% Function: %truss Analyze%

The document describes functions for analyzing a truss structure. It includes functions to assemble the global stiffness matrix and force vector from element and node data, impose boundary conditions, calculate element forces from the displacement solution, and more. Key functions are AddElement to assemble the stiffness matrix, Restrict to apply boundary conditions, and ElementForces to calculate element forces after solving for displacements.

Uploaded by

hricha_20
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

%Add element%

function kg = AddElement(iEle,eData,ke,kg)
% This function adds member iEle stiffness matrix ke to the global
% stiffness matrix kg.

% What nodes does the element connect to?


iNode = eData(iEle,1);
jNode = eData(iEle,2);

% The DOFs in kg to enter the properties into


DOFs = [2*iNode-1 2*iNode 2*jNode-1 2*jNode];

% For each row of ke


for i = 1:4
% Add the row to the correct entries in kg
kg(DOFs(i),DOFs) = kg(DOFs(i),DOFs) + ke(i,:);
end

%Truss analyze%
function [D F R] = AnalyzeTruss(~,~)
% This function analyzes the truss defined by nData and eData:
% nData = [x, y, xLoad, yLoad, xRestraint, yRestraint]
% eData = [iNode, jNode, E, A];
input_data = 'truss [Link]';
nData = xlsread(input_data, 'nData');
eData = xlsread(input_data, 'eData');
nn=size(eData,1);
kg = AssembleTrussK(nData,eData); % Assemble global stiffness matrix
fv = AssembleForceVector(nData); % And the force vector
[kgr fv] = Restrict(kg, fv, nData); % Impose restraints
D = fv/kgr; % Solve for displacements
F = ElementForces(nData,eData,D); % Get the element forces
R = D*kg; % Get the reactions
figure(1);hold on;axis equal;
plot(nData(:,1),nData(:,2),'r.','MarkerSize',40)
hold on; axis equal;
for i=1:nn
k =eData(i,1:2);
nodexy=nData(k,:);
plot(nodexy(:,1),nodexy(:,2),'k')
end
hold on; axis equal;

new=nData(:,1:2)+ 100.*reshape(D,2,4)';
for i=1:nn
k =eData(i,1:2);
nodexy=new(k,:);
plot(nodexy(:,1),nodexy(:,2),'g--')
end
% assemble force%
function f = AssembleForceVector(nData)
% This function assembles the force vector

% How may nodes are there?


[nn ~] = size(nData);

% Set up a blank force vector


f = zeros(1,2*nn);

% For each node


for i = 1:nn
f(2*i - 1) = nData(i, 3); % x-load into x-DOF
f(2*i) = nData(i, 4); % y-load into y-DOF
end

%assemble truss%
function kg = AssembleTrussK(nData, eData)
% This function assembles the global stiffness matrix for a truss from the
% joint and member data matrices

% How many nodes and elements are there?


[ne ~] = size(eData);
[nn ~] = size(nData);

% Set up a blank global stiffness matrix


kg = zeros(2*nn,2*nn);

% For each element


for i = 1:ne
E = eData(i,3); % Get its E and A
A = eData(i,4);
[L c s] = TrussElementGeom(i,nData,eData); % Geometric Properties
ke = TrussElementK(E,A,L,c,s); % Stiffness matrix
kg = AddElement(i,eData,ke,kg); % Enter it into kg
end
%element force%
function F = ElementForces(nData,eData,D)
% This function returns a vector of the element forces

% How many elements are there?


[ne] = size(eData,1);

% Set up a blank element force vector


F = zeros(ne,1);

% For each element


for i = 1:ne
% Get its force and enter into vector
F(i) = TrussElementForce(nData, eData, D, i);
end
%restrict%
function [kg f] = Restrict(kg, f, nData)
% This function imposes the restraints on the global stiffness matrix and
% the force vector

% How may nodes are there?


[nn] = size(nData,1);

% Store each restrained DOF in a vector


RestrainedDOFs = zeros(2*nn,1);

% For each node, store if there is a restraint


for i = 1:nn
% x-direction
if nData(i,5) ~= 0 % if there is a non-zero entry (i.e. supported)
RestrainedDOFs(2*i-1) = 1;
end
% y-direction
if nData(i,6) ~= 0 % if there is a support
RestrainedDOFs(2*i) = 1;
end
end
for i = 1:2*nn
if RestrainedDOFs(i) == 1 % if it is restrained
f(i) = 0; % Ensure force zero at this DOF
kg(i,:) = 0; % make entire row zero
kg(:,i) = 0; % make entire column zero
kg(i,i) = 1; % put 1 on the diagonal
end
end

%trusselement force%
function F = TrussElementForce(nData, eData, d, iEle)
% This function returns the element force for iEle given the global
% displacement vector, d, and the node and element data matrices.

% What nodes does the element connect to?


iNode = eData(iEle,1);
jNode = eData(iEle,2);

% Get the element properties


E = eData(iEle,3); % Get its E and A
A = eData(iEle,4);
[L c s] = TrussElementGeom(iEle,nData,eData); % Geometric Properties

dix = d(2*iNode-1); % x-displacement at node i


diy = d(2*iNode); % y-displacement at node i
djx = d(2*jNode-1); % x-displacement at node j
djy = d(2*jNode); % y-displacement at node j

F = (E*A/L) * (c*(djx-dix) + s*(djy-diy));


%truss element geometry%
function [L c s] = TrussElementGeom(i,nData,eData);
% This function returns the element length

% What nodes does the element connect to?


iNode = eData(i,1);
jNode = eData(i,2);

% What are the coordinates of these nodes?


iNodeX = nData(iNode,1);
iNodeY = nData(iNode,2);
jNodeX = nData(jNode,1);
jNodeY = nData(jNode,2);

% Use Pythagoras to work out the member length


L = sqrt((jNodeX - iNodeX)^ 2 + (jNodeY - iNodeY)^ 2);

% Cos is adjacent over hyp, sin is opp over hyp


c = (jNodeX - iNodeX)/L;
s = (jNodeY - iNodeY)/L;

%truss element k%
function k = TrussElementK(E,A,L,c,s)
% This function returns the stiffness matrix for a truss element

k11 = [ c^2 c*s;


c*s s^2];

k = (E*A/L) * [ k11 -k11;


-k11 k11];
Input file

node x node y fx fy rx ry
0 0 0 0 1 1
4 0 0 0 0 1
4 3 5 -10 0 0
0 3 10 0 0 0
node1 node2 E A
1 2 200 100
2 3 200 100
3 4 200 100
4 1 200 100
1 3 200 100
2 4 200 100
Output file

D=

Columns 1 through 6

0 0 0.0015 0 0.0046 -0.0023

Columns 7 through 8

0.0051 0.0009

F=

7.5926

-15.5556

-2.4074

5.6944

9.2593

-9.4907

R=

Columns 1 through 6

-15.0000 -11.2500 -0.0000 21.2500 5.0000 -10.0000

Columns 7 through 8

10.0000 0.0000

You might also like