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.
47 lines
1.4 KiB
47 lines
1.4 KiB
%--------------------------
|
|
% @Author: Jingqiao Hu
|
|
% @Date: 2021-09-28 13:09:40
|
|
% @LastEditTime: 2021-09-29 19:23:58
|
|
|
|
% sensitivies for full-scale density, using the displacements
|
|
%--------------------------
|
|
function [dcdt, dvdt] = sensitivity_mmc(U, regulated_matrix, ke1, dH, edofMat_ma, edofMat_mi, dofid, cell2global_id)
|
|
|
|
order2 = dofid(edofMat_mi');
|
|
nele_mi = size(edofMat_mi, 1);
|
|
nele_ma = size(edofMat_ma, 1);
|
|
|
|
dcdp = zeros(nele_mi, nele_ma);
|
|
|
|
% step.1 recover micro-displacements
|
|
for ele = 1 : nele_ma
|
|
Re = regulated_matrix{ele};
|
|
edof = edofMat_ma(ele, :);
|
|
umicro = Re * U(edof); % [boundary, inner]
|
|
|
|
u1 = umicro(order2); % [8,m]
|
|
u2(1,:,:) = u1; % [1,8,m]
|
|
u3 = permute(u2, [2,1,3]); % [8,1,m]
|
|
|
|
% step.2 sensitivities for micro-density
|
|
ke2 = repmat(ke1(:), 1, nele_mi);
|
|
ke3 = reshape(ke2, 8,8,[]);
|
|
|
|
% step.3 sensitivities for micro-density
|
|
dcdp(:, ele) = mtimesx(mtimesx(u2, ke3), u3); % m,1
|
|
end
|
|
|
|
dc = dcdp(cell2global_id); % [globaly, globalx], change to global_order
|
|
|
|
% step.4 sensitivities for mmc-thickness
|
|
dcdt = zeros(nele_ma * 20, 1);
|
|
dvdt = zeros(nele_ma * 20, 1);
|
|
|
|
for ci = 1 : nele_ma * 20
|
|
dH_i = dH{ci}; % globaly, globalx
|
|
dcdt(ci, 1) = dH_i(:)' * dc(:);
|
|
|
|
dvdt(ci, 1) = mean(dH_i(:));
|
|
end
|
|
|
|
end
|