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