-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathshapefunctions.m
More file actions
113 lines (109 loc) · 4 KB
/
shapefunctions.m
File metadata and controls
113 lines (109 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
function N = shapefunctions(nelnodes,ncoord,elident,xi)
%
%================= SHAPE FUNCTIONS ==================================
%
% Calculates shape functions for various element types (in terms of
% local coordinate system rather than global)
%
N = zeros(nelnodes,1);
%
% 1D elements
%
if (ncoord == 1)
if (nelnodes==2)
N(1) = 0.5*(1.+xi(1));
N(2) = 0.5*(1.-xi(1));
elseif (nelnodes == 3)
N(1) = -0.5*xi(1)*(1.-xi(1));
N(2) = 0.5*xi(1)*(1.+xi(1));
N(3) = (1.-xi(1))*(1.+xi(1));
end
%
% 2D elements
%
elseif (ncoord == 2)
%
% Triangular element
%
if ( nelnodes == 3 )
N(1) = xi(1);
N(2) = xi(2);
N(3) = 1.-xi(1)-xi(2);
elseif ( nelnodes == 6 )
xi3 = 1.-xi(1)-xi(2);
N(1) = (2.*xi(1)-1.)*xi(1);
N(2) = (2.*xi(2)-1.)*xi(2);
N(3) = (2.*xi3-1.)*xi3;
N(4) = 4.*xi(1)*xi(2);
N(5) = 4.*xi(2)*xi3;
N(6) = 4.*xi3*xi(1);
%
% Rectangular element (p.g. 143 of practical course)
%
elseif ( nelnodes == 4 )
N(1) = 0.25*(1.-xi(1))*(1.-xi(2));
N(2) = 0.25*(1.+xi(1))*(1.-xi(2));
N(3) = 0.25*(1.+xi(1))*(1.+xi(2));
N(4) = 0.25*(1.-xi(1))*(1.+xi(2));
elseif (nelnodes == 8)
N(1) = -0.25*(1.-xi(1))*(1.-xi(2))*(1.+xi(1)+xi(2));
N(2) = 0.25*(1.+xi(1))*(1.-xi(2))*(xi(1)-xi(2)-1.);
N(3) = 0.25*(1.+xi(1))*(1.+xi(2))*(xi(1)+xi(2)-1.);
N(4) = 0.25*(1.-xi(1))*(1.+xi(2))*(xi(2)-xi(1)-1.);
N(5) = 0.5*(1.-xi(1)*xi(1))*(1.-xi(2));
N(6) = 0.5*(1.+xi(1))*(1.-xi(2)*xi(2));
N(7) = 0.5*(1.-xi(1)*xi(1))*(1.+xi(2));
N(8) = 0.5*(1.-xi(1))*(1.-xi(2)*xi(2));
end
%
elseif (ncoord==3)
if (nelnodes == 4)
N(1) = xi(1);
N(2) = xi(2);
N(3) = xi(3);
N(4) = 1.-xi(1)-xi(2)-xi(3);
elseif (nelnodes == 10)
xi4 = 1.-xi(1)-xi(2)-xi(3);
N(1) = (2.*xi(1)-1.)*xi(1);
N(2) = (2.*xi(2)-1.)*xi(2);
N(3) = (2.*xi(3)-1.)*xi(3);
N(4) = (2.*xi4-1.)*xi4;
N(5) = 4.*xi(1)*xi(2);
N(6) = 4.*xi(2)*xi(3);
N(7) = 4.*xi(3)*xi(1);
N(8) = 4.*xi(1)*xi4;
N(9) = 4.*xi(2)*xi4;
N(10) = 4.*xi(3)*xi4;
elseif (nelnodes == 8)
N(1) = (1.-xi(1))*(1.-xi(2))*(1.-xi(3))/8.;
N(2) = (1.+xi(1))*(1.-xi(2))*(1.-xi(3))/8.;
N(3) = (1.+xi(1))*(1.+xi(2))*(1.-xi(3))/8.;
N(4) = (1.-xi(1))*(1.+xi(2))*(1.-xi(3))/8.;
N(5) = (1.-xi(1))*(1.-xi(2))*(1.+xi(3))/8.;
N(6) = (1.+xi(1))*(1.-xi(2))*(1.+xi(3))/8.;
N(7) = (1.+xi(1))*(1.+xi(2))*(1.+xi(3))/8.;
N(8) = (1.-xi(1))*(1.+xi(2))*(1.+xi(3))/8.;
elseif (nelnodes == 20)
N(1) = (1.-xi(1))*(1.-xi(2))*(1.-xi(3))*(-xi(1)-xi(2)-xi(3)-2.)/8.;
N(2) = (1.+xi(1))*(1.-xi(2))*(1.-xi(3))*(xi(1)-xi(2)-xi(3)-2.)/8.;
N(3) = (1.+xi(1))*(1.+xi(2))*(1.-xi(3))*(xi(1)+xi(2)-xi(3)-2.)/8.;
N(4) = (1.-xi(1))*(1.+xi(2))*(1.-xi(3))*(-xi(1)+xi(2)-xi(3)-2.)/8.;
N(5) = (1.-xi(1))*(1.-xi(2))*(1.+xi(3))*(-xi(1)-xi(2)+xi(3)-2.)/8.;
N(6) = (1.+xi(1))*(1.-xi(2))*(1.+xi(3))*(xi(1)-xi(2)+xi(3)-2.)/8.;
N(7) = (1.+xi(1))*(1.+xi(2))*(1.+xi(3))*(xi(1)+xi(2)+xi(3)-2.)/8.;
N(8) = (1.-xi(1))*(1.+xi(2))*(1.+xi(3))*(-xi(1)+xi(2)+xi(3)-2.)/8.;
N(9) = (1.-xi(1)^2)*(1.-xi(2))*(1.-xi(3))/4.;
N(10) = (1.+xi(1))*(1.-xi(2)^2)*(1.-xi(3))/4.;
N(11) = (1.-xi(1)^2)*(1.+xi(2))*(1.-xi(3))/4.;
N(12) = (1.-xi(1))*(1.-xi(2)^2)*(1.-xi(3))/4.;
N(13) = (1.-xi(1)^2)*(1.-xi(2))*(1.+xi(3))/4.;
N(14) = (1.+xi(1))*(1.-xi(2)^2)*(1.+xi(3))/4.;
N(15) = (1.-xi(1)^2)*(1.+xi(2))*(1.+xi(3))/4.;
N(16) = (1.-xi(1))*(1.-xi(2)^2)*(1.+xi(3))/4.;
N(17) = (1.-xi(1))*(1.-xi(2))*(1.-xi(3)^2)/4.;
N(18) = (1.+xi(1))*(1.-xi(2))*(1.-xi(3)^2)/4.;
N(19) = (1.+xi(1))*(1.+xi(2))*(1.-xi(3)^2)/4.;
N(20) = (1.-xi(1))*(1.+xi(2))*(1.-xi(3)^2)/4.;
end
end
end