%-------------------------- % @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);