% -------------------------- % @Author: Jingqiao Hu % @Date: 2021-04-06 17:13:32 % @LastEditTime: 2021-07-01 17:28:59 %-------------------------- function plot_def_on_edge(def_full, microx, nelx, nely, opt_deformation, deformed_cell) hold on; globaly = nely * microx; globalx = nelx * microx; [~, ~, edofMat_full] = forAssemble(globalx, globaly); [ref_full, ~, ~, ~] = GenerateMesh(nelx, nely, globalx, globaly); if opt_deformation==0 def_full = def_full - ref_full; offset = [0.9, 0.5]; regulated = [1, -1]; for kk = 1:2 figure; rd = regulated(kk); % for full-u % scatter3(ref_full(:,1), ref_full(:,2), rd * (def_full(:,kk)) + offset(kk) - 1e-3, 0.5, rd * (def_full(:,kk))); hold on; ii = 1:microx; jj = 1; idx = [3,4]; up_id = nodes_id_horizontal_bezier(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full, ref_full, kk, rd, offset(kk)); ii = 1:microx; jj = microx; idx = [1,2]; down_id = nodes_id_horizontal_bezier(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full, ref_full, kk, rd, offset(kk)); ii = 1; jj = 1:microx; idx = [1,4]; left_id = nodes_id_vertical_bezier(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full, ref_full, kk, rd, offset(kk)); ii = microx; jj = 1:microx; idx = [2,3]; right_id = nodes_id_vertical_bezier(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full, ref_full, kk, rd, offset(kk)); colormap(jet); axis equal; axis off; end else ii = 1:microx; jj = 1; idx = [4,3]; up_id = nodes_id_horizontal(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full); ii = 1:microx; jj = microx; idx = [1,2]; down_id = nodes_id_horizontal(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full); ii = 1; jj = 1:microx; idx = [1,4]; left_id = nodes_id_vertical(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full); ii = microx; jj = 1:microx; idx = [3,2]; right_id = nodes_id_vertical(ii, jj, microx, globaly, idx, edofMat_full, nelx, nely, def_full); end % special for linear-unitp if nargin > 5 SO_unitp(deformed_cell, microx, nelx, nely, globaly, edofMat_full) end end function SO_unitp(deformed_cell, microx, nelx, nely, globaly, edofMat) ii = 1:microx; jj = microx; idx = [1,2]; j = 1; for i = 1:nelx fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = nid(:); def_full = deformed_cell{j,i}; def_up = def_full(up_id, :); plot(def_up(:,1),def_up(:,2),'-', 'LineWidth',1,'Color',['0,0,0']); hold on end ii = microx; jj = 1:microx; idx = [2,3]; i = 1; for j = 1:nely fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = nid(:); def_full = deformed_cell{j,i}; def_up = def_full(up_id, :); plot(def_up(:,1),def_up(:,2),'-', 'LineWidth',1,'Color',['0,0,0']); hold on end end % idx determine which macro-boundary id is % down - right - up - left: 1, 2, 3, 4 function up_id = nodes_id_vertical(ii, jj, microx, globaly, idx, edofMat, nelx, nely, def_full) for i = 1:nelx up_id = []; for j = 1:nely fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = [up_id; nid(:)]; end def_up = def_full(up_id, :); plot(def_up(:,1),def_up(:,2),'-', 'LineWidth',1.5,'Color',['0,0,0']); hold on % plot(def_up(:,1),def_up(:,2),':', 'LineWidth',2,'Color',['0.6,0.6,0.6']); hold on end end function up_id = nodes_id_horizontal(ii, jj, microx, globaly, idx, edofMat, nelx, nely, def_full) for j = 1:nely up_id = []; for i = 1:nelx fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = [up_id; nid(:)]; end def_up = def_full(up_id, :); plot(def_up(:,1),def_up(:,2),'-', 'LineWidth',1.5,'Color',['0,0,0']); hold on % plot(def_up(:,1),def_up(:,2),':', 'LineWidth',2,'Color',['0.6,0.6,0.6']); hold on end end % scatter3 displacement on edge to mimicking bezier_B function up_id = nodes_id_horizontal_bezier(ii, jj, microx, globaly, idx, edofMat, nelx, nely, def_full, ref_full, kk, mc, offset) cp = colormap(jet); maxk = max(mc*def_full(:, kk)); mink = min(mc*def_full(:, kk)); for j = 1:nely up_id = []; for i = 1:nelx fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = [up_id; nid(:)]; end def_up = def_full(up_id, :); ref_up = ref_full(up_id, :); % scatter3(ref_up(:,1), ref_up(:,2), def_up(:,1), 2, def_up(:,1)); hold on; % scatter3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset, 2, mc * (def_up(:,kk))); hold on; % scatter3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset, 'filled','o', 'k'); hold on; cci = round((mc * def_up(:,kk) - mink) / (maxk-mink) * 255) + 1; colors1 = cp(cci, :); x = [ref_up(:,1), ref_up(:,1)]'; y = [ref_up(:,2), ref_up(:,2)]'; z = [mc * def_up(:,kk)+offset, 0 * def_up(:,kk)]'; % for i2 = 1:length(up_id) % plot3(x(:,i2), y(:,i2), z(:,i2), '-', 'LineWidth',1,'Color',colors1(i2,:)); hold on; % end plot3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset, '-', 'LineWidth',1.5,'Color', 'k'); hold on; end end function up_id = nodes_id_vertical_bezier(ii, jj, microx, globaly, idx, edofMat, nelx, nely, def_full, ref_full, kk, mc, offset) cp = colormap(jet); maxk = max(mc*def_full(:, kk)); mink = min(mc*def_full(:, kk)); for i = 1:nelx up_id = []; for j = 1:nely fulli = (i - 1) * microx + ii; fullj = (j - 1) * microx + jj; global_ele = (fulli - 1) * globaly + fullj; edof = edofMat(global_ele, :); nid = edof(:, 2*idx)' / 2; up_id = [up_id; nid(:)]; end def_up = def_full(up_id, :); ref_up = ref_full(up_id, :); % scatter3(ref_up(:,1), ref_up(:,2), def_up(:,1), 2, def_up(:,1)); hold on; % scatter3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset, 2, mc * (def_up(:,kk))); hold on; % scatter3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset,'filled','o', 'k'); hold on; cci = round((mc * def_up(:,kk) - mink) / (maxk-mink) * 255)+1; colors1 = cp(cci, :); x = [ref_up(:,1), ref_up(:,1)]'; y = [ref_up(:,2), ref_up(:,2)]'; z = [mc * def_up(:,kk)+offset, 0 * def_up(:,kk)]'; % for i2 = 1:length(up_id) % plot3(x(:,i2), y(:,i2), z(:,i2), '-', 'LineWidth',1,'Color',colors1(i2,:)); hold on; % end plot3(ref_up(:,1), ref_up(:,2), mc * (def_up(:,kk)) + offset, '-', 'LineWidth',1.5,'Color', 'k'); hold on; end end