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