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.
 
 
 
 

36 lines
1.1 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2021-05-18 22:33:57
% @LastEditTime: 2021-05-18 22:41:38
%--------------------------
function K = global_stiffness_2scale_nonlinear(F, dFdx, iK, jK, dx, global_u, global_l, lenout)
eleNum = size(F, 2);
sK = zeros(lenout^2, eleNum);
jac = dx^3/8;
for ele_ma = 1:eleNum
u = global_u{ele_ma};
l = global_l{ele_ma};
% element stiffness
ke = 0;
for gp = 1:8
Fe = F{gp, ele_ma}; % 4 * eleNum_mi
dFe = dFdx{gp, ele_ma}; % 4 * lenout * eleNum_mi
dP1 = dPdF_fast_nonlinear(u, l, Fe, dFe); % 4 * l * m
dPT = permute(dP1, [2,1,3]); % l * 4 * m
dP2 = reshape(dPT, lenout, []); % l * 4m
dF1 = permute(dFe, [2,1,3]); % l * 4 * eleNum_mi
dF2 = reshape(dF1, lenout, [])'; % 4m * l
ke_g = dP2 * dF2; % lenout * lenout
ke = ke + ke_g * jac;
end
sK(:, ele_ma) = ke(:);
end
K = sparse(iK, jK, sK(:));
K = (K + K')/2;
end