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.
 
 
 
 

142 lines
3.3 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-09-03 17:52:28
% @LastEditTime: 2021-09-08 21:01:28
% return the boolean representing the border-dofs for each micro-ele
% the inner-dofs = 1 - bdofs
%--------------------------
function [bdofs, ib_dofs, ii_dofs] = expanded_micro_dofs(microx, edofMat_mi)
bdofs = zeros(microx^2, 8);
be = zeros(8);
ib_dofs = zeros(8,8,microx^2);
ii_dofs = zeros(8,8,microx^2);
% left
i = 1;
for j = 2:microx-1
bdofs_e = [1,2,7,8];
idofs_e = setdiff(1:8, bdofs_e);
ele = (i-1) * microx + j;
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
end
% right
i = microx;
for j = 2:microx-1
bdofs_e = 3:6;
idofs_e = setdiff(1:8, bdofs_e);
ele = (i-1) * microx + j;
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
end
% up
j = 1;
for i = 2 : microx-1
bdofs_e = 5:8;
idofs_e = setdiff(1:8, bdofs_e);
ele = (i-1) * microx + j;
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
end
% down
j = microx;
for i = 2 : microx-1
bdofs_e = 1:4;
idofs_e = setdiff(1:8, bdofs_e);
ele = (i-1) * microx + j;
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
end
% left-up corner
i = 1; j = 1; ele = (i-1) * microx + j;
bdofs_e = [1,2,5,6,7,8];
idofs_e = setdiff(1:8, bdofs_e);
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
% left-down corner
i = 1; j = microx; ele = (i-1) * microx + j;
bdofs_e = [1,2,3,4,7,8];
idofs_e = setdiff(1:8, bdofs_e);
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
% right-up corner
i = microx; j = 1; ele = (i-1) * microx + j;
bdofs_e = 3:8;
idofs_e = setdiff(1:8, bdofs_e);
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
% right-down corner
i = microx; j = microx; ele = (i-1) * microx + j;
bdofs_e = 1:6;
idofs_e = setdiff(1:8, bdofs_e);
bdofs(ele, bdofs_e) = 1;
be(:) = 0; be(idofs_e, bdofs_e) = 1;
ib_dofs(:,:,ele) = be;
be(:) = 0; be(idofs_e, idofs_e) = 1;
ii_dofs(:,:,ele) = be;
% inner
for i = 2:microx-1
for j = 2:microx-1
ele = (i-1) * microx + j;
ii_dofs(:,:,ele) = 1;
end
end
bdofs = bdofs';
end
% % default value is 9, for the idofs or bdofs not in this micro-ele
% bdofs = repmat(9, microx^2, 9);
% idofs = repmat(1:9, microx^2, 1);