%% Clean model
ops.wipe();
ops.model('basic', '-ndm', 3, '-ndf', 6);
%% Material and thickness
E = 30e6; % psi
nu = 0.0;
t = 2.0; % in
matTag = 1;
ops.nDMaterial('ElasticIsotropic', matTag, E, nu);
secTag = 1;
ops.section('PlateFiber', secTag, matTag, t);
%% Mesh control
nElem = 50; % 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), 0.0, yTop(i));
end
for i = 1:nNodePerEdge
ops.node(nNodePerEdge + i, xBot(i), 0.0, 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);
% ops.element('ShellMITC4', e, nBL, nBR, nTR, nTL, secTag);
ops.element('ASDShellQ4', e, nBL, nBR, nTR, nTL, secTag); % Better than ShellMITC4
end