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