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

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