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