ParMooN
 All Classes Functions Variables Friends Pages
BF_N_T_RT1_3D.h
1 // ***********************************************************************
2 // Raviart-Thomas element of first order on tetrahedra, 3D
3 // ***********************************************************************
4 
5 static double N_T_RT1_3D_CM[225] = {
6  0,-0,-0,0,0,-0,-0,0,-0,-1.6666667,0.33333333,0.33333333,0,0,0,
7  0,0,0,-1.6666667,0.33333333,0.33333333,0,-0,0,0,0,0,0,0,0,
8  -1.6666667,0.33333333,0.33333333,0,0,0,0,0,0,0,0,0,0,0,0,
9  2.1666667,-0.83333333,-0.33333333,2.1666667,-0.33333333,-0.83333333,-1.1666667,-1.6666667,-1.1666667,5,0.5,0.5,60,30,30,
10  0,0,0,2,0,-2,0,0,0,0,0,0,0,0,0,
11  2,-2,0,0,0,0,0,0,0,0,0,0,0,0,0,
12  0,0,-0,0,0,0,-0,-0,-0,2,-2,-0,0,0,0,
13  2.1666667,-0.33333333,-0.83333333,5,0.5,0.5,-1.6666667,-1.1666667,-1.1666667,2.1666667,-0.83333333,-0.33333333,30,60,30,
14  2,0,-2,0,0,0,0,0,0,0,0,0,0,0,0,
15  0,0,0,0,0,0,0,0,0,2,0,-2,0,0,0,
16  0,0,0,2,-2,0,0,0,0,0,0,0,0,0,0,
17  5,0.5,0.5,2.1666667,-0.83333333,-0.33333333,-1.1666667,-1.1666667,-1.6666667,2.1666667,-0.33333333,-0.83333333,30,30,60,
18  -2.5,2.5,0,-2.5,0,2.5,0.83333333,3.3333333,0.83333333,-3.3333333,-0.83333333,-0.83333333,-60,-30,-30,
19  -2.5,-0,2.5,-3.3333333,-0.83333333,-0.83333333,3.3333333,0.83333333,0.83333333,-2.5,2.5,0,-30,-60,-30,
20  -3.3333333,-0.83333333,-0.83333333,-2.5,2.5,0,0.83333333,0.83333333,3.3333333,-2.5,-0,2.5,-30,-30,-60
21 };
22 
23 static void N_T_RT1_3D_Funct(double xi, double eta, double zeta,
24  double *values)
25 {
26  int nBF = 15; // number of basis functions
27  // monomials x-component, y-component and z-component
28  double mon_x[]={1,0,0,xi,0,0,eta,0,0,zeta,0,0,
29  xi*xi,xi*eta,xi*zeta};
30  double mon_y[]={0,1,0,0,xi,0,0,eta,0,0,zeta,0,
31  xi*eta,eta*eta,eta*zeta};
32  double mon_z[]={0,0,1,0,0,xi,0,0,eta,0,0,zeta,
33  xi*zeta,eta*zeta,zeta*zeta};
34 
35  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
36  for(int i=0; i<nBF; i++)
37  {
38  for(int j=0; j<nBF; j++)
39  {
40  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
41  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
42  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
43  }
44  }
45 }
46 
47 static void N_T_RT1_3D_DeriveXi(double xi, double eta, double zeta,
48  double *values)
49 {
50  int nBF = 15; // number of basis functions
51  // monomials x-component, y-component and z-component
52  double mon_x[]={0,0,0,1,0,0,0,0,0,0,0,0,
53  2*xi,eta,zeta};
54  double mon_y[]={0,0,0,0,1,0,0,0,0,0,0,0,
55  eta,0,0};
56  double mon_z[]={0,0,0,0,0,1,0,0,0,0,0,0,
57  zeta,0,0};
58 
59  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
60  for(int i=0; i<nBF; i++)
61  {
62  for(int j=0; j<nBF; j++)
63  {
64  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
65  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
66  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
67  }
68  }
69 }
70 
71 static void N_T_RT1_3D_DeriveEta(double xi, double eta, double zeta,
72  double *values)
73 {
74  int nBF = 15; // number of basis functions
75  // monomials x-component, y-component and z-component
76  double mon_x[]={0,0,0,0,0,0,1,0,0,0,0,0,
77  0,xi,0};
78  double mon_y[]={0,0,0,0,0,0,0,1,0,0,0,0,
79  xi,2*eta,zeta};
80  double mon_z[]={0,0,0,0,0,0,0,0,1,0,0,0,
81  0,zeta,0};
82 
83  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
84  for(int i=0; i<nBF; i++)
85  {
86  for(int j=0; j<nBF; j++)
87  {
88  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
89  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
90  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
91  }
92  }
93 }
94 
95 static void N_T_RT1_3D_DeriveZeta(double xi, double eta, double zeta,
96  double *values)
97 {
98  int nBF = 15; // number of basis functions
99  // monomials x-component, y-component and z-component
100  double mon_x[]={0,0,0,0,0,0,0,0,0,1,0,0,
101  0,0,xi};
102  double mon_y[]={0,0,0,0,0,0,0,0,0,0,1,0,
103  0,0,eta};
104  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,1,
105  xi,eta,2*zeta};
106 
107  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
108  for(int i=0; i<nBF; i++)
109  {
110  for(int j=0; j<nBF; j++)
111  {
112  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
113  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
114  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
115  }
116  }
117 }
118 
119 static void N_T_RT1_3D_DeriveXiXi(double xi, double eta, double zeta,
120  double *values)
121 {
122  int nBF = 15; // number of basis functions
123  // monomials x-component, y-component and z-component
124  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
125  2,0,0};
126  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
127  0,0,0};
128  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
129  0,0,0};
130 
131  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
132  for(int i=0; i<nBF; i++)
133  {
134  for(int j=0; j<nBF; j++)
135  {
136  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
137  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
138  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
139  }
140  }
141 }
142 
143 static void N_T_RT1_3D_DeriveXiEta(double xi, double eta, double zeta,
144  double *values)
145 {
146  int nBF = 15; // number of basis functions
147  // monomials x-component, y-component and z-component
148  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
149  0,1,0};
150  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
151  1,0,0};
152  double mon_z[]={0,0,0,0,0,1,0,0,0,0,0,0,
153  0,0,0};
154 
155  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
156  for(int i=0; i<nBF; i++)
157  {
158  for(int j=0; j<nBF; j++)
159  {
160  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
161  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
162  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
163  }
164  }
165 }
166 
167 static void N_T_RT1_3D_DeriveXiZeta(double xi, double eta, double zeta,
168  double *values)
169 {
170  int nBF = 15; // number of basis functions
171  // monomials x-component, y-component and z-component
172  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
173  0,0,1};
174  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
175  0,0,0};
176  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
177  1,0,0};
178 
179  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
180  for(int i=0; i<nBF; i++)
181  {
182  for(int j=0; j<nBF; j++)
183  {
184  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
185  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
186  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
187  }
188  }
189 }
190 
191 static void N_T_RT1_3D_DeriveEtaEta(double xi, double eta, double zeta,
192  double *values)
193 {
194  int nBF = 15; // number of basis functions
195  // monomials x-component, y-component and z-component
196  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
197  0,0,0};
198  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
199  0,2,0};
200  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
201  0,0,0};
202 
203  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
204  for(int i=0; i<nBF; i++)
205  {
206  for(int j=0; j<nBF; j++)
207  {
208  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
209  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
210  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
211  }
212  }
213 }
214 
215 static void N_T_RT1_3D_DeriveEtaZeta(double xi, double eta, double zeta,
216  double *values)
217 {
218  int nBF = 15; // number of basis functions
219  // monomials x-component, y-component and z-component
220  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
221  0,0,0};
222  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
223  0,0,1};
224  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
225  0,1,0};
226 
227  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
228  for(int i=0; i<nBF; i++)
229  {
230  for(int j=0; j<nBF; j++)
231  {
232  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
233  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
234  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
235  }
236  }
237 }
238 
239 static void N_T_RT1_3D_DeriveZetaZeta(double xi, double eta, double zeta,
240  double *values)
241 {
242  int nBF = 15; // number of basis functions
243  // monomials x-component, y-component and z-component
244  double mon_x[]={0,0,0,0,0,0,0,0,0,0,0,0,
245  0,0,0};
246  double mon_y[]={0,0,0,0,0,0,0,0,0,0,0,0,
247  0,0,0};
248  double mon_z[]={0,0,0,0,0,0,0,0,0,0,0,0,
249  0,0,2};
250 
251  memset(values, 0.0, 3*nBF*SizeOfDouble); // 3 is the space dimension
252  for(int i=0; i<nBF; i++)
253  {
254  for(int j=0; j<nBF; j++)
255  {
256  values[i ] += N_T_RT1_3D_CM[i+j*nBF]*mon_x[j];
257  values[i+ nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_y[j];
258  values[i+2*nBF] += N_T_RT1_3D_CM[i+j*nBF]*mon_z[j];
259  }
260  }
261 }
262 
263 TBaseFunct3D *BF_N_T_RT1_3D_Obj =
264 new TBaseFunct3D(15, BF_N_T_RT1_3D, BFUnitTetrahedron,
265  N_T_RT1_3D_Funct, N_T_RT1_3D_DeriveXi,
266  N_T_RT1_3D_DeriveEta, N_T_RT1_3D_DeriveZeta,
267  N_T_RT1_3D_DeriveXiXi, N_T_RT1_3D_DeriveXiEta,
268  N_T_RT1_3D_DeriveXiZeta, N_T_RT1_3D_DeriveEtaEta,
269  N_T_RT1_3D_DeriveEtaZeta, N_T_RT1_3D_DeriveZetaZeta,
270  2, 1,
271  0, NULL, 3);
Definition: BaseFunct3D.h:27