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.
143 lines
3.3 KiB
143 lines
3.3 KiB
3 years ago
|
%--------------------------
|
||
|
% @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);
|