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.
 
 
 
 

48 lines
1.7 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-05-28 17:13:42
% @LastEditTime: 2021-12-06 16:53:22
%--------------------------
% extract macro-dofs from full-dofs
function lambda_ma = extract_macro_dofs_from_full(full_lambda, nelx, nely, microx)
globalx = nelx * microx;
globaly = nely * microx;
[~,~, edofMat_full] = forAssemble(globalx, globaly);
[~,~, edofMat_ma] = forAssemble(nelx, nely);
lambda_ma = zeros(2*(nelx+1)*(nely+1), 1);
for i = 1:nelx
for j = 1:nely
jj = microx; ii = 1;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full, i, j);
fe1 = full_lambda(global_edof([1,2]));
jj = microx; ii = microx;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full, i, j);
fe2 = full_lambda(global_edof([3,4]));
jj = 1; ii = microx;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full, i, j);
fe3 = full_lambda(global_edof([5,6]));
jj = 1; ii = 1;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full, i, j);
fe4 = full_lambda(global_edof([7,8]));
fe = [fe1(:); fe2(:); fe3(:); fe4(:)];
edof_ma = edofMat_ma(j + (i-1)*nely, :);
lambda_ma(edof_ma) = fe;
end
end
end
function global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full, i, j)
% which micro element in full domain
last_col_full = (i - 1) * microx + ii - 1;
this_col_full = (j - 1) * microx + jj;
global_ele = last_col_full * globaly + this_col_full;
global_edof = edofMat_full(global_ele, :);
end