SCIRun  5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HexElementsWeights.h
Go to the documentation of this file.
1 //
2 // For more information, please see: http://software.sci.utah.edu
3 //
4 // The MIT License
5 //
6 // Copyright (c) 2009 Scientific Computing and Imaging Institute
7 // University of Utah.
8 //
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26 // DEALINGS IN THE SOFTWARE.
27 
28 
29 #ifndef CORE_BASIS_HEXWEIGHTS_H
30 #define CORE_BASIS_HEXWEIGHTS_H 1
31 
32 namespace SCIRun {
33 namespace Core {
34 namespace Basis {
35 
37 
38 public:
39  template <class VECTOR>
40  void get_linear_weights(const VECTOR& coords, double *w) const
41  {
42  const double x = static_cast<double>(coords[0]), y = static_cast<double>(coords[1]), z = static_cast<double>(coords[2]);
43  w[0] = -((-1 + x)*(-1 + y)*(-1 + z));
44  w[1] = x*(-1 + y)*(-1 + z);
45  w[2] = -(x*y*(-1 + z));
46  w[3] = (-1 + x)*y*(-1 + z);
47  w[4] = (-1 + x)*(-1 + y)*z;
48  w[5] = -(x*(-1 + y)*z);
49  w[6] = x*y*z;
50  w[7] = -((-1 + x)*y*z);
51  }
52 
53  /// get derivative weight factors at parametric coordinate
54  template <class VECTOR>
55  void get_linear_derivate_weights(const VECTOR& coords, double *w) const
56  {
57  const double x = static_cast<double>(coords[0]), y = static_cast<double>(coords[1]), z = static_cast<double>(coords[2]);
58  w[0]=(-1 + y + z - y * z);
59  w[1]= (-1 + y) * (-1 + z);
60  w[2]= (y - y * z);
61  w[3]= y * (-1 + z);
62  w[4]= (-1 + y) * z;
63  w[5]= (z - y * z);
64  w[6]= y * z;
65  w[7]= -(y * z);
66  w[8]=(-1 + x + z - x * z);
67  w[9]= x * (-1 + z);
68  w[10]= (x - x * z);
69  w[11]= (-1 + x) * (-1 + z);
70  w[12]= (-1 + x) * z;
71  w[13]= -(x * z);
72  w[14]= x * z;
73  w[15]= (z - x * z);
74  w[16]=(-1 + x + y - x * y);
75  w[17]= x * (-1 + y);
76  w[18]= -(x * y);
77  w[19]= (-1 + x) * y;
78  w[20]= (-1 + x) * (-1 + y);
79  w[21]= (x - x * y);
80  w[22]= x * y;
81  w[23]= (y - x * y);
82 
83  }
84 
85  /// get weight factors at parametric coordinate
86  template< class VECTOR>
87  void get_quadratic_weights(const VECTOR& coords, double *w) const
88  {
89  const double x=static_cast<double>(coords[0]), y=static_cast<double>(coords[1]), z=static_cast<double>(coords[2]);
90  w[0] = (-1 + x)*(-1 + y)*(-1 + z)*(-1 + 2*x + 2*y + 2*z);
91  w[1] = +x*(-1 + y)*(-1 + 2*x - 2*y - 2*z)*(-1 + z);
92  w[2] = -x*y*(-3 + 2*x + 2*y - 2*z)*(-1 + z);
93  w[3] = -(-1 + x)*y*(-1 + z)*(1 + 2*x - 2*y + 2*z);
94  w[4] = -(-1 + x)*(-1 + y)*(1 + 2*x + 2*y - 2*z)*z;
95  w[5] = +x*(-1 + y)*(3 - 2*x + 2*y - 2*z)*z;
96  w[6] = +x*y*z*(-5 + 2*x + 2*y + 2*z);
97  w[7] = +(-1 + x)*y*(3 + 2*x - 2*y - 2*z)*z;
98  w[8] = -4*(-1 + x)*x*(-1 + y)*(-1 + z);
99  w[9] = +4*x*(-1 +y)*y*(-1 + z);
100  w[10] = +4*(-1 + x)*x*y*(-1 + z);
101  w[11] = -4*(-1 + x)*(-1 + y)*y*(-1 + z);
102  w[12] = -4*(-1 + x)*(-1 + y)*(-1 + z)*z;
103  w[13] = +4*x*(-1 + y)*(-1 + z)*z;
104  w[14] = +4*(-1 + x)*y*(-1 + z)*z;
105  w[15] = -4*x*y*(-1 + z)*z;
106  w[16] = +4*(-1 + x)*x*(-1 + y)*z;
107  w[17] = -4*x*(-1 + y)*y*z;
108  w[18] = -4*(-1 + x)*x*y*z;
109  w[19] = +4*(-1 + x)*(-1 + y)*y*z;
110  }
111 
112  /// get weight factors of derivative at parametric coordinate
113  template< class VECTOR>
114  void get_quadratic_derivate_weights(const VECTOR& coords, double *w) const
115  {
116  const double x=static_cast<double>(coords[0]), y=static_cast<double>(coords[1]), z=static_cast<double>(coords[2]);
117  w[0]=(-1 + y)*(-1 + z)*(-3 + 4*x + 2*y + 2*z);
118  w[1]=-((-1 + y)*(-1 + z)*(1 - 4*x + 2*y + 2*z));
119  w[2]=-(y*(-3 + 4*x + 2*y - 2*z)*(-1 + z));
120  w[3]=+y*(1 - 4*x + 2*y - 2*z)*(-1 + z);
121  w[4]=-((-1 + y)*(-1 + 4*x + 2*y - 2*z)*z);
122  w[5]=+(-1 + y)*(3 - 4*x + 2*y - 2*z)*z;
123  w[6]=+y*z*(-5 + 4*x + 2*y + 2*z);
124  w[7]=+y*(1 + 4*x - 2*y - 2*z)*z;
125  w[8]=-4*(-1 + 2*x)*(-1 + y)*(-1 + z);
126  w[9]=+4*(-1 + y)*y*(-1 + z);
127  w[10]=+4*(-1 + 2*x)*y*(-1 + z);
128  w[11]=+4*y*(-1 + y + z - y*z);
129  w[12]=+4*z*(-1 + y + z - y*z);
130  w[13]=+4*(-1 + y)*(-1 + z)*z;
131  w[14]=+4*y*(-1 + z)*z;
132  w[15]=-4*y*(-1 + z)*z;
133  w[16]=+4*(-1 + 2*x)*(-1 + y)*z;
134  w[17]=-4*(-1 + y)*y*z;
135  w[18]=+4*(1 - 2*x)*y*z;
136  w[19]=+4*(-1 + y)*y*z;
137 
138  w[20]=(-1 + x)*(-1 + z)*(-3 + 2*x + 4*y + 2*z);
139  w[21]=+x*(1 + 2*x - 4*y - 2*z)*(-1 + z);
140  w[22]=-(x*(-3 + 2*x + 4*y - 2*z)*(-1 + z));
141  w[23]=-((-1 + x)*(-1 + z)*(1 + 2*x - 4*y + 2*z));
142  w[24]=-((-1 + x)*(-1 + 2*x + 4*y - 2*z)*z);
143  w[25]=+x*(1 - 2*x + 4*y - 2*z)*z;
144  w[26]=+x*z*(-5 + 2*x + 4*y + 2*z);
145  w[27]=+(-1 + x)*(3 + 2*x - 4*y - 2*z)*z;
146  w[28]=+4*x*(-1 + x + z - x*z);
147  w[29]=+4*x*(-1 + 2*y)*(-1 + z);
148  w[30]=+4*(-1 + x)*x*(-1 + z);
149  w[31]=-4*(-1 + x)*(-1 + 2*y)*(-1 + z);
150  w[32]=+4*z*(-1 + x + z - x*z);
151  w[33]=+4*x*(-1 + z)*z;
152  w[34]=+4*(-1 + x)*(-1 + z)*z;
153  w[35]=-4*x*(-1 + z)*z;
154  w[36]=+4*(-1 + x)*x*z;
155  w[37]=+4*x*(1 - 2*y)*z;
156  w[38]=-4*(-1 + x)*x*z;
157  w[39]=+4*(-1 + x)*(-1 + 2*y)*z;
158 
159  w[40]=(-1 + x)*(-1 + y)*(-3 + 2*x + 2*y + 4*z);
160  w[41]=+x*(-1 + y)*(1 + 2*x - 2*y - 4*z);
161  w[42]=+x*y*(1 - 2*x - 2*y + 4*z);
162  w[43]=-((-1 + x)*y*(-1 + 2*x - 2*y + 4*z));
163  w[44]=-((-1 + x)*(-1 + y)*(1 + 2*x + 2*y - 4*z));
164  w[45]=+x*(-1 + y)*(3 - 2*x + 2*y - 4*z);
165  w[46]=+x*y*(-5 + 2*x + 2*y + 4*z);
166  w[47]=+(-1 + x)*y*(3 + 2*x - 2*y - 4*z);
167  w[48]=+4*x*(-1 + x + y - x*y);
168  w[49]=+4*x*(-1 + y)*y;
169  w[50]=+4*(-1 + x)*x*y;
170  w[51]=+4*y*(-1 + x + y - x*y);
171  w[52]=-4*(-1 + x)*(-1 + y)*(-1 + 2*z);
172  w[53]=+4*x*(-1 + y)*(-1 + 2*z);
173  w[54]=+4*(-1 + x)*y*(-1 + 2*z);
174  w[55]=+4*x*y*(1 - 2*z);
175  w[56]=+4*(-1 + x)*x*(-1 + y);
176  w[57]=-4*x*(-1 + y)*y;
177  w[58]=-4*(-1 + x)*x*y;
178  w[59]=+4*(-1 + x)*(-1 + y)*y;
179 
180  }
181 
182 
183  template <class VECTOR>
184  void get_cubic_weights(const VECTOR &coords, unsigned int elem, double *w) const
185  {
186  const double x=static_cast<double>(coords[0]), y=static_cast<double>(coords[1]), z=static_cast<double>(coords[2]);
187  const double x2=x*x;
188  const double y2=y*y;
189  const double z2=z*z;
190  const double x12=(x-1)*(x-1);
191  const double y12=(y-1)*(y-1);
192  const double z12=(z-1)*(z-1);
193 
194  w[0] = x12*(1 + 2*x)*y12*(1 + 2*y)*z12*(1 + 2*z);
195  w[1] = +x12*x*y12*(1 + 2*y)*z12*(1 + 2*z);
196  w[2] = +x12*(1 + 2*x)*y12*y*z12*(1 + 2*z);
197  w[3] = +x12*(1 + 2*x)*y12*(1 + 2*y)*z12*z;
198  w[4] = +x12*x*y12*y*z12*(1 + 2*z);
199  w[5] = +x12*(1 + 2*x)*y12*y*z12*z;
200  w[6] = +x12*x*y12*(1 + 2*y)*z12*z;
201  w[7] = +x12*x*y12*y*z12*z;
202  w[8] = -(x2*(-3 + 2*x)*y12*(1 + 2*y)*z12*(1 + 2*z));
203  w[9] = +(-1 + x)*x2*y12*(1 + 2*y)*z12*(1 + 2*z);
204  w[10] = -(x2*(-3 + 2*x)*y12*y*z12*(1 + 2*z));
205  w[11] = -(x2*(-3 + 2*x)*y12*(1 + 2*y)*z12*z);
206  w[12] = +(-1 + x)*x2*y12*y*z12*(1 + 2*z);
207  w[13] = -(x2*(-3 + 2*x)*y12*y*z12*z) ;
208  w[14] = +(-1 + x)*x2*y12*(1 + 2*y)*z12*z;
209  w[15] = +(-1 + x)*x2*y12*y*z12*z;
210  w[16] = +x2*(-3 + 2*x)*y2*(-3 + 2*y)*z12*(1 + 2*z);
211  w[17] = -((-1 + x)*x2*y2*(-3 + 2*y)*z12*(1 + 2*z));
212  w[18] = -(x2*(-3 + 2*x)*(-1 + y)*y2*z12*(1 + 2*z));
213  w[19] = +x2*(-3 + 2*x)*y2*(-3 + 2*y)*z12*z;
214  w[20] = +(-1 + x)*x2*(-1 + y)*y2*z12*(1 + 2*z);
215  w[21] = -(x2*(-3 + 2*x)*(-1 + y)*y2*z12*z);
216  w[22] = -((-1 + x)*x2*y2*(-3 + 2*y)*z12*z);
217  w[23] = +(-1 + x)*x2*(-1 + y)*y2*z12*z;
218  w[24] = -(x12*(1 + 2*x)*y2*(-3 + 2*y)*z12*(1 + 2*z));
219  w[25] = -(x12*x*y2*(-3 + 2*y)*z12*(1 + 2*z));
220  w[26] = +x12*(1 + 2*x)*(-1 + y)*y2*z12*(1 + 2*z);
221  w[27] = -(x12*(1 + 2*x)*y2*(-3 + 2*y)*z12*z);
222  w[28] = +x12*x*(-1 + y)*y2*z12*(1 + 2*z);
223  w[29] = +x12*(1 + 2*x)*(-1 + y)*y2*z12*z;
224  w[30] = -(x12*x*y2*(-3 + 2*y)*z12*z);
225  w[31] = +x12*x*(-1 + y)*y2*z12*z;
226  w[32] = -(x12*(1 + 2*x)*y12*(1 + 2*y)*z2*(-3 + 2*z));
227  w[33] = -(x12*x*y12*(1 + 2*y)*z2*(-3 + 2*z));
228  w[34] = -(x12*(1 + 2*x)*y12*y*z2*(-3 + 2*z));
229  w[35] = +x12*(1 + 2*x)*y12*(1 + 2*y)*(-1 + z)*z2;
230  w[36] = -(x12*x*y12*y*z2*(-3 + 2*z));
231  w[37] = +x12*(1 + 2*x)*y12*y*(-1 + z)*z2;
232  w[38] = +x12*x*y12*(1 + 2*y)*(-1 + z)*z2;
233  w[39] = +x12*x*y12*y*(-1 + z)*z2;
234  w[40] = +x2*(-3 + 2*x)*y12*(1 + 2*y)*z2*(-3 + 2*z);
235  w[41] = -((-1 + x)*x2*y12*(1 + 2*y)*z2*(-3 + 2*z));
236  w[42] = +x2*(-3 + 2*x)*y12*y*z2*(-3 + 2*z);
237  w[43] = -(x2*(-3 + 2*x)*y12*(1 + 2*y)*(-1 + z)*z2);
238  w[44] = -((-1 + x)*x2*y12*y*z2*(-3 + 2*z));
239  w[45] = -(x2*(-3 + 2*x)*y12*y*(-1 + z)*z2);
240  w[46] = +(-1 + x)*x2*y12*(1 + 2*y)*(-1 + z)*z2;
241  w[47] = +(-1 + x)*x2*y12*y*(-1 + z)*z2;
242  w[48] = -(x2*(-3 + 2*x)*y2*(-3 + 2*y)*z2*(-3 + 2*z));
243  w[49] = +(-1 + x)*x2*y2*(-3 + 2*y)*z2*(-3 + 2*z);
244  w[50] = +x2*(-3 + 2*x)*(-1 + y)*y2*z2*(-3 + 2*z);
245  w[51] = +x2*(-3 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z2;
246  w[52] = -((-1 + x)*x2*(-1 + y)*y2*z2*(-3 + 2*z));
247  w[53] = -(x2*(-3 + 2*x)*(-1 + y)*y2*(-1 + z)*z2);
248  w[54] = -((-1 + x)*x2*y2*(-3 + 2*y)*(-1 + z)*z2);
249  w[55] = +(-1 + x)*x2*(-1 + y)*y2*(-1 + z)*z2;
250  w[56] = +x12*(1 + 2*x)*y2*(-3 + 2*y)*z2*(-3 + 2*z);
251  w[57] = +x12*x*y2*(-3 + 2*y)*z2*(-3 + 2*z);
252  w[58] = -(x12*(1 + 2*x)*(-1 + y)*y2*z2*(-3 + 2*z));
253  w[59] = -(x12*(1 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z2);
254  w[60] = -(x12*x*(-1 + y)*y2*z2*(-3 + 2*z));
255  w[61] = +x12*(1 + 2*x)*(-1 + y)*y2*(-1 + z)*z2;
256  w[62] = -(x12*x*y2*(-3 + 2*y)*(-1 + z)*z2);
257  w[63] = +x12*x*(-1 + y)*y2*(-1 + z)*z2;
258  }
259 
260  /// get derivative weight factors at parametric coordinate
261  template <class VECTOR>
262  void get_cubic_derivate_weights(const VECTOR &coords, unsigned int elem, double *w) const
263  {
264  const double x=static_cast<double>(coords[0]), y=static_cast<double>(coords[1]), z=static_cast<double>(coords[2]);
265  const double x2=x*x;
266  const double y2=y*y;
267  const double z2=z*z;
268  const double x12=(x-1)*(x-1);
269  const double y12=(y-1)*(y-1);
270  const double z12=(z-1)*(z-1);
271 
272  w[0]=6*(-1 + x)*x*y12*(1 + 2*y)*z12*(1 + 2*z);
273  w[1]=+(1 - 4*x + 3*x2)*y12*(1 + 2*y)*z12*(1 + 2*z);
274  w[2]=+6*(-1 + x)*x*y12*y*z12*(1 + 2*z);
275  w[3]=+6*(-1 + x)*x*y12*(1 + 2*y)*z12*z;
276  w[4]=+(1 - 4*x + 3*x2)*y12*y*z12*(1 + 2*z);
277  w[5]=+6*(-1 + x)*x*y12*y*z12*z;
278  w[6]=+(1 - 4*x + 3*x2)*y12*(1 + 2*y)*z12*z;
279  w[7]=+(1 - 4*x + 3*x2)*y12*y*z12*z;
280  w[8]=-6*(-1 + x)*x*y12*(1 + 2*y)*z12*(1 + 2*z);
281  w[9]=+x*(-2 + 3*x)*y12*(1 + 2*y)*z12*(1 + 2*z);
282  w[10]=-6*(-1 + x)*x*y12*y*z12*(1 + 2*z);
283  w[11]=-6*(-1 + x)*x*y12*(1 + 2*y)*z12*z;
284  w[12]=+x*(-2 + 3*x)*y12*y*z12*(1 + 2*z);
285  w[13]=-6*(-1 + x)*x*y12*y*z12*z;
286  w[14]=+x*(-2 + 3*x)*y12*(1 + 2*y)*z12*z;
287  w[15]=+x*(-2 + 3*x)*y12*y*z12*z;
288  w[16]=+6*(-1 + x)*x*y2*(-3 + 2*y)*z12*(1 + 2*z);
289  w[17]=-(x*(-2 + 3*x)*y2*(-3 + 2*y)*z12*(1 + 2*z));
290  w[18]=-6*(-1 + x)*x*(-1 + y)*y2*z12*(1 + 2*z);
291  w[19]=+6*(-1 + x)*x*y2*(-3 + 2*y)*z12*z;
292  w[20]=+x*(-2 + 3*x)*(-1 + y)*y2*z12*(1 + 2*z);
293  w[21]=-6*(-1 + x)*x*(-1 + y)*y2*z12*z;
294  w[22]=-(x*(-2 + 3*x)*y2*(-3 + 2*y)*z12*z);
295  w[23]=+x*(-2 + 3*x)*(-1 + y)*y2*z12*z;
296  w[24]=-6*(-1 + x)*x*y2*(-3 + 2*y)*z12*(1 + 2*z);
297  w[25]=-((1 - 4*x + 3*x2)*y2*(-3 + 2*y)*z12*(1 + 2*z));
298  w[26]=+6*(-1 + x)*x*(-1 + y)*y2*z12*(1 + 2*z);
299  w[27]=-6*(-1 + x)*x*y2*(-3 + 2*y)*z12*z;
300  w[28]=+(1 - 4*x + 3*x2)*(-1 + y)*y2*z12*(1 + 2*z);
301  w[29]=+6*(-1 + x)*x*(-1 + y)*y2*z12*z;
302  w[30]=-((1 - 4*x + 3*x2)*y2*(-3 + 2*y)*z12*z);
303  w[31]=+(1 - 4*x + 3*x2)*(-1 + y)*y2*z12*z;
304  w[32]=-6*(-1 + x)*x*y12*(1 + 2*y)*z2*(-3 + 2*z);
305  w[33]=-((1 - 4*x + 3*x2)*y12*(1 + 2*y)*z2*(-3 + 2*z));
306  w[34]=-6*(-1 + x)*x*y12*y*z2*(-3 + 2*z);
307  w[35]=+6*(-1 + x)*x*y12*(1 + 2*y)*(-1 + z)*z2;
308  w[36]=-((1 - 4*x + 3*x2)*y12*y*z2*(-3 + 2*z));
309  w[37]=+6*(-1 + x)*x*y12*y*(-1 + z)*z2;
310  w[38]=+(1 - 4*x + 3*x2)*y12*(1 + 2*y)*(-1 + z)*z2;
311  w[39]=+(1 - 4*x + 3*x2)*y12*y*(-1 + z)*z2;
312  w[40]=+6*(-1 + x)*x*y12*(1 + 2*y)*z2*(-3 + 2*z);
313  w[41]=-(x*(-2 + 3*x)*y12*(1 + 2*y)*z2*(-3 + 2*z));
314  w[42]=+6*(-1 + x)*x*y12*y*z2*(-3 + 2*z);
315  w[43]=-6*(-1 + x)*x*y12*(1 + 2*y)*(-1 + z)*z2;
316  w[44]=-(x*(-2 + 3*x)*y12*y*z2*(-3 + 2*z));
317  w[45]=-6*(-1 + x)*x*y12*y*(-1 + z)*z2;
318  w[46]=+x*(-2 + 3*x)*y12*(1 + 2*y)*(-1 + z)*z2;
319  w[47]=+x*(-2 + 3*x)*y12*y*(-1 + z)*z2;
320  w[48]=-6*(-1 + x)*x*y2*(-3 + 2*y)*z2*(-3 + 2*z);
321  w[49]=+x*(-2 + 3*x)*y2*(-3 + 2*y)*z2*(-3 + 2*z);
322  w[50]=+6*(-1 + x)*x*(-1 + y)*y2*z2*(-3 + 2*z);
323  w[51]=+6*(-1 + x)*x*y2*(-3 + 2*y)*(-1 + z)*z2;
324  w[52]=-(x*(-2 + 3*x)*(-1 + y)*y2*z2*(-3 + 2*z));
325  w[53]=-6*(-1 + x)*x*(-1 + y)*y2*(-1 + z)*z2;
326  w[54]=-(x*(-2 + 3*x)*y2*(-3 + 2*y)*(-1 + z)*z2);
327  w[55]=+x*(-2 + 3*x)*(-1 + y)*y2*(-1 + z)*z2;
328  w[56]=+6*(-1 + x)*x*y2*(-3 + 2*y)*z2*(-3 + 2*z);
329  w[57]=+(1 - 4*x + 3*x2)*y2*(-3 + 2*y)*z2*(-3 + 2*z);
330  w[58]=-6*(-1 + x)*x*(-1 + y)*y2*z2*(-3 + 2*z);
331  w[59]=-6*(-1 + x)*x*y2*(-3 + 2*y)*(-1 + z)*z2;
332  w[60]=-((1 - 4*x + 3*x2)*(-1 + y)*y2*z2*(-3 + 2*z));
333  w[61]=+6*(-1 + x)*x*(-1 + y)*y2*(-1 + z)*z2;
334  w[62]=-((1 - 4*x + 3*x2)*y2*(-3 + 2*y)*(-1 + z)*z2);
335  w[63]=+(1 - 4*x + 3*x2)*(-1 + y)*y2*(-1 + z)*z2;
336 
337  w[64]=6*x12*(1 + 2*x)*(-1 + y)*y*z12*(1 + 2*z);
338  w[65]=+6*x12*x*(-1 + y)*y*z12*(1 + 2*z);
339  w[66]=+x12*(1 + 2*x)*(1 - 4*y + 3*y2)*z12*(1 + 2*z);
340  w[67]=+6*x12*(1 + 2*x)*(-1 + y)*y*z12*z;
341  w[68]=+x12*x*(1 - 4*y + 3*y2)*z12*(1 + 2*z);
342  w[69]=+x12*(1 + 2*x)*(1 - 4*y + 3*y2)*z12*z;
343  w[70]=+6*x12*x*(-1 + y)*y*z12*z;
344  w[71]=+x12*x*(1 - 4*y + 3*y2)*z12*z;
345  w[72]=-6*x2*(-3 + 2*x)*(-1 + y)*y*z12*(1 + 2*z);
346  w[73]=+6*(-1 + x)*x2*(-1 + y)*y*z12*(1 + 2*z);
347  w[74]=-(x2*(-3 + 2*x)*(1 - 4*y + 3*y2)*z12*(1 + 2*z));
348  w[75]=-6*x2*(-3 + 2*x)*(-1 + y)*y*z12*z;
349  w[76]=+(-1 + x)*x2*(1 - 4*y + 3*y2)*z12*(1 + 2*z);
350  w[77]=-(x2*(-3 + 2*x)*(1 - 4*y + 3*y2)*z12*z);
351  w[78]=+6*(-1 + x)*x2*(-1 + y)*y*z12*z;
352  w[79]=+(-1 + x)*x2*(1 - 4*y + 3*y2)*z12*z;
353  w[80]=+6*x2*(-3 + 2*x)*(-1 + y)*y*z12*(1 + 2*z);
354  w[81]=-6*(-1 + x)*x2*(-1 + y)*y*z12*(1 + 2*z);
355  w[82]=-(x2*(-3 + 2*x)*y*(-2 + 3*y)*z12*(1 + 2*z));
356  w[83]=+6*x2*(-3 + 2*x)*(-1 + y)*y*z12*z;
357  w[84]=+(-1 + x)*x2*y*(-2 + 3*y)*z12*(1 + 2*z);
358  w[85]=-(x2*(-3 + 2*x)*y*(-2 + 3*y)*z12*z);
359  w[86]=-6*(-1 + x)*x2*(-1 + y)*y*z12*z;
360  w[87]=+(-1 + x)*x2*y*(-2 + 3*y)*z12*z;
361  w[88]=-6*x12*(1 + 2*x)*(-1 + y)*y*z12*(1 + 2*z);
362  w[89]=-6*x12*x*(-1 + y)*y*z12*(1 + 2*z);
363  w[90]=+x12*(1 + 2*x)*y*(-2 + 3*y)*z12*(1 + 2*z);
364  w[91]=-6*x12*(1 + 2*x)*(-1 + y)*y*z12*z;
365  w[92]=+x12*x*y*(-2 + 3*y)*z12*(1 + 2*z);
366  w[93]=+x12*(1 + 2*x)*y*(-2 + 3*y)*z12*z;
367  w[94]=-6*x12*x*(-1 + y)*y*z12*z;
368  w[95]=+x12*x*y*(-2 + 3*y)*z12*z;
369  w[96]=-6*x12*(1 + 2*x)*(-1 + y)*y*z2*(-3 + 2*z);
370  w[97]=-6*x12*x*(-1 + y)*y*z2*(-3 + 2*z);
371  w[98]=-(x12*(1 + 2*x)*(1 - 4*y + 3*y2)*z2*(-3 + 2*z));
372  w[99]=+6*x12*(1 + 2*x)*(-1 + y)*y*(-1 + z)*z2;
373  w[100]=-(x12*x*(1 - 4*y + 3*y2)*z2*(-3 + 2*z));
374  w[101]=+x12*(1 + 2*x)*(1 - 4*y + 3*y2)*(-1 + z)*z2;
375  w[102]=+6*x12*x*(-1 + y)*y*(-1 + z)*z2;
376  w[103]=+x12*x*(1 - 4*y + 3*y2)*(-1 + z)*z2;
377  w[104]=+6*x2*(-3 + 2*x)*(-1 + y)*y*z2*(-3 + 2*z);
378  w[105]=-6*(-1 + x)*x2*(-1 + y)*y*z2*(-3 + 2*z);
379  w[106]=+x2*(-3 + 2*x)*(1 - 4*y + 3*y2)*z2*(-3 + 2*z);
380  w[107]=-6*x2*(-3 + 2*x)*(-1 + y)*y*(-1 + z)*z2;
381  w[108]=-((-1 + x)*x2*(1 - 4*y + 3*y2)*z2*(-3 + 2*z));
382  w[109]=-(x2*(-3 + 2*x)*(1 - 4*y + 3*y2)*(-1 + z)*z2);
383  w[110]=+6*(-1 + x)*x2*(-1 + y)*y*(-1 + z)*z2;
384  w[111]=+(-1 + x)*x2*(1 - 4*y + 3*y2)*(-1 + z)*z2;
385  w[112]=-6*x2*(-3 + 2*x)*(-1 + y)*y*z2*(-3 + 2*z);
386  w[113]=+6*(-1 + x)*x2*(-1 + y)*y*z2*(-3 + 2*z);
387  w[114]=+x2*(-3 + 2*x)*y*(-2 + 3*y)*z2*(-3 + 2*z);
388  w[115]=+6*x2*(-3 + 2*x)*(-1 + y)*y*(-1 + z)*z2;
389  w[116]=-((-1 + x)*x2*y*(-2 + 3*y)*z2*(-3 + 2*z));
390  w[117]=-(x2*(-3 + 2*x)*y*(-2 + 3*y)*(-1 + z)*z2);
391  w[118]=-6*(-1 + x)*x2*(-1 + y)*y*(-1 + z)*z2;
392  w[119]=+(-1 + x)*x2*y*(-2 + 3*y)*(-1 + z)*z2;
393  w[120]=+6*x12*(1 + 2*x)*(-1 + y)*y*z2*(-3 + 2*z);
394  w[121]=+6*x12*x*(-1 + y)*y*z2*(-3 + 2*z);
395  w[122]=-(x12*(1 + 2*x)*y*(-2 + 3*y)*z2*(-3 + 2*z));
396  w[123]=-6*x12*(1 + 2*x)*(-1 + y)*y*(-1 + z)*z2;
397  w[124]=-(x12*x*y*(-2 + 3*y)*z2*(-3 + 2*z));
398  w[125]=+x12*(1 + 2*x)*y*(-2 + 3*y)*(-1 + z)*z2;
399  w[126]=-6*x12*x*(-1 + y)*y*(-1 + z)*z2;
400  w[127]=+x12*x*y*(-2 + 3*y)*(-1 + z)*z2;
401 
402  w[128]=6*x12*(1 + 2*x)*y12*(1 + 2*y)*(-1 + z);
403  w[129]=+6*x12*x*y12*(1 + 2*y)*(-1 + z)*z;
404  w[130]=+6*x12*(1 + 2*x)*y12*y*(-1 + z)*z;
405  w[131]=+x12*(1 + 2*x)*y12*(1 + 2*y)*(1 - 4*z + 3*z2);
406  w[132]=+6*x12*x*y12*y*(-1 + z)*z;
407  w[133]=+x12*(1 + 2*x)*y12*y*(1 - 4*z + 3*z2);
408  w[134]=+x12*x*y12*(1 + 2*y)*(1 - 4*z + 3*z2);
409  w[135]=+x12*x*y12*y*(1 - 4*z + 3*z2);
410  w[136]=-6*x2*(-3 + 2*x)*y12*(1 + 2*y)*(-1 + z)*z;
411  w[137]=+6*(-1 + x)*x2*y12*(1 + 2*y)*(-1 + z)*z;
412  w[138]=-6*x2*(-3 + 2*x)*y12*y*(-1 + z)*z;
413  w[139]=-(x2*(-3 + 2*x)*y12*(1 + 2*y)*(1 - 4*z + 3*z2));
414  w[140]=+6*(-1 + x)*x2*y12*y*(-1 + z)*z;
415  w[141]=-(x2*(-3 + 2*x)*y12*y*(1 - 4*z + 3*z2));
416  w[142]=+(-1 + x)*x2*y12*(1 + 2*y)*(1 - 4*z + 3*z2);
417  w[143]=+(-1 + x)*x2*y12*y*(1 - 4*z + 3*z2);
418  w[144]=+6*x2*(-3 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z;
419  w[145]=-6*(-1 + x)*x2*y2*(-3 + 2*y)*(-1 + z)*z;
420  w[146]=-6*x2*(-3 + 2*x)*(-1 + y)*y2*(-1 + z)*z;
421  w[147]=+x2*(-3 + 2*x)*y2*(-3 + 2*y)*(1 - 4*z + 3*z2);
422  w[148]=+6*(-1 + x)*x2*(-1 + y)*y2*(-1 + z)*z;
423  w[149]=-(x2*(-3 + 2*x)*(-1 + y)*y2*(1 - 4*z + 3*z2));
424  w[150]=-((-1 + x)*x2*y2*(-3 + 2*y)*(1 - 4*z + 3*z2));
425  w[151]=+(-1 + x)*x2*(-1 + y)*y2*(1 - 4*z + 3*z2);
426  w[152]=-6*x12*(1 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z;
427  w[153]=-6*x12*x*y2*(-3 + 2*y)*(-1 + z)*z;
428  w[154]=+6*x12*(1 + 2*x)*(-1 + y)*y2*(-1 + z)*z;
429  w[155]=-(x12*(1 + 2*x)*y2*(-3 + 2*y)*(1 - 4*z + 3*z2));
430  w[156]=+6*x12*x*(-1 + y)*y2*(-1 + z)*z;
431  w[157]=+x12*(1 + 2*x)*(-1 + y)*y2*(1 - 4*z + 3*z2);
432  w[158]=-(x12*x*y2*(-3 + 2*y)*(1 - 4*z + 3*z2));
433  w[159]=+x12*x*(-1 + y)*y2*(1 - 4*z + 3*z2);
434  w[160]=-6*x12*(1 + 2*x)*y12*(1 + 2*y)*(-1 + z)*z;
435  w[161]=-6*x12*x*y12*(1 + 2*y)*(-1 + z)*z;
436  w[162]=-6*x12*(1 + 2*x)*y12*y*(-1 + z)*z;
437  w[163]=+x12*(1 + 2*x)*y12*(1 + 2*y)*z*(-2 + 3*z);
438  w[164]=-6*x12*x*y12*y*(-1 + z)*z;
439  w[165]=+x12*(1 + 2*x)*y12*y*z*(-2 + 3*z);
440  w[166]=+x12*x*y12*(1 + 2*y)*z*(-2 + 3*z);
441  w[167]=+x12*x*y12*y*z*(-2 + 3*z);
442  w[168]=+6*x2*(-3 + 2*x)*y12*(1 + 2*y)*(-1 + z)*z;
443  w[169]=-6*(-1 + x)*x2*y12*(1 + 2*y)*(-1 + z)*z;
444  w[170]=+6*x2*(-3 + 2*x)*y12*y*(-1 + z)*z;
445  w[171]=-(x2*(-3 + 2*x)*y12*(1 + 2*y)*z*(-2 + 3*z));
446  w[172]=-6*(-1 + x)*x2*y12*y*(-1 + z)*z;
447  w[173]=-(x2*(-3 + 2*x)*y12*y*z*(-2 + 3*z));
448  w[174]=+(-1 + x)*x2*y12*(1 + 2*y)*z*(-2 + 3*z);
449  w[175]=+(-1 + x)*x2*y12*y*z*(-2 + 3*z);
450  w[176]=-6*x2*(-3 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z;
451  w[177]=+6*(-1 + x)*x2*y2*(-3 + 2*y)*(-1 + z)*z;
452  w[178]=+6*x2*(-3 + 2*x)*(-1 + y)*y2*(-1 + z)*z;
453  w[179]=+x2*(-3 + 2*x)*y2*(-3 + 2*y)*z*(-2 + 3*z);
454  w[180]=-6*(-1 + x)*x2*(-1 + y)*y2*(-1 + z)*z;
455  w[181]=-(x2*(-3 + 2*x)*(-1 + y)*y2*z*(-2 + 3*z));
456  w[182]=-((-1 + x)*x2*y2*(-3 + 2*y)*z*(-2 + 3*z));
457  w[183]=+(-1 + x)*x2*(-1 + y)*y2*z*(-2 + 3*z);
458  w[184]=+6*x12*(1 + 2*x)*y2*(-3 + 2*y)*(-1 + z)*z;
459  w[185]=+6*x12*x*y2*(-3 + 2*y)*(-1 + z)*z;
460  w[186]=-6*x12*(1 + 2*x)*(-1 + y)*y2*(-1 + z)*z;
461  w[187]=-(x12*(1 + 2*x)*y2*(-3 + 2*y)*z*(-2 + 3*z));
462  w[188]=-6*x12*x*(-1 + y)*y2*(-1 + z)*z;
463  w[189]=+x12*(1 + 2*x)*(-1 + y)*y2*z*(-2 + 3*z);
464  w[190]=-(x12*x*y2*(-3 + 2*y)*z*(-2 + 3*z));
465  w[191]=+x12*x*(-1 + y)*y2*z*(-2 + 3*z);
466  }
467 
468 
469  inline int num_derivs() { return 3; }
470  inline int num_hderivs() { return 7; }
471 };
472 
473 }}}
474 
475 #endif
476 
void get_cubic_derivate_weights(const VECTOR &coords, unsigned int elem, double *w) const
get derivative weight factors at parametric coordinate
Definition: HexElementsWeights.h:262
Definition: HexElementsWeights.h:36
void get_linear_weights(const VECTOR &coords, double *w) const
Definition: HexElementsWeights.h:40
void get_quadratic_weights(const VECTOR &coords, double *w) const
get weight factors at parametric coordinate
Definition: HexElementsWeights.h:87
int num_hderivs()
Definition: HexElementsWeights.h:470
int num_derivs()
Definition: HexElementsWeights.h:469
void get_cubic_weights(const VECTOR &coords, unsigned int elem, double *w) const
Definition: HexElementsWeights.h:184
void get_linear_derivate_weights(const VECTOR &coords, double *w) const
get derivative weight factors at parametric coordinate
Definition: HexElementsWeights.h:55
void get_quadratic_derivate_weights(const VECTOR &coords, double *w) const
get weight factors of derivative at parametric coordinate
Definition: HexElementsWeights.h:114