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