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