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.
42 lines
1.3 KiB
42 lines
1.3 KiB
%--------------------------
|
|
% @Author: Jingqiao Hu
|
|
% @Date: 2020-11-10 21:04:46
|
|
% @LastEditors: Please set LastEditors
|
|
% @LastEditTime: 2020-11-11 14:16:26
|
|
%--------------------------
|
|
function f = elastic_force_homog(lenout, nodeNum, dx, F, dFdx, edofMat_ma, u0, l0)
|
|
eleNum_ma = size(dFdx, 2);
|
|
f = zeros(nodeNum*2, 1);
|
|
jac = dx^2/4;
|
|
|
|
for ele_ma = 1:eleNum_ma
|
|
|
|
% as micro outer order: 4_coners, bottom, right, up, left
|
|
fe = 0;
|
|
for gp = 1:4
|
|
Fe = F{gp, ele_ma}; % 4 * eleNum_mi
|
|
P2 = PK1_homog(u0, l0, Fe); % 4 * eleNum_mi
|
|
|
|
dFe = dFdx{gp, ele_ma}; % 4 * lenout * eleNum_mi
|
|
dF1 = permute(dFe, [2,1,3]); % l * 4 * eleNum_mi
|
|
dF2 = reshape(dF1, lenout, [])'; % 4m * l
|
|
|
|
fg = P2(:)' * dF2; % 1 * lenout
|
|
|
|
fe = fe + fg * jac;
|
|
end
|
|
|
|
% every macro ele: 4corners -> down -> right -> up -> left
|
|
edof = edofMat_ma(ele_ma, :);
|
|
f(edof) = f(edof) - fe(:); % NOTE: MINUS!
|
|
end
|
|
end
|
|
|
|
function P = PK1_homog(u, l, F)
|
|
Fdet = F(1, :).*F(4, :) - F(2, :).*F(3, :);
|
|
JJ = log(Fdet);
|
|
Finv = F([4,2,3,1], :) .* [1;-1;-1; 1] ./ Fdet;
|
|
FinvT = Finv([1,3,2,4], :);
|
|
|
|
P = u * (F - FinvT) + l * JJ .* FinvT;
|
|
end
|