%% Clean model
ops.wipe();
ops.model('basic', '-ndm', 2, '-ndf', 2);
%% Material and thickness
E = 30e6; % psi
nu = 0.0;
t = 2.0; % in
matTag = 1;
ops.nDMaterial('ElasticIsotropic', matTag, E, nu);
%% Mesh control
nElem = 100; % number of quad elements along the beam length
nNodePerEdge = nElem + 1;
%% Geometry
% Top edge: from (25, 0) to (75, 0)
% Bottom edge: from (25, -3) to (75, -9)
xTop = linspace(25, 75, nNodePerEdge);
yTop = zeros(1, nNodePerEdge);
xBot = linspace(25, 75, nNodePerEdge);
yBot = linspace(-3, -9, nNodePerEdge);
% Node numbering:
% top : 1 ~ nNodePerEdge
% bottom : nNodePerEdge+1 ~ 2*nNodePerEdge
for i = 1:nNodePerEdge
ops.node(i, xTop(i), yTop(i));
end
for i = 1:nNodePerEdge
ops.node(nNodePerEdge + i, xBot(i), yBot(i));
end
%% Elements
% Counterclockwise ordering:
% [bottom-left, bottom-right, top-right, top-left]
conn = zeros(nElem, 4);
for e = 1:nElem
nBL = nNodePerEdge + e;
nBR = nNodePerEdge + e + 1;
nTR = e + 1;
nTL = e;
conn(e, :) = [nBL, nBR, nTR, nTL];
ops.element('quad', e, nBL, nBR, nTR, nTL, t, 'PlaneStress', matTag);
end
%% Boundary conditions
% Fixed end at x = 75 -> top last node and bottom last node
topFixed = nNodePerEdge;
botFixed = 2 * nNodePerEdge;
ops.fix(topFixed, 1, 1);
ops.fix(botFixed, 1, 1);
%% Load
% Concentrated vertical load at top-left node
ops.timeSeries('Linear', 1);
ops.pattern('Plain', 1, 1);
ops.load(1, 0.0, -4000.0);