Intrepid
Intrepid_HGRAD_HEX_I2_FEMDef.hpp
Go to the documentation of this file.
1 #ifndef INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
2 #define INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
3 // @HEADER
4 // ************************************************************************
5 //
6 // Intrepid Package
7 // Copyright (2007) Sandia Corporation
8 //
9 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
10 // license for use of this work by or on behalf of the U.S. Government.
11 //
12 // Redistribution and use in source and binary forms, with or without
13 // modification, are permitted provided that the following conditions are
14 // met:
15 //
16 // 1. Redistributions of source code must retain the above copyright
17 // notice, this list of conditions and the following disclaimer.
18 //
19 // 2. Redistributions in binary form must reproduce the above copyright
20 // notice, this list of conditions and the following disclaimer in the
21 // documentation and/or other materials provided with the distribution.
22 //
23 // 3. Neither the name of the Corporation nor the names of the
24 // contributors may be used to endorse or promote products derived from
25 // this software without specific prior written permission.
26 //
27 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
28 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
31 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 //
39 // Questions? Contact Pavel Bochev (pbboche@sandia.gov)
40 // Denis Ridzal (dridzal@sandia.gov), or
41 // Kara Peterson (kjpeter@sandia.gov)
42 //
43 // ************************************************************************
44 // @HEADER
45 
51 namespace Intrepid {
52 
53 
54 template<class Scalar, class ArrayScalar>
56  {
57  this -> basisCardinality_ = 20;
58  this -> basisDegree_ = 2;
59  this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
60  this -> basisType_ = BASIS_FEM_DEFAULT;
61  this -> basisCoordinates_ = COORDINATES_CARTESIAN;
62  this -> basisTagsAreSet_ = false;
63  }
64 
65 
66 
67 template<class Scalar, class ArrayScalar>
69 
70  // Basis-dependent intializations
71  int tagSize = 4; // size of DoF tag, i.e., number of fields in the tag
72  int posScDim = 0; // position in the tag, counting from 0, of the subcell dim
73  int posScOrd = 1; // position in the tag, counting from 0, of the subcell ordinal
74  int posDfOrd = 2; // position in the tag, counting from 0, of DoF ordinal relative to the subcell
75 
76  // An array with local DoF tags assigned to basis functions, in the order of their local enumeration
77  int tags[] = { 0, 0, 0, 1, // Nodes 0 to 7 follow vertex order of the topology
78  0, 1, 0, 1,
79  0, 2, 0, 1,
80  0, 3, 0, 1,
81  0, 4, 0, 1,
82  0, 5, 0, 1,
83  0, 6, 0, 1,
84  0, 7, 0, 1,
85  1, 0, 0, 1, // Node 8 -> edge 0
86  1, 1, 0, 1, // Node 9 -> edge 1
87  1, 2, 0, 1, // Node 10 -> edge 2
88  1, 3, 0, 1, // Node 11 -> edge 3
89  1, 8, 0, 1, // Node 12 -> edge 8
90  1, 9, 0, 1, // Node 13 -> edge 9
91  1,10, 0, 1, // Node 14 -> edge 10
92  1,11, 0, 1, // Node 15 -> edge 11
93  1, 4, 0, 1, // Node 16 -> edge 4
94  1, 5, 0, 1, // Node 17 -> edge 5
95  1, 6, 0, 1, // Node 18 -> edge 6
96  1, 7, 0, 1, // Node 19 -> edge 7
97  };
98 
99  // Basis-independent function sets tag and enum data in tagToOrdinal_ and ordinalToTag_ arrays:
100  Intrepid::setOrdinalTagData(this -> tagToOrdinal_,
101  this -> ordinalToTag_,
102  tags,
103  this -> basisCardinality_,
104  tagSize,
105  posScDim,
106  posScOrd,
107  posDfOrd);
108 }
109 
110 
111 
112 template<class Scalar, class ArrayScalar>
114  const ArrayScalar & inputPoints,
115  const EOperator operatorType) const {
116 
117  // Verify arguments
118 #ifdef HAVE_INTREPID_DEBUG
119  Intrepid::getValues_HGRAD_Args<Scalar, ArrayScalar>(outputValues,
120  inputPoints,
121  operatorType,
122  this -> getBaseCellTopology(),
123  this -> getCardinality() );
124 #endif
125 
126  // Number of evaluation points = dim 0 of inputPoints
127  int dim0 = inputPoints.dimension(0);
128 
129  // Temporaries: (x,y,z) coordinates of the evaluation point
130  Scalar x = 0.0;
131  Scalar y = 0.0;
132  Scalar z = 0.0;
133 
134  switch (operatorType) {
135 
136  case OPERATOR_VALUE:
137  for (int i0 = 0; i0 < dim0; i0++) {
138  x = inputPoints(i0, 0);
139  y = inputPoints(i0, 1);
140  z = inputPoints(i0, 2);
141 
142  // outputValues is a rank-2 array with dimensions (basisCardinality_, dim0)
143  outputValues( 0, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 - z)*(-x - y - z - 2.0);
144  outputValues( 1, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 - z)*( x - y - z - 2.0);
145  outputValues( 2, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 - z)*( x + y - z - 2.0);
146  outputValues( 3, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 - z)*(-x + y - z - 2.0);
147  outputValues( 4, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 + z)*(-x - y + z - 2.0);
148  outputValues( 5, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 + z)*( x - y + z - 2.0);
149  outputValues( 6, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 + z)*( x + y + z - 2.0);
150  outputValues( 7, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 + z)*(-x + y + z - 2.0);
151 
152  outputValues( 8, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 - z);
153  outputValues( 9, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 - z);
154  outputValues(10, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 - z);
155  outputValues(11, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 - z);
156 
157  outputValues(12, i0) = 0.25*(1.0 - x)*(1.0 - y)*(1.0 - z*z);
158  outputValues(13, i0) = 0.25*(1.0 + x)*(1.0 - y)*(1.0 - z*z);
159  outputValues(14, i0) = 0.25*(1.0 + x)*(1.0 + y)*(1.0 - z*z);
160  outputValues(15, i0) = 0.25*(1.0 - x)*(1.0 + y)*(1.0 - z*z);
161 
162  outputValues(16, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 + z);
163  outputValues(17, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 + z);
164  outputValues(18, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 + z);
165  outputValues(19, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 + z);
166  }
167  break;
168 
169  case OPERATOR_GRAD:
170  case OPERATOR_D1:
171  for (int i0 = 0; i0 < dim0; i0++) {
172  x = inputPoints(i0,0);
173  y = inputPoints(i0,1);
174  z = inputPoints(i0,2);
175 
176  // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, spaceDim)
177  outputValues(0, i0, 0) = -0.125*(1.0-y)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
178  outputValues(0, i0, 1) = -0.125*(1.0-x)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
179  outputValues(0, i0, 2) = -0.125*(1.0-x)*(1.0-y)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
180 
181  outputValues(1, i0, 0) = 0.125*(1.0-y)*(1.0-z)*( x-y-z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0-z);
182  outputValues(1, i0, 1) = -0.125*(1.0+x)*(1.0-z)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
183  outputValues(1, i0, 2) = -0.125*(1.0+x)*(1.0-y)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
184 
185  outputValues(2, i0, 0) = 0.125*(1.0+y)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
186  outputValues(2, i0, 1) = 0.125*(1.0+x)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
187  outputValues(2, i0, 2) = -0.125*(1.0+x)*(1.0+y)*( x+y-z-2.0) - 0.125*(1.0+x)*(1.0+y)*(1.0-z);
188 
189  outputValues(3, i0, 0) = -0.125*(1.0+y)*(1.0-z)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
190  outputValues(3, i0, 1) = 0.125*(1.0-x)*(1.0-z)*(-x+y-z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0-z);
191  outputValues(3, i0, 2) = -0.125*(1.0-x)*(1.0+y)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
192 
193  outputValues(4, i0, 0) = -0.125*(1.0-y)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
194  outputValues(4, i0, 1) = -0.125*(1.0-x)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
195  outputValues(4, i0, 2) = 0.125*(1.0-x)*(1.0-y)*(-x-y+z-2.0) + 0.125*(1.0-x)*(1.0-y)*(1.0+z);
196 
197  outputValues(5, i0, 0) = 0.125*(1.0-y)*(1.0+z)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
198  outputValues(5, i0, 1) = -0.125*(1.0+x)*(1.0+z)*( x-y+z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0+z);
199  outputValues(5, i0, 2) = 0.125*(1.0+x)*(1.0-y)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
200 
201  outputValues(6, i0, 0) = 0.125*(1.0+y)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
202  outputValues(6, i0, 1) = 0.125*(1.0+x)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
203  outputValues(6, i0, 2) = 0.125*(1.0+x)*(1.0+y)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
204 
205  outputValues(7, i0, 0) = -0.125*(1.0+y)*(1.0+z)*(-x+y+z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0+z);
206  outputValues(7, i0, 1) = 0.125*(1.0-x)*(1.0+z)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
207  outputValues(7, i0, 2) = 0.125*(1.0-x)*(1.0+y)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
208 
209  outputValues(8, i0, 0) = -0.5*x*(1.0-y)*(1.0-z);
210  outputValues(8, i0, 1) = -0.25*(1.0-x*x)*(1.0-z);
211  outputValues(8, i0, 2) = -0.25*(1.0-x*x)*(1.0-y);
212 
213  outputValues(9, i0, 0) = 0.25*(1.0-y*y)*(1.0-z);
214  outputValues(9, i0, 1) = -0.5*y*(1.0+x)*(1.0-z);
215  outputValues(9, i0, 2) = -0.25*(1.0+x)*(1.0-y*y);
216 
217  outputValues(10, i0, 0) = -0.5*x*(1.0+y)*(1.0-z);
218  outputValues(10, i0, 1) = 0.25*(1.0-x*x)*(1.0-z);
219  outputValues(10, i0, 2) = -0.25*(1.0-x*x)*(1.0+y);
220 
221  outputValues(11, i0, 0) = -0.25*(1.0-y*y)*(1.0-z);
222  outputValues(11, i0, 1) = -0.5*y*(1.0-x)*(1.0-z);
223  outputValues(11, i0, 2) = -0.25*(1.0-x)*(1.0-y*y);
224 
225  outputValues(12, i0, 0) = -0.25*(1.0-y)*(1.0-z*z);
226  outputValues(12, i0, 1) = -0.25*(1.0-x)*(1.0-z*z);
227  outputValues(12, i0, 2) = -0.5*z*(1.0-x)*(1.0-y);
228 
229  outputValues(13, i0, 0) = 0.25*(1.0-y)*(1.0-z*z);
230  outputValues(13, i0, 1) = -0.25*(1.0+x)*(1.0-z*z);
231  outputValues(13, i0, 2) = -0.5*z*(1.0+x)*(1.0-y);
232 
233  outputValues(14, i0, 0) = 0.25*(1.0+y)*(1.0-z*z);
234  outputValues(14, i0, 1) = 0.25*(1.0+x)*(1.0-z*z);
235  outputValues(14, i0, 2) = -0.5*z*(1.0+x)*(1.0+y);
236 
237  outputValues(15, i0, 0) = -0.25*(1.0+y)*(1.0-z*z);
238  outputValues(15, i0, 1) = 0.25*(1.0-x)*(1.0-z*z);
239  outputValues(15, i0, 2) = -0.5*z*(1.0-x)*(1.0+y);
240 
241  outputValues(16, i0, 0) = -0.5*x*(1.0-y)*(1.0+z);
242  outputValues(16, i0, 1) = -0.25*(1.0-x*x)*(1.0+z);
243  outputValues(16, i0, 2) = 0.25*(1.0-x*x)*(1.0-y);
244 
245  outputValues(17, i0, 0) = 0.25*(1.0-y*y)*(1.0+z);
246  outputValues(17, i0, 1) = -0.5*y*(1.0+x)*(1.0+z);
247  outputValues(17, i0, 2) = 0.25*(1.0+x)*(1.0-y*y);
248 
249  outputValues(18, i0, 0) = -0.5*x*(1.0+y)*(1.0+z);
250  outputValues(18, i0, 1) = 0.25*(1.0-x*x)*(1.0+z);
251  outputValues(18, i0, 2) = 0.25*(1.0-x*x)*(1.0+y);
252 
253  outputValues(19, i0, 0) = -0.25*(1.0-y*y)*(1.0+z);
254  outputValues(19, i0, 1) = -0.5*y*(1.0-x)*(1.0+z);
255  outputValues(19, i0, 2) = 0.25*(1.0-x)*(1.0-y*y);
256 
257  }
258  break;
259 
260  case OPERATOR_CURL:
261  TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument,
262  ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
263  break;
264 
265  case OPERATOR_DIV:
266  TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
267  ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
268  break;
269 
270  case OPERATOR_D2:
271  for (int i0 = 0; i0 < dim0; i0++) {
272  x = inputPoints(i0,0);
273  y = inputPoints(i0,1);
274  z = inputPoints(i0,2);
275 
276  // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, D2Cardinality = 6)
277  outputValues(0, i0, 0) = 0.25*(1.0 - y)*(1.0 - z);
278  outputValues(0, i0, 1) = 0.125*(1.0 - z)*(-2.0*x - 2.0*y - z);
279  outputValues(0, i0, 2) = 0.125*(1.0 - y)*(-2.0*x - y - 2.0*z);
280  outputValues(0, i0, 3) = 0.25*(1.0 - x)*(1.0 - z);
281  outputValues(0, i0, 4) = 0.125*(1.0 - x)*(-x - 2.0*y - 2.0*z);
282  outputValues(0, i0, 5) = 0.25*(1.0 - x)*(1.0 - y);
283 
284  outputValues(1, i0, 0) = 0.25*(1.0 - y)*(1.0 - z);
285  outputValues(1, i0, 1) = -0.125*(1.0 - z)*(2.0*x - 2.0*y - z);
286  outputValues(1, i0, 2) = -0.125*(1.0 - y)*(2.0*x - y - 2.0*z);
287  outputValues(1, i0, 3) = 0.25*(1.0 + x)*(1.0 - z);
288  outputValues(1, i0, 4) = 0.125*(1.0 + x)*(x - 2.0*y - 2.0*z);
289  outputValues(1, i0, 5) = 0.25*(1.0 + x)*(1.0 - y);
290 
291  outputValues(2, i0, 0) = 0.25*(1.0 + y)*(1.0 - z);
292  outputValues(2, i0, 1) = 0.125*(1.0 - z)*(2.0*x + 2.0*y - z);
293  outputValues(2, i0, 2) = -0.125*(1.0 + y)*(2.0*x + y - 2.0*z);
294  outputValues(2, i0, 3) = 0.25*(1.0 + x)*(1.0 - z);
295  outputValues(2, i0, 4) = -0.125*(1.0 + x)*(x + 2.0*y - 2.0*z);
296  outputValues(2, i0, 5) = 0.25*(1.0 + x)*(1.0 + y);
297 
298  outputValues(3, i0, 0) = 0.25*(1.0 + y)*(1.0 - z);
299  outputValues(3, i0, 1) = -0.125*(1.0 - z)*(-2.0*x + 2.0*y - z);
300  outputValues(3, i0, 2) = 0.125*(1.0 + y)*(-2.0*x + y - 2.0*z);
301  outputValues(3, i0, 3) = 0.25*(1.0 - x)*(1.0 - z);
302  outputValues(3, i0, 4) = -0.125*(1.0 - x)*(-x + 2.0*y - 2.0*z);
303  outputValues(3, i0, 5) = 0.25*(1.0 - x)*(1.0 + y);
304 
305  outputValues(4, i0, 0) = 0.25*(1.0 - y)*(1.0 + z);
306  outputValues(4, i0, 1) = 0.125*(1.0 + z)*(-2.0*x - 2.0*y + z);
307  outputValues(4, i0, 2) = -0.125*(1.0 - y)*(-2.0*x - y + 2.0*z);
308  outputValues(4, i0, 3) = 0.25*(1.0 - x)*(1.0 + z);
309  outputValues(4, i0, 4) = -0.125*(1.0 - x)*(-x - 2.0*y + 2.0*z);
310  outputValues(4, i0, 5) = 0.25*(1.0 - x)*(1.0 - y);
311 
312  outputValues(5, i0, 0) = 0.25*(1.0 - y)*(1.0 + z);
313  outputValues(5, i0, 1) = -0.125*(1.0 + z)*(2.0*x - 2.0*y + z);
314  outputValues(5, i0, 2) = 0.125*(1.0 - y)*(2.0*x - y + 2.0*z);
315  outputValues(5, i0, 3) = 0.25*(1.0 + x)*(1.0 + z);
316  outputValues(5, i0, 4) = -0.125*(1.0 + x)*(x - 2.0*y + 2.0*z);
317  outputValues(5, i0, 5) = 0.25*(1.0 + x)*(1.0 - y);
318 
319  outputValues(6, i0, 0) = 0.25*(1.0 + y)*(1.0 + z);
320  outputValues(6, i0, 1) = 0.125*(1.0 + z)*(2.0*x + 2.0*y + z);
321  outputValues(6, i0, 2) = 0.125*(1.0 + y)*(2.0*x + y + 2.0*z);
322  outputValues(6, i0, 3) = 0.25*(1.0 + x)*(1.0 + z);
323  outputValues(6, i0, 4) = 0.125*(1.0 + x)*(x + 2.0*y + 2.0*z);
324  outputValues(6, i0, 5) = 0.25*(1.0 + x)*(1.0 + y);
325 
326  outputValues(7, i0, 0) = 0.25*(1.0 + y)*(1.0 + z);
327  outputValues(7, i0, 1) = -0.125*(1.0 + z)*(-2.0*x + 2.0*y + z);
328  outputValues(7, i0, 2) = -0.125*(1.0 + y)*(-2.0*x + y + 2.0*z);
329  outputValues(7, i0, 3) = 0.25*(1.0 - x)*(1.0 + z);
330  outputValues(7, i0, 4) = 0.125*(1.0 - x)*(-x + 2.0*y + 2.0*z);
331  outputValues(7, i0, 5) = 0.25*(1.0 - x)*(1.0 + y);
332 
333  outputValues(8, i0, 0) = -0.5*(1.0 - y)*(1.0 - z);
334  outputValues(8, i0, 1) = 0.5*x*(1.0 - z);
335  outputValues(8, i0, 2) = 0.5*x*(1.0 - y);
336  outputValues(8, i0, 3) = 0.0;
337  outputValues(8, i0, 4) = 0.25*(1.0 - x*x);
338  outputValues(8, i0, 5) = 0.0;
339 
340  outputValues(9, i0, 0) = 0.0;
341  outputValues(9, i0, 1) = -0.5*y*(1.0 - z);
342  outputValues(9, i0, 2) = -0.25*(1.0 - y*y);
343  outputValues(9, i0, 3) = -0.5*(1.0 + x)*(1.0 - z);
344  outputValues(9, i0, 4) = 0.5*y*(1.0 + x);
345  outputValues(9, i0, 5) = 0.0;
346 
347  outputValues(10, i0, 0) = -0.5*(1.0 + y)*(1.0 - z);
348  outputValues(10, i0, 1) = -0.5*x*(1.0 - z);
349  outputValues(10, i0, 2) = 0.5*x*(1.0 + y);
350  outputValues(10, i0, 3) = 0.0;
351  outputValues(10, i0, 4) = -0.25*(1.0 - x*x);
352  outputValues(10, i0, 5) = 0.0;
353 
354  outputValues(11, i0, 0) = 0.0;
355  outputValues(11, i0, 1) = 0.5*y*(1.0 - z);
356  outputValues(11, i0, 2) = 0.25*(1.0 - y*y);
357  outputValues(11, i0, 3) = -0.5*(1.0 - x)*(1.0 - z);
358  outputValues(11, i0, 4) = 0.5*y*(1.0 - x);
359  outputValues(11, i0, 5) = 0.0;
360 
361  outputValues(12, i0, 0) = 0.0;
362  outputValues(12, i0, 1) = 0.25*(1.0 - z*z);
363  outputValues(12, i0, 2) = 0.5*z*(1.0 - y);
364  outputValues(12, i0, 3) = 0.0;
365  outputValues(12, i0, 4) = 0.5*z*(1.0 - x);
366  outputValues(12, i0, 5) = -0.5*(1.0 - x)*(1.0 - y);
367 
368  outputValues(13, i0, 0) = 0.0;
369  outputValues(13, i0, 1) = -0.25*(1.0 - z*z);
370  outputValues(13, i0, 2) = -0.5*z*(1.0 - y);
371  outputValues(13, i0, 3) = 0.0;
372  outputValues(13, i0, 4) = 0.5*z*(1.0 + x);
373  outputValues(13, i0, 5) = -0.5*(1.0 + x)*(1.0 - y);
374 
375  outputValues(14, i0, 0) = 0.0;
376  outputValues(14, i0, 1) = 0.25*(1.0 - z*z);
377  outputValues(14, i0, 2) = -0.5*z*(1.0 + y);
378  outputValues(14, i0, 3) = 0.0;
379  outputValues(14, i0, 4) = -0.5*z*(1.0 + x);
380  outputValues(14, i0, 5) = -0.5*(1.0 + x)*(1.0 + y);
381 
382  outputValues(15, i0, 0) = 0.0;
383  outputValues(15, i0, 1) = -0.25*(1.0 - z*z);
384  outputValues(15, i0, 2) = 0.5*z*(1.0 + y);
385  outputValues(15, i0, 3) = 0.0;
386  outputValues(15, i0, 4) = -0.5*z*(1.0 - x);
387  outputValues(14, i0, 5) = -0.5*(1.0 - x)*(1.0 + y);
388 
389  outputValues(16, i0, 0) = -0.5*(1.0 - y)*(1.0 + z);
390  outputValues(16, i0, 1) = 0.5*x*(1.0 + z);
391  outputValues(16, i0, 2) = -0.5*x*(1.0 - y);
392  outputValues(16, i0, 3) = 0.0;
393  outputValues(16, i0, 4) = -0.25*(1.0 - x*x);
394  outputValues(16, i0, 5) = 0.0;
395 
396  outputValues(17, i0, 0) = 0.0;
397  outputValues(17, i0, 1) = -0.5*y*(1.0 + z);
398  outputValues(17, i0, 2) = 0.25*(1.0 - y*y);
399  outputValues(17, i0, 3) = -0.5*(1.0 + x)*(1.0 + z);
400  outputValues(17, i0, 4) = -0.5*y*(1.0 + x);
401  outputValues(17, i0, 5) = 0.0;
402 
403  outputValues(18, i0, 0) = -0.5*(1.0 + y)*(1.0 + z);
404  outputValues(18, i0, 1) = -0.5*x*(1.0 + z);
405  outputValues(18, i0, 2) = -0.5*x*(1.0 + y);
406  outputValues(18, i0, 3) = 0.0;
407  outputValues(18, i0, 4) = 0.25*(1.0 - x*x);
408  outputValues(18, i0, 5) = 0.0;
409 
410  outputValues(19, i0, 0) = 0.0;
411  outputValues(19, i0, 1) = 0.5*y*(1.0 + z);
412  outputValues(19, i0, 2) = -0.25*(1.0 - y*y);
413  outputValues(19, i0, 3) = -0.5*(1.0 - x)*(1.0 + z);
414  outputValues(19, i0, 4) = -0.5*y*(1.0 - x);
415  outputValues(19, i0, 5) = 0.0;
416 
417  }
418  break;
419 
420  case OPERATOR_D3:
421  for (int i0 = 0; i0 < dim0; i0++) {
422  x = inputPoints(i0,0);
423  y = inputPoints(i0,1);
424  z = inputPoints(i0,2);
425 
426  outputValues(0,i0, 0) = 0.0;
427  outputValues(0,i0, 1) = -0.25*(1.0 - z);
428  outputValues(0,i0, 2) = -0.25*(1.0 - y);
429  outputValues(0,i0, 3) = -0.25*(1.0 - z);
430  outputValues(0,i0, 4) = -0.125*(-2.0*x - 2.0*y - 2.0*z + 1.0);
431  outputValues(0,i0, 5) = -0.25*(1.0 - y);
432  outputValues(0,i0, 6) = 0.0;
433  outputValues(0,i0, 7) = -0.25*(1.0 - x);
434  outputValues(0,i0, 8) = -0.25*(1.0 - x);
435  outputValues(0,i0, 9) = 0.0;
436 
437  outputValues(1,i0, 0) = 0.0;
438  outputValues(1,i0, 1) = -0.25*(1.0 - z);
439  outputValues(1,i0, 2) = -0.25*(1.0 - y);
440  outputValues(1,i0, 3) = 0.25*(1.0 - z);
441  outputValues(1,i0, 4) = 0.125*(2.0*x - 2.0*y - 2.0*z + 1.0);
442  outputValues(1,i0, 5) = 0.25*(1.0 - y);
443  outputValues(1,i0, 6) = 0.0;
444  outputValues(1,i0, 7) = -0.25*(1.0 + x);
445  outputValues(1,i0, 8) = -0.25*(1.0 + x);
446  outputValues(1,i0, 9) = 0.0;
447 
448  outputValues(2,i0, 0) = 0.0;
449  outputValues(2,i0, 1) = 0.25*(1.0 - z);
450  outputValues(2,i0, 2) = -0.25*(1.0 + y);
451  outputValues(2,i0, 3) = 0.25*(1.0 - z);
452  outputValues(2,i0, 4) = -0.125*(2.0*x + 2.0*y - 2.0*z + 1.0);
453  outputValues(2,i0, 5) = 0.25*(1.0 + y);
454  outputValues(2,i0, 6) = 0.0;
455  outputValues(2,i0, 7) = -0.25*(1.0 + x);
456  outputValues(2,i0, 8) = 0.25*(1.0 + x);
457  outputValues(2,i0, 9) = 0.0;
458 
459  outputValues(3,i0, 0) = 0.0;
460  outputValues(3,i0, 1) = 0.25*(1.0 - z);
461  outputValues(3,i0, 2) = -0.25*(1.0 + y);
462  outputValues(3,i0, 3) = -0.25*(1.0 - z);
463  outputValues(3,i0, 4) = 0.125*(-2.0*x + 2.0*y - 2.0*z + 1.0);
464  outputValues(3,i0, 5) = -0.25*(1.0 + y);
465  outputValues(3,i0, 6) = 0.0;
466  outputValues(3,i0, 7) = -0.25*(1.0 - x);
467  outputValues(3,i0, 8) = 0.25*(1.0 - x);
468  outputValues(3,i0, 9) = 0.0;
469 
470  outputValues(4,i0, 0) = 0.0;
471  outputValues(4,i0, 1) = -0.25*(1.0 + z);
472  outputValues(4,i0, 2) = 0.25*(1.0 - y);
473  outputValues(4,i0, 3) = -0.25*(1.0 + z);
474  outputValues(4,i0, 4) = 0.125*(-2.0*x - 2.0*y + 2.0*z + 1.0);
475  outputValues(4,i0, 5) = -0.25*(1.0 - y);
476  outputValues(4,i0, 6) = 0.0;
477  outputValues(4,i0, 7) = 0.25*(1.0 - x);
478  outputValues(4,i0, 8) = -0.25*(1.0 - x);
479  outputValues(4,i0, 9) = 0.0;
480 
481  outputValues(5,i0, 0) = 0.0;
482  outputValues(5,i0, 1) = -0.25*(1.0 + z);
483  outputValues(5,i0, 2) = 0.25*(1.0 - y);
484  outputValues(5,i0, 3) = 0.25*(1.0 + z);
485  outputValues(5,i0, 4) = -0.125*(2.0*x - 2.0*y + 2.0*z + 1.0);
486  outputValues(5,i0, 5) = 0.25*(1.0 - y);
487  outputValues(5,i0, 6) = 0.0;
488  outputValues(5,i0, 7) = 0.25*(1.0 + x);
489  outputValues(5,i0, 8) = -0.25*(1.0 + x);
490  outputValues(5,i0, 9) = 0.0;
491 
492  outputValues(6,i0, 0) = 0.0;
493  outputValues(6,i0, 1) = 0.25*(1.0 + z);
494  outputValues(6,i0, 2) = 0.25*(1.0 + y);
495  outputValues(6,i0, 3) = 0.25*(1.0 + z);
496  outputValues(6,i0, 4) = 0.125*(2.0*x + 2.0*y + 2.0*z + 1.0);
497  outputValues(6,i0, 5) = 0.25*(1.0 + y);
498  outputValues(6,i0, 6) = 0.0;
499  outputValues(6,i0, 7) = 0.25*(1.0 + x);
500  outputValues(6,i0, 8) = 0.25*(1.0 + x);
501  outputValues(6,i0, 9) = 0.0;
502 
503  outputValues(7,i0, 0) = 0.0;
504  outputValues(7,i0, 1) = 0.25*(1.0 + z);
505  outputValues(7,i0, 2) = 0.25*(1.0 + y);
506  outputValues(7,i0, 3) = -0.25*(1.0 + z);
507  outputValues(7,i0, 4) = -0.125*(-2.0*x + 2.0*y + 2.0*z + 1.0);
508  outputValues(7,i0, 5) = -0.25*(1.0 + y);
509  outputValues(7,i0, 6) = 0.0;
510  outputValues(7,i0, 7) = 0.25*(1.0 - x);
511  outputValues(7,i0, 8) = 0.25*(1.0 - x);
512  outputValues(7,i0, 9) = 0.0;
513 
514  outputValues(8,i0, 0) = 0.0;
515  outputValues(8,i0, 1) = 0.5*(1.0 - z);
516  outputValues(8,i0, 2) = 0.5*(1.0 - y);
517  outputValues(8,i0, 3) = 0.0;
518  outputValues(8,i0, 4) = -0.5*x;
519  outputValues(8,i0, 5) = 0.0;
520  outputValues(8,i0, 6) = 0.0;
521  outputValues(8,i0, 7) = 0.0;
522  outputValues(8,i0, 8) = 0.0;
523  outputValues(8,i0, 9) = 0.0;
524 
525  outputValues(9,i0, 0) = 0.0;
526  outputValues(9,i0, 1) = 0.0;
527  outputValues(9,i0, 2) = 0.0;
528  outputValues(9,i0, 3) = -0.5*(1.0 - z);
529  outputValues(9,i0, 4) = 0.5*y;
530  outputValues(9,i0, 5) = 0.0;
531  outputValues(9,i0, 6) = 0.0;
532  outputValues(9,i0, 7) = 0.5*(1.0 + x);
533  outputValues(9,i0, 8) = 0.0;
534  outputValues(9,i0, 9) = 0.0;
535 
536  outputValues(10,i0, 0) = 0.0;
537  outputValues(10,i0, 1) = -0.5*(1.0 - z);
538  outputValues(10,i0, 2) = 0.5*(1.0 + y);
539  outputValues(10,i0, 3) = 0.0;
540  outputValues(10,i0, 4) = 0.5*x;
541  outputValues(10,i0, 5) = 0.0;
542  outputValues(10,i0, 6) = 0.0;
543  outputValues(10,i0, 7) = 0.0;
544  outputValues(10,i0, 8) = 0.0;
545  outputValues(10,i0, 9) = 0.0;
546 
547  outputValues(11,i0, 0) = 0.0;
548  outputValues(11,i0, 1) = 0.0;
549  outputValues(11,i0, 2) = 0.0;
550  outputValues(11,i0, 3) = 0.5*(1.0 - z);
551  outputValues(11,i0, 4) = -0.5*y;
552  outputValues(11,i0, 5) = 0.0;
553  outputValues(11,i0, 6) = 0.0;
554  outputValues(11,i0, 7) = 0.5*(1.0 - x);
555  outputValues(11,i0, 8) = 0.0;
556  outputValues(11,i0, 9) = 0.0;
557 
558  outputValues(12,i0, 0) = 0.0;
559  outputValues(12,i0, 1) = 0.0;
560  outputValues(12,i0, 2) = 0.0;
561  outputValues(12,i0, 3) = 0.0;
562  outputValues(12,i0, 4) = -0.5*z;
563  outputValues(12,i0, 5) = 0.5*(1.0 - y);
564  outputValues(12,i0, 6) = 0.0;
565  outputValues(12,i0, 7) = 0.0;
566  outputValues(12,i0, 8) = 0.5*(1.0 - x);
567  outputValues(12,i0, 9) = 0.0;
568 
569  outputValues(13,i0, 0) = 0.0;
570  outputValues(13,i0, 1) = 0.0;
571  outputValues(13,i0, 2) = 0.0;
572  outputValues(13,i0, 3) = 0.0;
573  outputValues(13,i0, 4) = 0.5*z;
574  outputValues(13,i0, 5) = -0.5*(1.0 - y);
575  outputValues(13,i0, 6) = 0.0;
576  outputValues(13,i0, 7) = 0.0;
577  outputValues(13,i0, 8) = 0.5*(1.0 + x);
578  outputValues(13,i0, 9) = 0.0;
579 
580  outputValues(14,i0, 0) = 0.0;
581  outputValues(14,i0, 1) = 0.0;
582  outputValues(14,i0, 2) = 0.0;
583  outputValues(14,i0, 3) = 0.0;
584  outputValues(14,i0, 4) = -0.5*z;
585  outputValues(14,i0, 5) = -0.5*(1.0 + y);
586  outputValues(14,i0, 6) = 0.0;
587  outputValues(14,i0, 7) = 0.0;
588  outputValues(14,i0, 8) = -0.5*(1.0 + x);
589  outputValues(14,i0, 9) = 0.0;
590 
591  outputValues(15,i0, 0) = 0.0;
592  outputValues(15,i0, 1) = 0.0;
593  outputValues(15,i0, 2) = 0.0;
594  outputValues(15,i0, 3) = 0.0;
595  outputValues(15,i0, 4) = 0.5*z;
596  outputValues(15,i0, 5) = 0.5*(1.0 + y);
597  outputValues(15,i0, 6) = 0.0;
598  outputValues(15,i0, 7) = 0.0;
599  outputValues(15,i0, 8) = -0.5*(1.0 - x);
600  outputValues(15,i0, 9) = 0.0;
601 
602  outputValues(16,i0, 0) = 0.0;
603  outputValues(16,i0, 1) = 0.5*(1.0 + z);
604  outputValues(16,i0, 2) = -0.5*(1.0 - y);
605  outputValues(16,i0, 3) = 0.0;
606  outputValues(16,i0, 4) = 0.5*x;
607  outputValues(16,i0, 5) = 0.0;
608  outputValues(16,i0, 6) = 0.0;
609  outputValues(16,i0, 7) = 0.0;
610  outputValues(16,i0, 8) = 0.0;
611  outputValues(16,i0, 9) = 0.0;
612 
613  outputValues(17,i0, 0) = 0.0;
614  outputValues(17,i0, 1) = 0.0;
615  outputValues(17,i0, 2) = 0.0;
616  outputValues(17,i0, 3) = -0.5*(1.0 + z);
617  outputValues(17,i0, 4) = -0.5*y;
618  outputValues(17,i0, 5) = 0.0;
619  outputValues(17,i0, 6) = 0.0;
620  outputValues(17,i0, 7) = -0.5*(1.0 + x);
621  outputValues(17,i0, 8) = 0.0;
622  outputValues(17,i0, 9) = 0.0;
623 
624  outputValues(18,i0, 0) = 0.0;
625  outputValues(18,i0, 1) = -0.5*(1.0 + z);
626  outputValues(18,i0, 2) = -0.5*(1.0 + y);
627  outputValues(18,i0, 3) = 0.0;
628  outputValues(18,i0, 4) = -0.5*x;
629  outputValues(18,i0, 5) = 0.0;
630  outputValues(18,i0, 6) = 0.0;
631  outputValues(18,i0, 7) = 0.0;
632  outputValues(18,i0, 8) = 0.0;
633  outputValues(18,i0, 9) = 0.0;
634 
635  outputValues(19,i0, 0) = 0.0;
636  outputValues(19,i0, 1) = 0.0;
637  outputValues(19,i0, 2) = 0.0;
638  outputValues(19,i0, 3) = 0.5*(1.0 + z);
639  outputValues(19,i0, 4) = 0.5*y;
640  outputValues(19,i0, 5) = 0.0;
641  outputValues(19,i0, 6) = 0.0;
642  outputValues(19,i0, 7) = -0.5*(1.0 - x);
643  outputValues(19,i0, 8) = 0.0;
644  outputValues(19,i0, 9) = 0.0;
645 
646  }
647  break;
648 
649  case OPERATOR_D4:
650  {
651  // Intitialize array by zero and then fill only non-zero entries.
652  int DkCardinality = Intrepid::getDkCardinality(operatorType, this -> basisCellTopology_.getDimension() );
653  for(int dofOrd = 0; dofOrd < this -> basisCardinality_; dofOrd++) {
654  for (int i0 = 0; i0 < dim0; i0++) {
655  for(int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
656  outputValues(dofOrd, i0, dkOrd) = 0.0;
657  }
658  }
659  }
660 
661  for (int i0 = 0; i0 < dim0; i0++) {
662  x = inputPoints(i0,0);
663  y = inputPoints(i0,1);
664  z = inputPoints(i0,2);
665 
666  outputValues( 0, i0, 4) = 0.25;
667  outputValues( 0, i0, 7) = 0.25;
668  outputValues( 0, i0, 8) = 0.25;
669 
670  outputValues( 1, i0, 4) = 0.25;
671  outputValues( 1, i0, 7) = -0.25;
672  outputValues( 1, i0, 8) = -0.25;
673 
674  outputValues( 2, i0, 4) = -0.25;
675  outputValues( 2, i0, 7) = -0.25;
676  outputValues( 2, i0, 8) = 0.25;
677 
678  outputValues( 3, i0, 4) = -0.25;
679  outputValues( 3, i0, 7) = 0.25;
680  outputValues( 3, i0, 8) = -0.25;
681 
682  outputValues( 4, i0, 4) = -0.25;
683  outputValues( 4, i0, 7) = -0.25;
684  outputValues( 4, i0, 8) = 0.25;
685 
686  outputValues( 5, i0, 4) = -0.25;
687  outputValues( 5, i0, 7) = 0.25;
688  outputValues( 5, i0, 8) = -0.25;
689 
690  outputValues( 6, i0, 4) = 0.25;
691  outputValues( 6, i0, 7) = 0.25;
692  outputValues( 6, i0, 8) = 0.25;
693 
694  outputValues( 7, i0, 4) = 0.25;
695  outputValues( 7, i0, 7) = -0.25;
696  outputValues( 7, i0, 8) = -0.25;
697 
698  outputValues( 8, i0, 4) = -0.5;
699  outputValues( 9, i0, 7) = 0.5;
700  outputValues(10, i0, 4) = 0.5;
701  outputValues(11, i0, 7) = -0.5;
702  outputValues(12, i0, 8) = -0.5;
703  outputValues(13, i0, 8) = 0.5;
704  outputValues(14, i0, 8) = -0.5;
705  outputValues(15, i0, 8) = 0.5;
706  outputValues(16, i0, 4) = 0.5;
707  outputValues(17, i0, 7) = -0.5;
708  outputValues(18, i0, 4) = -0.5;
709  outputValues(19, i0, 7) = 0.5;
710  }
711  }
712  break;
713 
714  case OPERATOR_D5:
715  case OPERATOR_D6:
716  case OPERATOR_D7:
717  case OPERATOR_D8:
718  case OPERATOR_D9:
719  case OPERATOR_D10:
720  {
721  // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, DkCardinality)
722  int DkCardinality = Intrepid::getDkCardinality(operatorType,
723  this -> basisCellTopology_.getDimension() );
724  for(int dofOrd = 0; dofOrd < this -> basisCardinality_; dofOrd++) {
725  for (int i0 = 0; i0 < dim0; i0++) {
726  for(int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
727  outputValues(dofOrd, i0, dkOrd) = 0.0;
728  }
729  }
730  }
731  }
732  break;
733 
734  default:
735  TEUCHOS_TEST_FOR_EXCEPTION( !( Intrepid::isValidOperator(operatorType) ), std::invalid_argument,
736  ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): Invalid operator type");
737  }
738 }
739 
740 
741 
742 template<class Scalar, class ArrayScalar>
744  const ArrayScalar & inputPoints,
745  const ArrayScalar & cellVertices,
746  const EOperator operatorType) const {
747  TEUCHOS_TEST_FOR_EXCEPTION( (true), std::logic_error,
748  ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): FEM Basis calling an FVD member function");
749  }
750 
751 template<class Scalar, class ArrayScalar>
753 #ifdef HAVE_INTREPID_DEBUG
754  // Verify rank of output array.
755  TEUCHOS_TEST_FOR_EXCEPTION( !(DofCoords.rank() == 2), std::invalid_argument,
756  ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) rank = 2 required for DofCoords array");
757  // Verify 0th dimension of output array.
758  TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(0) == this -> basisCardinality_ ), std::invalid_argument,
759  ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) mismatch in number of DoF and 0th dimension of DofCoords array");
760  // Verify 1st dimension of output array.
761  TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(1) == (int)(this -> basisCellTopology_.getDimension()) ), std::invalid_argument,
762  ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) incorrect reference cell (1st) dimension in DofCoords array");
763 #endif
764 
765  DofCoords(0,0) = -1.0; DofCoords(0,1) = -1.0; DofCoords(0,2) = -1.0;
766  DofCoords(1,0) = 1.0; DofCoords(1,1) = -1.0; DofCoords(1,2) = -1.0;
767  DofCoords(2,0) = 1.0; DofCoords(2,1) = 1.0; DofCoords(2,2) = -1.0;
768  DofCoords(3,0) = -1.0; DofCoords(3,1) = 1.0; DofCoords(3,2) = -1.0;
769  DofCoords(4,0) = -1.0; DofCoords(4,1) = -1.0; DofCoords(4,2) = 1.0;
770  DofCoords(5,0) = 1.0; DofCoords(5,1) = -1.0; DofCoords(5,2) = 1.0;
771  DofCoords(6,0) = 1.0; DofCoords(6,1) = 1.0; DofCoords(6,2) = 1.0;
772  DofCoords(7,0) = -1.0; DofCoords(7,1) = 1.0; DofCoords(7,2) = 1.0;
773 
774  DofCoords(8,0) = 0.0; DofCoords(8,1) = -1.0; DofCoords(8,2) = -1.0;
775  DofCoords(9,0) = 1.0; DofCoords(9,1) = 0.0; DofCoords(9,2) = -1.0;
776  DofCoords(10,0) = 0.0; DofCoords(10,1) = 1.0; DofCoords(10,2) = -1.0;
777  DofCoords(11,0) = -1.0; DofCoords(11,1) = 0.0; DofCoords(11,2) = -1.0;
778  DofCoords(12,0) = -1.0; DofCoords(12,1) = -1.0; DofCoords(12,2) = 0.0;
779  DofCoords(13,0) = 1.0; DofCoords(13,1) = -1.0; DofCoords(13,2) = 0.0;
780  DofCoords(14,0) = 1.0; DofCoords(14,1) = 1.0; DofCoords(14,2) = 0.0;
781  DofCoords(15,0) = -1.0; DofCoords(15,1) = 1.0; DofCoords(15,2) = 0.0;
782  DofCoords(16,0) = 0.0; DofCoords(16,1) = -1.0; DofCoords(16,2) = 1.0;
783  DofCoords(17,0) = 1.0; DofCoords(17,1) = 0.0; DofCoords(17,2) = 1.0;
784  DofCoords(18,0) = 0.0; DofCoords(18,1) = 1.0; DofCoords(18,2) = 1.0;
785  DofCoords(19,0) = -1.0; DofCoords(19,1) = 0.0; DofCoords(19,2) = 1.0;
786 }
787 
788 }// namespace Intrepid
789 #endif
void initializeTags()
Initializes tagToOrdinal_ and ordinalToTag_ lookup arrays.
void getDofCoords(ArrayScalar &DofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on a reference Quadrilateral.
void getValues(ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const
Evaluation of a FEM basis on a reference Hexahedron cell.