opsMAT = OpenSeesMatlab();
ops = opsMAT.opensees;
ops.wipe();
ops.model('basic', '-ndm', 3, '-ndf', 3);
% Nodes
for i = 1:nNode
ops.node(i, nodes(i,1), nodes(i,2), nodes(i,3));
end
% Material
matTag = 1;
E = 200e9;
nu = 0.3;
rho = 0.0;
% 3D isotropic elastic material
ops.nDMaterial('ElasticIsotropic', matTag, E, nu, rho);
% Elements: 4-node tetrahedra
for e = 1:nElem
n = elems(e,:);
ops.element('FourNodeTetrahedron', e, n(1), n(2), n(3), n(4), matTag);
end
% Apply fixed boundary from PDE Face 4
for k = 1:numel(fixedNodeIDs)
nd = fixedNodeIDs(k);
ops.fix(nd, 1, 1, 1);
end
% Apply equivalent nodal loads from PDE Face 8 traction
ops.timeSeries('Linear', 1);
ops.pattern('Plain', 1, 1);
tol = 0;
for i = 1:nNode
fx = nodalLoads(i,1);
fy = nodalLoads(i,2);
fz = nodalLoads(i,3);
if abs(fx) > tol || abs(fy) > tol || abs(fz) > tol
ops.load(i, fx, fy, fz);
end
end