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.
39 lines
1.2 KiB
39 lines
1.2 KiB
%--------------------------
|
|
% @Author: Jingqiao Hu
|
|
% @Date: 2021-02-28 16:50:32
|
|
% @LastEditTime: 2021-03-02 09:56:36
|
|
%--------------------------
|
|
function K = stiffness_2scale_linear(dFdx, iK, jK, dx, global_u, global_l, vdofs_num)
|
|
|
|
nele = size(dFdx, 2);
|
|
jac = dx^3 / 8;
|
|
|
|
sK = zeros(vdofs_num^2, nele);
|
|
|
|
parfor ele_ma = 1:nele
|
|
u = global_u{ele_ma};
|
|
l = global_l{ele_ma};
|
|
|
|
% element stiffness
|
|
% tic
|
|
ke = 0;
|
|
for gp = 1:8
|
|
dFe = dFdx{gp, ele_ma}; % 9 * v * eleNum_mi
|
|
|
|
dP1 = dPdF_fast_linear(u, l, dFe); % 9, v, m
|
|
dPT = permute(dP1, [2,1,3]); % v, 9, m
|
|
dP2 = reshape(dPT, vdofs_num, []); % v, 9m
|
|
|
|
dF1 = permute(dFe, [2,1,3]); % v, 9m
|
|
dF2 = reshape(dF1, vdofs_num, [])'; % 9m * v
|
|
|
|
ke_g = dP2 * dF2; % v * v
|
|
% ke_g = sum(mtimesx(dPT, dFe), 3); % 24*24*m
|
|
ke = ke + ke_g * jac;
|
|
end
|
|
sK(:, ele_ma) = ke(:);
|
|
% toc
|
|
end
|
|
K = sparse(iK, jK, sK(:));
|
|
K = (K + K')/2;
|
|
end
|