a 2D version
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.
 
 

50 lines
1.8 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-05-28 17:13:42
% @LastEditTime: 2021-05-29 15:12:12
%--------------------------
% extract macro-dofs from full-dofs
function lambda_ma = extract_macro_dofs(full_lambda, nelx, nely, microx)
globalx = nelx * microx;
globaly = nely * microx;
[iK_full, jK_full, edofMat_full] = forAssemble(globalx, globaly);
[iK_ma, jK_ma, edofMat_ma] = forAssemble(nelx, nely);
[~, ~, edofMat_mi] = forAssemble(microx, microx);
lambda_ma = zeros(2*(nelx+1)*(nely+1), 1);
% TODO: PLOT macro-lambda curves
for i = 1:nelx
for j = 1:nely
jj = microx; ii = 1;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full);
fe1 = full_lambda(global_edof([1,2]));
jj = microx; ii = microx;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full);
fe2 = full_lambda(global_edof([3,4]));
jj = 1; ii = microx;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full);
fe3 = full_lambda(global_edof([5,6]));
jj = 1; ii = 1;
global_edof = full_scale_edof(ii, jj, microx, globaly, edofMat_full);
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)
% 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