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.

71 lines
2.5 KiB

3 years ago
%--------------------------
% @Author: Jingqiao Hu
% @Date: 2022-01-26 16:15:45
% @LastEditTime: 2022-01-26 19:14:58
%--------------------------
function [sK, v] = intKE_tet(node, tet, E, NU)
x = node(:,1); % n,1
y = node(:,2);
z = node(:,3);
x = x(tet); % m,4
y = y(tet);
z = z(tet);
[a,b,c,v] = abc(x,y,z);
D = (E/((1+NU)*(1-2*NU)))* ...
[ 1-NU NU NU 0 0 0 ;
NU 1-NU NU 0 0 0 ;
NU NU 1-NU 0 0 0 ;
0 0 0 (1-2*NU)/2 0 0 ;
0 0 0 0 (1-2*NU)/2 0 ;
0 0 0 0 0 (1-2*NU)/2];
sK = intKE(a,b,c,v, D);
v = v/6;
end
function sK = intKE(a,b,c,v, D)
ntet = size(a, 1);
sK = zeros(12*12, ntet);
for i = 1 : ntet
Be = 1 / v(i) * ...
[a(i,1) 0 0 a(i,2) 0 0 a(i,3) 0 0 a(i,4) 0 0;
0 b(i,1) 0 0 b(i,2) 0 0 b(i,3) 0 0 b(i,4) 0;
0 0 c(i,1) 0 0 c(i,2) 0 0 c(i,3) 0 0 c(i,4);
b(i,1) a(i,1) 0 b(i,2) a(i,2) 0 b(i,3) a(i,3) 0 b(i,4) a(i,4) 0;
0 c(i,1) b(i,1) 0 c(i,2) b(i,2) 0 c(i,3) b(i,3) 0 c(i,4) b(i,4);
c(i,1) 0 a(i,1) c(i,2) 0 a(i,2) c(i,3) 0 a(i,3) c(i,4) 0 a(i,4)];
ke = Be' * D * Be * v(i)/6;
sK(:, i) = ke(:);
end
end
function [a,b,c,v] = abc(x,y,z)
x1 = x(:,1); x2 = x(:,2); x3 = x(:,3); x4 = x(:,4);
y1 = y(:,1); y2 = y(:,2); y3 = y(:,3); y4 = y(:,4);
z1 = z(:,1); z2 = z(:,2); z3 = z(:,3); z4 = z(:,4);
a(:,1) = y2 .* (z4 - z3) - y3 .* (z4 - z2) + y4 .* (z3 - z2);
a(:,2) = - y1 .* (z4 - z3) + y3 .* (z4 - z1) - y4 .* (z3 - z1);
a(:,3) = y1 .* (z4 - z2) - y2 .* (z4 - z1) + y4 .* (z2 - z1);
a(:,4) = - y1 .* (z3 - z2) + y2 .* (z3 - z1) - y3 .* (z2 - z1);
b(:,1) = - x2 .* (z4 - z3) + x3 .* (z4 - z2) - x4 .* (z3 - z2);
b(:,2) = x1 .* (z4 - z3) - x3 .* (z4 - z1) + x4 .* (z3 - z1);
b(:,3) = - x1 .* (z4 - z2) + x2 .* (z4 - z1) - x4 .* (z2 - z1);
b(:,4) = x1 .* (z3 - z2) - x2 .* (z3 - z1) + x3 .* (z2 - z1);
c(:,1) = x2 .* (y4 - y3) - x3 .* (y4 - y2) + x4 .* (y3 - y2);
c(:,2) = - x1 .* (y4 - y3) + x3 .* (y4 - y1) - x4 .* (y3 - y1);
c(:,3) = x1 .* (y4 - y2) - x2 .* (y4 - y1) + x4 .* (y2 - y1);
c(:,4) = - x1 .* (y3 - y2) + x2 .* (y3 - y1) - x3 .* (y2 - y1);
% v is 6V, 6 * vol
v = (x2-x1) .* ((y3-y1) .* (z4-z1) - (y4-y1) .* (z3-z1)) + ...
(y2-y1) .* ((x4-x1) .* (z3-z1) - (x3-x1) .* (z4-z1)) + ...
(z2-z1) .* ((x3-x1) .* (y4-y1) - (x4-x1) .* (y3-y1));
end