%-------------------------- % @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