a 2D version
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.4 KiB

%--------------------------
% @Author: Jingqiao Hu
% @Date: 2020-11-17 17:04:34
% @LastEditTime: 2021-03-14 22:06:51
% NOTE: The overall domain must be in [-a, a] & [-b, b]
% The integration is:
% \int_{min_y}^{max_y} \int_{min_x}^{max_x} B(N(x, y)) dxdy
% N(x, y) = 1/4(1 - x/a)(1 - y/b)
% a = lx/2; b = ly/2
%--------------------------
% function B = shape_derivative_local2(coor, a, b)
% GaussNodes = [-1/sqrt(3); 1/sqrt(3)]; GaussWeigh = [1 1];
% L = [1 0 0 0; 0 0 0 1; 0 1 1 0];
%
% minx = coor(1,1); maxx = coor(1,2);
% miny = coor(2,1); maxy = coor(2,2);
%
% B = cell(4,1);
%
% for i = 1:2
% for j = 1:2
% % projection to [-1, 1]
% GN_x = (maxx+minx + abs(maxx-minx)*GaussNodes(i))/2;
% GN_y = (maxy+miny + abs(maxy-miny)*GaussNodes(j))/2;
%
% dN_x = 1/4*[-(1-GN_y/b) (1-GN_y/b) (1+GN_y/b) -(1+GN_y/b)]/a;
% dN_y = 1/4*[-(1-GN_x/a) -(1+GN_x/a) (1+GN_x/a) (1-GN_x/a)]/b;
%
% dN(1,1:2:8) = dN_x; dN(2,1:2:8) = dN_y;
% dN(3,2:2:8) = dN_x; dN(4,2:2:8) = dN_y;
%
% Be = L*dN;
% B{2*(i-1)+j} = GaussWeigh(i)*GaussWeigh(j)*Be;
% end
% end
% end
function gradN = shape_derivative_local(coor, a, b)
GaussNodes = [-1/sqrt(3); 1/sqrt(3)];
gradN = cell(4,1);
L = [1 0 0 0; 0 0 0 1; 0 1 1 0];
minx = coor(1,1); maxx = coor(1,2);
miny = coor(2,1); maxy = coor(2,2);
for i = 1:2
for j = 1:2
gp = 2*(i-1)+j;
% GN_x = GaussNodes(i);
% GN_y = GaussNodes(j);
GN_x = (maxx+minx + abs(maxx-minx)*GaussNodes(i))/2;
GN_y = (maxy+miny + abs(maxy-miny)*GaussNodes(j))/2;
dN_x = 1/4*[-(1-GN_x) (1-GN_x) (1+GN_x) -(1+GN_x)];
dN_y = 1/4*[-(1-GN_y) -(1+GN_y) (1+GN_y) (1-GN_y)];
J = [dN_x; dN_y]*[ -a a a -a;
-b -b b b]';
G = [inv(J) zeros(size(J));
zeros(size(J)) inv(J)];
% dNdx = 3*8
dN1(1,1:2:8) = dN_x; dN1(2,1:2:8) = dN_y;
dN1(3,2:2:8) = dN_x; dN1(4,2:2:8) = dN_y;
B2 = L*G*dN1;
gradN{gp} = B2;
end
end
end