OGS
ShapePyra13-impl.h
Go to the documentation of this file.
1 
11 namespace NumLib
12 {
13 template <class T_X, class T_N>
14 void ShapePyra13::computeShapeFunction(const T_X& x, T_N& N)
15 {
16  const double r = x[0];
17  const double s = x[1];
18  const double t = x[2];
19 
20  N[0] = -0.0625 * (1.0 - r) * (1.0 - s) * (1.0 - t) *
21  (4.0 + 3.0 * r + 3.0 * s + 2.0 * r * s + 2.0 * t + r * t + s * t +
22  2.0 * r * s * t);
23  N[1] = -0.0625 * (1.0 + r) * (1.0 - s) * (1.0 - t) *
24  (4.0 - 3.0 * r + 3.0 * s - 2.0 * r * s + 2.0 * t - r * t + s * t -
25  2.0 * r * s * t);
26  N[2] = -0.0625 * (1.0 + r) * (1.0 + s) * (1.0 - t) *
27  (4.0 - 3.0 * r - 3.0 * s + 2.0 * r * s + 2.0 * t - r * t - s * t +
28  2.0 * r * s * t);
29  N[3] = -0.0625 * (1.0 - r) * (1.0 + s) * (1.0 - t) *
30  (4.0 + 3.0 * r - 3.0 * s - 2.0 * r * s + 2.0 * t + r * t - s * t -
31  2.0 * r * s * t);
32  N[4] = 0.5 * t * (1.0 + t);
33  N[5] = 0.125 * (1.0 - r * r) * (1.0 - s) * (1.0 - t) * (2.0 + s + s * t);
34  N[6] = 0.125 * (1.0 + r) * (1.0 - s * s) * (1.0 - t) * (2.0 - r - r * t);
35  N[7] = 0.125 * (1.0 - r * r) * (1.0 + s) * (1.0 - t) * (2.0 - s - s * t);
36  N[8] = 0.125 * (1.0 - r) * (1.0 - s * s) * (1.0 - t) * (2.0 + r + r * t);
37  N[9] = 0.25 * (1.0 - r) * (1.0 - s) * (1.0 - t * t);
38  N[10] = 0.25 * (1.0 + r) * (1.0 - s) * (1.0 - t * t);
39  N[11] = 0.25 * (1.0 + r) * (1.0 + s) * (1.0 - t * t);
40  N[12] = 0.25 * (1.0 - r) * (1.0 + s) * (1.0 - t * t);
41 }
42 
43 template <class T_X, class T_N>
44 void ShapePyra13::computeGradShapeFunction(const T_X& x, T_N& dN)
45 {
46  const double r = x[0];
47  const double s = x[1];
48  const double t = x[2];
49  //---dN/dr
50  dN[0] = 0.0625 * (1.0 - s) * (1.0 - t) *
51  (1.0 + 6.0 * r + s + 4.0 * r * s + t + 2.0 * r * t - s * t +
52  4.0 * r * s * t);
53  dN[1] = -0.0625 * (1.0 - s) * (1.0 - t) *
54  (1.0 - 6.0 * r + s - 4.0 * r * s + t - 2.0 * r * t - s * t -
55  4.0 * r * s * t);
56  dN[2] = -0.0625 * (1.0 + s) * (1.0 - t) *
57  (1.0 - 6.0 * r - s + 4.0 * r * s + t - 2.0 * r * t + s * t +
58  4.0 * r * s * t);
59  dN[3] = 0.0625 * (1.0 + s) * (1.0 - t) *
60  (1.0 + 6.0 * r - s - 4.0 * r * s + t + 2.0 * r * t + s * t -
61  4.0 * r * s * t);
62  dN[4] = 0.0;
63  dN[5] = -0.25 * r * (1.0 - s) * (1.0 - t) * (2.0 + s + s * t);
64  dN[6] = 0.125 * (1.0 - s * s) * (1.0 - t) * (1.0 - 2.0 * r - t - 2 * r * t);
65  dN[7] = -0.25 * r * (1.0 + s) * (1.0 - t) * (2.0 - s - s * t);
66  dN[8] =
67  -0.125 * (1.0 - s * s) * (1.0 - t) * (1.0 + 2.0 * r - t + 2 * r * t);
68  dN[9] = -0.25 * (1.0 - s) * (1.0 - t * t);
69  dN[10] = 0.25 * (1.0 - s) * (1.0 - t * t);
70  dN[11] = 0.25 * (1.0 + s) * (1.0 - t * t);
71  dN[12] = -0.25 * (1.0 + s) * (1.0 - t * t);
72 
73  //---dN/ds
74  dN[13] = 0.0625 * (1.0 - r) * (1.0 - t) *
75  (1.0 + r + 6.0 * s + 4.0 * r * s + t - r * t + 2.0 * s * t +
76  4.0 * r * s * t);
77  dN[14] = 0.0625 * (1.0 + r) * (1.0 - t) *
78  (1.0 - r + 6.0 * s - 4.0 * r * s + t + r * t + 2.0 * s * t -
79  4.0 * r * s * t);
80  dN[15] = -0.0625 * (1.0 + r) * (1.0 - t) *
81  (1.0 - r - 6.0 * s + 4.0 * r * s + t + r * t - 2.0 * s * t +
82  4.0 * r * s * t);
83  dN[16] = -0.0625 * (1.0 - r) * (1.0 - t) *
84  (1.0 + r - 6.0 * s - 4.0 * r * s + t - r * t - 2.0 * s * t -
85  4.0 * r * s * t);
86  dN[17] = 0.0;
87  dN[18] =
88  -0.125 * (1.0 - r * r) * (1.0 - t) * (1.0 + 2.0 * s - t + 2.0 * s * t);
89  dN[19] = -0.25 * (1.0 + r) * s * (1.0 - t) * (2.0 - r - r * t);
90  dN[20] =
91  0.125 * (1.0 - r * r) * (1.0 - t) * (1.0 - 2.0 * s - t - 2.0 * s * t);
92  dN[21] = -0.25 * (1.0 - r) * s * (1.0 - t) * (2.0 + r + r * t);
93  dN[22] = -0.25 * (1.0 - r) * (1.0 - t * t);
94  dN[23] = -0.25 * (1.0 + r) * (1.0 - t * t);
95  dN[24] = 0.25 * (1.0 + r) * (1.0 - t * t);
96  dN[25] = 0.25 * (1.0 - r) * (1.0 - t * t);
97 
98  //---dN/dt
99  dN[26] = 0.125 * (1.0 - r) * (1.0 - s) *
100  (1.0 + r + s + 2.0 * t + r * t + s * t + 2.0 * r * s * t);
101  dN[27] = 0.125 * (1.0 + r) * (1.0 - s) *
102  (1.0 - r + s + 2.0 * t - r * t + s * t - 2.0 * r * s * t);
103  dN[28] = 0.125 * (1.0 + r) * (1.0 + s) *
104  (1.0 - r - s + 2.0 * t - r * t - s * t + 2.0 * r * s * t);
105  dN[29] = 0.125 * (1.0 - r) * (1.0 + s) *
106  (1.0 + r - s + 2.0 * t + r * t - s * t - 2.0 * r * s * t);
107  dN[30] = 0.5 + t;
108  dN[31] = -0.25 * (1.0 - r * r) * (1.0 - s) * (1.0 + s * t);
109  dN[32] = -0.25 * (1.0 + r) * (1.0 - s * s) * (1.0 - r * t);
110  dN[33] = -0.25 * (1.0 - r * r) * (1.0 + s) * (1.0 - s * t);
111  dN[34] = -0.25 * (1.0 - r) * (1.0 - s * s) * (1.0 + r * t);
112  dN[35] = -0.5 * (1.0 - r) * (1.0 - s) * t;
113  dN[36] = -0.5 * (1.0 + r) * (1.0 - s) * t;
114  dN[37] = -0.5 * (1.0 + r) * (1.0 + s) * t;
115  dN[38] = -0.5 * (1.0 - r) * (1.0 + s) * t;
116 }
117 
118 } // namespace NumLib
static void computeShapeFunction(const T_X &x, T_N &N)
static void computeGradShapeFunction(const T_X &x, T_N &dN)
static const double r