ParMooN
 All Classes Functions Variables Friends Pages
BF_D_Q_P4_2D.h
1 // ***********************************************************************
2 // P4 element, discontinous, 2D, quadrilateral
3 // ***********************************************************************
4 
5 // base function values
6 static void D_Q_P4_2D_Funct(double xi, double eta, double *values)
7 {
8  double t3, t5, t8, t10, t14, t22, t23, t32;
9 
10  t3 = xi*xi;
11  t5 = 15.0/4.0*t3-5.0/4.0;
12  t8 = eta*eta;
13  t10 = 15.0/4.0*t8-5.0/4.0;
14  t14 = 35.0/4.0*t3*xi-21.0/4.0*xi;
15  t22 = 35.0/4.0*t8*eta-21.0/4.0*eta;
16  t23 = t3*t3;
17  t32 = t8*t8;
18 
19  values[0] = 1.0;
20  values[1] = 3.0*xi;
21  values[2] = 3.0*eta;
22  values[3] = t5;
23  values[4] = 9.0*xi*eta;
24  values[5] = t10;
25  values[6] = t14;
26  values[7] = 3.0*t5*eta;
27  values[8] = 3.0*xi*t10;
28  values[9] = t22;
29  values[10] = 315.0/64.0*t23-135.0/32.0*t3+27.0/64.0;
30  values[11] = 3.0*t14*eta;
31  values[12] = t5*t10;
32  values[13] = 3.0*xi*t22;
33  values[14] = 315.0/64.0*t32-135.0/32.0*t8+27.0/64.0;
34 }
35 
36 // values of the derivatives in xi direction
37 static void D_Q_P4_2D_DeriveXi(double xi, double eta, double *values)
38 {
39  double t3, t5, t8;
40 
41  t3 = xi*xi;
42  t5 = 105.0/4.0*t3-21.0/4.0;
43  t8 = eta*eta;
44 
45  values[0] = 0.0;
46  values[1] = 3.0;
47  values[2] = 0.0;
48  values[3] = 15.0/2.0*xi;
49  values[4] = 9.0*eta;
50  values[5] = 0.0;
51  values[6] = t5;
52  values[7] = 45.0/2.0*xi*eta;
53  values[8] = 45.0/4.0*t8-15.0/4.0;
54  values[9] = 0.0;
55  values[10] = 315.0/16.0*t3*xi-135.0/16.0*xi;
56  values[11] = 3.0*t5*eta;
57  values[12] = 15.0/2.0*xi*(15.0/4.0*t8-5.0/4.0);
58  values[13] = 105.0/4.0*t8*eta-63.0/4.0*eta;
59  values[14] = 0.0;
60 }
61 
62 // values of the derivatives in eta direction
63 static void D_Q_P4_2D_DeriveEta(double xi, double eta, double *values)
64 {
65  double t3, t8, t10;
66 
67  t3 = xi*xi;
68  t8 = eta*eta;
69  t10 = 105.0/4.0*t8-21.0/4.0;
70 
71  values[0] = 0.0;
72  values[1] = 0.0;
73  values[2] = 3.0;
74  values[3] = 0.0;
75  values[4] = 9.0*xi;
76  values[5] = 15.0/2.0*eta;
77  values[6] = 0.0;
78  values[7] = 45.0/4.0*t3-15.0/4.0;
79  values[8] = 45.0/2.0*xi*eta;
80  values[9] = t10;
81  values[10] = 0.0;
82  values[11] = 105.0/4.0*t3*xi-63.0/4.0*xi;
83  values[12] = 15.0/2.0*(15.0/4.0*t3-5.0/4.0)*eta;
84  values[13] = 3.0*xi*t10;
85  values[14] = 315.0/16.0*t8*eta-135.0/16.0*eta;
86 }
87 
88 // values of the derivatives in xi-xi direction
89 static void D_Q_P4_2D_DeriveXiXi(double xi, double eta,
90  double *values)
91 {
92  double t3, t8;
93 
94  t3 = xi*xi;
95  t8 = eta*eta;
96 
97  values[0] = 0.0;
98  values[1] = 0.0;
99  values[2] = 0.0;
100  values[3] = 15.0/2.0;
101  values[4] = 0.0;
102  values[5] = 0.0;
103  values[6] = 105.0/2.0*xi;
104  values[7] = 45.0/2.0*eta;
105  values[8] = 0.0;
106  values[9] = 0.0;
107  values[10] = 945.0/16.0*t3-135.0/16.0;
108  values[11] = 315.0/2.0*xi*eta;
109  values[12] = 225.0/8.0*t8-75.0/8.0;
110  values[13] = 0.0;
111  values[14] = 0.0;
112 }
113 
114 // values of the derivatives in xi-eta direction
115 static void D_Q_P4_2D_DeriveXiEta(double xi, double eta,
116  double *values)
117 {
118  double t3, t8;
119 
120  t3 = xi*xi;
121  t8 = eta*eta;
122 
123  values[0] = 0.0;
124  values[1] = 0.0;
125  values[2] = 0.0;
126  values[3] = 0.0;
127  values[4] = 9.0;
128  values[5] = 0.0;
129  values[6] = 0.0;
130  values[7] = 45.0/2.0*xi;
131  values[8] = 45.0/2.0*eta;
132  values[9] = 0.0;
133  values[10] = 0.0;
134  values[11] = 315.0/4.0*t3-63.0/4.0;
135  values[12] = 225.0/4.0*xi*eta;
136  values[13] = 315.0/4.0*t8-63.0/4.0;
137  values[14] = 0.0;
138 }
139 
140 // values of the derivatives in eta-eta direction
141 static void D_Q_P4_2D_DeriveEtaEta(double xi, double eta,
142  double *values)
143 {
144  double t3, t8;
145 
146  t3 = xi*xi;
147  t8 = eta*eta;
148 
149  values[0] = 0.0;
150  values[1] = 0.0;
151  values[2] = 0.0;
152  values[3] = 0.0;
153  values[4] = 0.0;
154  values[5] = 15.0/2.0;
155  values[6] = 0.0;
156  values[7] = 0.0;
157  values[8] = 45.0/2.0*xi;
158  values[9] = 105.0/2.0*eta;
159  values[10] = 0.0;
160  values[11] = 0.0;
161  values[12] = 225.0/8.0*t3-75.0/8.0;
162  values[13] = 315.0/2.0*xi*eta;
163  values[14] = 945.0/16.0*t8-135.0/16.0;
164 }
165 
166 // ***********************************************************************
167 
168 TBaseFunct2D *BF_D_Q_P4_2D_Obj = new TBaseFunct2D
169  (15, BF_D_Q_P4_2D, BFUnitSquare,
170  D_Q_P4_2D_Funct, D_Q_P4_2D_DeriveXi,
171  D_Q_P4_2D_DeriveEta, D_Q_P4_2D_DeriveXiXi,
172  D_Q_P4_2D_DeriveXiEta, D_Q_P4_2D_DeriveEtaEta, 4, 4,
173  0, NULL);
Definition: BaseFunct2D.h:27