-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathforceVector.m
More file actions
109 lines (102 loc) · 7.67 KB
/
forceVector.m
File metadata and controls
109 lines (102 loc) · 7.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
% Written By: Matthew Jon Pais, University of Florida (2009)
% Website: http://sites.google.com/site/matthewjpais/Home
% Email: mpais@ufl.edu, matthewjpais@gmail.com
function [globalF]=forceVector(DOF,iter,globalF0)
% This function creates the global force vector from the user supplied
% input file.
global DOMAIN MAT FORCE CONNEC
nXElem = DOMAIN(1); % Number of elements in the x-direction
nYElem = DOMAIN(2); % Number of elements in the y-direction
le = DOMAIN(3); % Length of a side of an element
globalF = sparse(DOF,1); % Create the global force vector
if isempty(FORCE) == 1, m = 1; else m = size(FORCE,1); end
if MAT(5) == 1, h = MAT(6); else h = 1; end
% Create the global force matrix from distributed loading
for iForce = 1:m
if isempty(FORCE) == 0 % Constant amplitude loading
edge = FORCE(iForce,1); % Specified edge
xForce = h*FORCE(iForce,2); % Specified distributed force in x-direction
yForce = h*FORCE(iForce,3); % Specified distributed force in y-direction
else % Variable amplitude loading
edge = 1; % Uniaxial tension in y-direction
xForce = 0; % No distributed force in x-direction
yForce = inputLoadHistory(iter); % Iteration dependent distributed force in y-direction
end
switch edge
case 1 % Uniaxial tension in y-direction
node = CONNEC((nYElem-1)*(nXElem)+1,5); % Initial node along top edge
for i = 1:nXElem+1
if (i == 1) || (i == nXElem+1) % Convert distributed force to nodal force
globalF(2*node-1,1) = le*xForce/2; % Elemental force in x-direction for edge nodes
globalF(2*node,1) = le*yForce/2; % Elemental force in y-direction for edge nodes
else
globalF(2*node-1,1) = le*xForce; % Elemental force in x-direction
globalF(2*node,1) = le*yForce; % Elemental force in y-direction
end
node = node+1; % Update node along top edge
end
node = 1; % Initial node along bottom edge
for i = 1:nXElem+1;
if (i == 1) || (i == nXElem+1) % Convert distributed force to nodal force
globalF(2*node-1,1) = -le*xForce/2; % Element force in x-direction for edge nodes
globalF(2*node,1) = -le*yForce/2; % Element force in y-direction for edge nodes
else
globalF(2*node-1,1) = -le*xForce; % Element force in x-direction
globalF(2*node,1) = -le*yForce; % Element force in y-direction
end
node = node+1; % Update node along bottom edge
end
case 2 % Uniaxial tension in x-direction
node = nXElem+1; % Initial node along right edge
for i = 1:nYElem+1
if (i == 1) || (i == (nYElem+1)) % Convert distributed force to nodal force
globalF(2*node-1,1) = le*xForce/2; % Elemental force in x-direction for edge nodes
globalF(2*node,1) = le*yForce/2; % Elemental force in y-direction for edge nodes
else
globalF(2*node-1,1) = le*xForce; % Elemental force in x-direction
globalF(2*node,1) = le*yForce; % Elemental force in y-direction
end
node = node+nXElem+1; % Update node along right edge
end
node = 1; % Initial node along left edge
for i = 1:nYElem+1
if (i == 1) || (i == (nXElem+1)) % Convert distributed force to nodal force
globalF(2*node-1,1) = -le*xForce/2; % Elemental force in x-direction for edge nodes
globalF(2*node,1) = -le*yForce/2; % Elemental force in y-direction for edge nodes
else
globalF(2*node-1,1) = -le*xForce; % Elemental force in x-direction
globalF(2*node,1) = -le*yForce; % Elemental force in y-direction
end
node = node+nXElem+1; % Update node along bottom edge
end
case 3 % Distributed force along bottom edge
node = 1; % Initial node along bottom edge
for i = 1:nXElem+1
if (i == 1) || (i == (nXElem+1))
globalF(2*node-1,1) = le*xForce/2; % Elemental force in x-direction for edge nodes
globalF(2*node,1) = le*yForce/2; % Elemental force in y-direction for edge nodes
else
globalF(2*node-1,1) = le*xForce; % Elemental force in x-direction
globalF(2*node,1) = le*yForce; % Elemental force in y-direction
end
node = node+1; % Update node along bottom edge
end
case 4 % Distributed force along left edge
node = 1; % Initial node along left edge
for i = 1:nYElem+1
if (i == 1) || (i == (nXElem+1))
globalF(2*node-1,1) = le*xForce/2; % Elemental force in x-direction for edge nodes
globalF(2*node,1) = le*yForce/2; % Elemental force in y-direction for edge nodes
else
globalF(2*node-1,1) = le*xForce; % Elemental force in x-direction
globalF(2*node,1) = le*yForce; % Elemental force in y-direction
end
node = node+nXElem+1; % Update node along bottom edge
end
otherwise
disp('Unknown edge specified, please modify the input.')
end
end
%size(globalF)
%size(globalF0)
globalF = globalF + globalF0';