You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.9 KiB
63 lines
1.9 KiB
3 years ago
|
%--------------------------------------------------------------------------
|
||
|
% Mesh a L-shape using 4 noded Elements
|
||
|
%--------------------------------------------------------------------------
|
||
|
function [nodes, eles, eleNum, nodeNum,plotIdx, iK, jK] = GenerateL(nelx, nely)
|
||
|
|
||
|
% dbstop if error
|
||
|
% nelx = 20;
|
||
|
% nely = 20;
|
||
|
|
||
|
% left - rec
|
||
|
[nodes1, eles1, eleNum1, nodeNum1] = GenerateMesh(nelx/2, nely, nelx/2, nely);
|
||
|
% right - square
|
||
|
[nodes2, eles2, eleNum2, nodeNum2] = GenerateMesh(nelx/2, nely/2, nelx/2, nely/2);
|
||
|
|
||
|
nodes1(:,3) = 1:nodeNum1;
|
||
|
borderNodes = nodes1(end-nely:end-nely/2,3); % get border nodes index for eles2
|
||
|
|
||
|
% offset + nodes2
|
||
|
nodes2(:,1) = nodes2(:,1)+nelx/2;
|
||
|
nodes2(:,2) = nodes2(:,2)+nely/2;
|
||
|
|
||
|
% eles2(1:nely/2+1) -> borderNodes
|
||
|
[~,cols] = intersect(eles2,1:nely/2+1);
|
||
|
|
||
|
% offset + eles2
|
||
|
eles2 = eles2+nodeNum1-(nely/2+1);
|
||
|
|
||
|
% eles2(1:nely/2+1) -> borderNodes
|
||
|
tempeles2 = eles2(:);
|
||
|
tempeles2(cols,1) = borderNodes;
|
||
|
eles2 = reshape(tempeles2,eleNum2,4);
|
||
|
|
||
|
nodes = [nodes1;nodes2(nely/2+2:end,:)];
|
||
|
eles = [eles1;eles2];
|
||
|
eleNum = eleNum1+eleNum2;
|
||
|
nodeNum = nodeNum1+nodeNum2-(nely/2+1);
|
||
|
nodes(:,3) = 1:nodeNum;
|
||
|
|
||
|
% compute the ele IDX of L shape, include the right-down empty square
|
||
|
plotIdx = 1:(nely*nelx/2); % left - rec
|
||
|
for i = 0:(nelx/2-1)
|
||
|
temp = (i*nely+1) : (nely/2+(i*nely));
|
||
|
plotIdx = [plotIdx,temp+(nely*nelx/2)];
|
||
|
end
|
||
|
|
||
|
edofMat = zeros(eleNum, 8);
|
||
|
for i = 1:eleNum
|
||
|
for j = 1:4
|
||
|
edofMat(i, [2*j-1,2*j]) = [2 * eles(i, j) - 1, 2 * eles(i, j)];
|
||
|
end
|
||
|
end
|
||
|
iK = reshape(kron(edofMat, ones(8, 1)).', 64 * eleNum, 1);
|
||
|
jK = reshape(kron(edofMat, ones(1, 8)).', 64 * eleNum, 1);
|
||
|
|
||
|
% test
|
||
|
% scatter(nodes(:,1),nodes(:,2));
|
||
|
% figure;
|
||
|
% for i = 1:eleNum
|
||
|
% node = eles(i,:);
|
||
|
% scatter(nodes(node,1),nodes(node,2));hold on;
|
||
|
% end
|
||
|
end
|