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.
 
 
 
 

202 lines
8.0 KiB

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