Intrepid
/usr/src/RPM/BUILD/trilinos-11.12.1/packages/intrepid/src/Discretization/Basis/Intrepid_HGRAD_HEX_I2_FEMDef.hpp
Go to the documentation of this file.
00001 #ifndef INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
00002 #define INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
00003 // @HEADER
00004 // ************************************************************************
00005 //
00006 //                           Intrepid Package
00007 //                 Copyright (2007) Sandia Corporation
00008 //
00009 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00010 // license for use of this work by or on behalf of the U.S. Government.
00011 //
00012 // Redistribution and use in source and binary forms, with or without
00013 // modification, are permitted provided that the following conditions are
00014 // met:
00015 //
00016 // 1. Redistributions of source code must retain the above copyright
00017 // notice, this list of conditions and the following disclaimer.
00018 //
00019 // 2. Redistributions in binary form must reproduce the above copyright
00020 // notice, this list of conditions and the following disclaimer in the
00021 // documentation and/or other materials provided with the distribution.
00022 //
00023 // 3. Neither the name of the Corporation nor the names of the
00024 // contributors may be used to endorse or promote products derived from
00025 // this software without specific prior written permission.
00026 //
00027 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00028 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00029 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00030 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00031 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00032 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00033 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00034 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00035 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00036 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00037 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00038 //
00039 // Questions? Contact Pavel Bochev  (pbboche@sandia.gov)
00040 //                    Denis Ridzal  (dridzal@sandia.gov), or
00041 //                    Kara Peterson (kjpeter@sandia.gov)
00042 //
00043 // ************************************************************************
00044 // @HEADER
00045 
00051 namespace Intrepid {
00052 
00053   
00054 template<class Scalar, class ArrayScalar>
00055 Basis_HGRAD_HEX_I2_FEM<Scalar,ArrayScalar>::Basis_HGRAD_HEX_I2_FEM()
00056   {
00057     this -> basisCardinality_  = 20;
00058     this -> basisDegree_       = 2;    
00059     this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
00060     this -> basisType_         = BASIS_FEM_DEFAULT;
00061     this -> basisCoordinates_  = COORDINATES_CARTESIAN;
00062     this -> basisTagsAreSet_   = false;
00063   }
00064   
00065   
00066   
00067 template<class Scalar, class ArrayScalar>
00068 void Basis_HGRAD_HEX_I2_FEM<Scalar, ArrayScalar>::initializeTags() {
00069   
00070   // Basis-dependent intializations
00071   int tagSize  = 4;        // size of DoF tag, i.e., number of fields in the tag
00072   int posScDim = 0;        // position in the tag, counting from 0, of the subcell dim 
00073   int posScOrd = 1;        // position in the tag, counting from 0, of the subcell ordinal
00074   int posDfOrd = 2;        // position in the tag, counting from 0, of DoF ordinal relative to the subcell
00075 
00076   // An array with local DoF tags assigned to basis functions, in the order of their local enumeration 
00077   int tags[]  = { 0, 0, 0, 1,     // Nodes 0 to 7 follow vertex order of the topology
00078                   0, 1, 0, 1,
00079                   0, 2, 0, 1,
00080                   0, 3, 0, 1,
00081                   0, 4, 0, 1,
00082                   0, 5, 0, 1,
00083                   0, 6, 0, 1,
00084                   0, 7, 0, 1,
00085                   1, 0, 0, 1,      // Node 8  -> edge 0
00086                   1, 1, 0, 1,      // Node 9  -> edge 1
00087                   1, 2, 0, 1,      // Node 10 -> edge 2
00088                   1, 3, 0, 1,      // Node 11 -> edge 3
00089                   1, 8, 0, 1,      // Node 12 -> edge 8
00090                   1, 9, 0, 1,      // Node 13 -> edge 9
00091                   1,10, 0, 1,      // Node 14 -> edge 10
00092                   1,11, 0, 1,      // Node 15 -> edge 11
00093                   1, 4, 0, 1,      // Node 16 -> edge 4
00094                   1, 5, 0, 1,      // Node 17 -> edge 5
00095                   1, 6, 0, 1,      // Node 18 -> edge 6
00096                   1, 7, 0, 1,      // Node 19 -> edge 7
00097   };
00098   
00099   // Basis-independent function sets tag and enum data in tagToOrdinal_ and ordinalToTag_ arrays:
00100   Intrepid::setOrdinalTagData(this -> tagToOrdinal_,
00101                               this -> ordinalToTag_,
00102                               tags,
00103                               this -> basisCardinality_,
00104                               tagSize,
00105                               posScDim,
00106                               posScOrd,
00107                               posDfOrd);
00108 }
00109 
00110 
00111 
00112 template<class Scalar, class ArrayScalar>
00113 void Basis_HGRAD_HEX_I2_FEM<Scalar, ArrayScalar>::getValues(ArrayScalar &        outputValues,
00114                                                             const ArrayScalar &  inputPoints,
00115                                                             const EOperator      operatorType) const {
00116   
00117   // Verify arguments
00118 #ifdef HAVE_INTREPID_DEBUG
00119   Intrepid::getValues_HGRAD_Args<Scalar, ArrayScalar>(outputValues,
00120                                                       inputPoints,
00121                                                       operatorType,
00122                                                       this -> getBaseCellTopology(),
00123                                                       this -> getCardinality() );
00124 #endif
00125   
00126   // Number of evaluation points = dim 0 of inputPoints
00127   int dim0 = inputPoints.dimension(0);  
00128   
00129   // Temporaries: (x,y,z) coordinates of the evaluation point
00130   Scalar x = 0.0;                                    
00131   Scalar y = 0.0;                                    
00132   Scalar z = 0.0;                                    
00133   
00134   switch (operatorType) {
00135     
00136     case OPERATOR_VALUE:
00137       for (int i0 = 0; i0 < dim0; i0++) {
00138         x = inputPoints(i0, 0);
00139         y = inputPoints(i0, 1);
00140         z = inputPoints(i0, 2);
00141         
00142         // outputValues is a rank-2 array with dimensions (basisCardinality_, dim0)
00143         outputValues( 0, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 - z)*(-x - y - z - 2.0);
00144         outputValues( 1, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 - z)*( x - y - z - 2.0);
00145         outputValues( 2, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 - z)*( x + y - z - 2.0);
00146         outputValues( 3, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 - z)*(-x + y - z - 2.0);
00147         outputValues( 4, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 + z)*(-x - y + z - 2.0);
00148         outputValues( 5, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 + z)*( x - y + z - 2.0);
00149         outputValues( 6, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 + z)*( x + y + z - 2.0);
00150         outputValues( 7, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 + z)*(-x + y + z - 2.0);
00151 
00152         outputValues( 8, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 - z);
00153         outputValues( 9, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 - z);
00154         outputValues(10, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 - z);
00155         outputValues(11, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 - z);
00156 
00157         outputValues(12, i0) = 0.25*(1.0 - x)*(1.0 - y)*(1.0 - z*z);
00158         outputValues(13, i0) = 0.25*(1.0 + x)*(1.0 - y)*(1.0 - z*z);
00159         outputValues(14, i0) = 0.25*(1.0 + x)*(1.0 + y)*(1.0 - z*z);
00160         outputValues(15, i0) = 0.25*(1.0 - x)*(1.0 + y)*(1.0 - z*z);
00161 
00162         outputValues(16, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 + z);
00163         outputValues(17, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 + z);
00164         outputValues(18, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 + z);
00165         outputValues(19, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 + z);
00166       }
00167       break;
00168       
00169     case OPERATOR_GRAD:
00170     case OPERATOR_D1:
00171       for (int i0 = 0; i0 < dim0; i0++) {
00172         x = inputPoints(i0,0);
00173         y = inputPoints(i0,1);
00174         z = inputPoints(i0,2);
00175 
00176         // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, spaceDim)
00177         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);
00178         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);
00179         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);
00180 
00181         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);
00182         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);
00183         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);
00184 
00185         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);
00186         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);
00187         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);
00188 
00189         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);
00190         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);
00191         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);
00192 
00193         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);
00194         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);
00195         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);
00196 
00197         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);
00198         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);
00199         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);
00200 
00201         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);
00202         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);
00203         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);
00204 
00205         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);
00206         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);
00207         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);
00208 
00209         outputValues(8, i0, 0) = -0.5*x*(1.0-y)*(1.0-z);
00210         outputValues(8, i0, 1) = -0.25*(1.0-x*x)*(1.0-z);
00211         outputValues(8, i0, 2) = -0.25*(1.0-x*x)*(1.0-y);
00212 
00213         outputValues(9, i0, 0) =  0.25*(1.0-y*y)*(1.0-z);
00214         outputValues(9, i0, 1) = -0.5*y*(1.0+x)*(1.0-z);
00215         outputValues(9, i0, 2) = -0.25*(1.0+x)*(1.0-y*y);
00216           
00217         outputValues(10, i0, 0) = -0.5*x*(1.0+y)*(1.0-z);
00218         outputValues(10, i0, 1) =  0.25*(1.0-x*x)*(1.0-z);
00219         outputValues(10, i0, 2) = -0.25*(1.0-x*x)*(1.0+y);
00220 
00221         outputValues(11, i0, 0) = -0.25*(1.0-y*y)*(1.0-z);
00222         outputValues(11, i0, 1) = -0.5*y*(1.0-x)*(1.0-z);
00223         outputValues(11, i0, 2) = -0.25*(1.0-x)*(1.0-y*y);
00224 
00225         outputValues(12, i0, 0) = -0.25*(1.0-y)*(1.0-z*z);
00226         outputValues(12, i0, 1) = -0.25*(1.0-x)*(1.0-z*z);
00227         outputValues(12, i0, 2) = -0.5*z*(1.0-x)*(1.0-y);
00228 
00229         outputValues(13, i0, 0) =  0.25*(1.0-y)*(1.0-z*z);
00230         outputValues(13, i0, 1) = -0.25*(1.0+x)*(1.0-z*z);
00231         outputValues(13, i0, 2) = -0.5*z*(1.0+x)*(1.0-y);
00232 
00233         outputValues(14, i0, 0) =  0.25*(1.0+y)*(1.0-z*z);
00234         outputValues(14, i0, 1) =  0.25*(1.0+x)*(1.0-z*z);
00235         outputValues(14, i0, 2) = -0.5*z*(1.0+x)*(1.0+y);
00236 
00237         outputValues(15, i0, 0) = -0.25*(1.0+y)*(1.0-z*z);
00238         outputValues(15, i0, 1) =  0.25*(1.0-x)*(1.0-z*z);
00239         outputValues(15, i0, 2) = -0.5*z*(1.0-x)*(1.0+y);
00240 
00241         outputValues(16, i0, 0) = -0.5*x*(1.0-y)*(1.0+z);
00242         outputValues(16, i0, 1) = -0.25*(1.0-x*x)*(1.0+z);
00243         outputValues(16, i0, 2) =  0.25*(1.0-x*x)*(1.0-y);
00244 
00245         outputValues(17, i0, 0) =  0.25*(1.0-y*y)*(1.0+z);
00246         outputValues(17, i0, 1) = -0.5*y*(1.0+x)*(1.0+z);
00247         outputValues(17, i0, 2) =  0.25*(1.0+x)*(1.0-y*y);
00248           
00249         outputValues(18, i0, 0) = -0.5*x*(1.0+y)*(1.0+z);
00250         outputValues(18, i0, 1) =  0.25*(1.0-x*x)*(1.0+z);
00251         outputValues(18, i0, 2) =  0.25*(1.0-x*x)*(1.0+y);
00252 
00253         outputValues(19, i0, 0) = -0.25*(1.0-y*y)*(1.0+z);
00254         outputValues(19, i0, 1) = -0.5*y*(1.0-x)*(1.0+z);
00255         outputValues(19, i0, 2) =  0.25*(1.0-x)*(1.0-y*y);
00256 
00257       }
00258       break;
00259       
00260     case OPERATOR_CURL:
00261       TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument,
00262                           ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
00263       break;
00264       
00265     case OPERATOR_DIV:
00266       TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
00267                           ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
00268       break;
00269       
00270     case OPERATOR_D2:
00271       for (int i0 = 0; i0 < dim0; i0++) {
00272         x = inputPoints(i0,0);
00273         y = inputPoints(i0,1);
00274         z = inputPoints(i0,2);
00275         
00276         // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, D2Cardinality = 6) 
00277         outputValues(0, i0, 0) =  0.25*(1.0 - y)*(1.0 - z);
00278         outputValues(0, i0, 1) =  0.125*(1.0 - z)*(-2.0*x - 2.0*y - z);
00279         outputValues(0, i0, 2) =  0.125*(1.0 - y)*(-2.0*x - y - 2.0*z);
00280         outputValues(0, i0, 3) =  0.25*(1.0 - x)*(1.0 - z);
00281         outputValues(0, i0, 4) =  0.125*(1.0 - x)*(-x - 2.0*y - 2.0*z);
00282         outputValues(0, i0, 5) =  0.25*(1.0 - x)*(1.0 - y);
00283 
00284         outputValues(1, i0, 0) =  0.25*(1.0 - y)*(1.0 - z);
00285         outputValues(1, i0, 1) = -0.125*(1.0 - z)*(2.0*x - 2.0*y - z);
00286         outputValues(1, i0, 2) = -0.125*(1.0 - y)*(2.0*x - y - 2.0*z);
00287         outputValues(1, i0, 3) =  0.25*(1.0 + x)*(1.0 - z);
00288         outputValues(1, i0, 4) =  0.125*(1.0 + x)*(x - 2.0*y - 2.0*z);
00289         outputValues(1, i0, 5) =  0.25*(1.0 + x)*(1.0 - y);
00290 
00291         outputValues(2, i0, 0) =  0.25*(1.0 + y)*(1.0 - z);
00292         outputValues(2, i0, 1) =  0.125*(1.0 - z)*(2.0*x + 2.0*y - z);
00293         outputValues(2, i0, 2) = -0.125*(1.0 + y)*(2.0*x + y - 2.0*z);
00294         outputValues(2, i0, 3) =  0.25*(1.0 + x)*(1.0 - z);
00295         outputValues(2, i0, 4) = -0.125*(1.0 + x)*(x + 2.0*y - 2.0*z);
00296         outputValues(2, i0, 5) =  0.25*(1.0 + x)*(1.0 + y);
00297 
00298         outputValues(3, i0, 0) =  0.25*(1.0 + y)*(1.0 - z);
00299         outputValues(3, i0, 1) = -0.125*(1.0 - z)*(-2.0*x + 2.0*y - z);
00300         outputValues(3, i0, 2) =  0.125*(1.0 + y)*(-2.0*x + y - 2.0*z);
00301         outputValues(3, i0, 3) =  0.25*(1.0 - x)*(1.0 - z);
00302         outputValues(3, i0, 4) = -0.125*(1.0 - x)*(-x + 2.0*y - 2.0*z);
00303         outputValues(3, i0, 5) =  0.25*(1.0 - x)*(1.0 + y);
00304 
00305         outputValues(4, i0, 0) =  0.25*(1.0 - y)*(1.0 + z);
00306         outputValues(4, i0, 1) =  0.125*(1.0 + z)*(-2.0*x - 2.0*y + z);
00307         outputValues(4, i0, 2) = -0.125*(1.0 - y)*(-2.0*x - y + 2.0*z);
00308         outputValues(4, i0, 3) =  0.25*(1.0 - x)*(1.0 + z);
00309         outputValues(4, i0, 4) = -0.125*(1.0 - x)*(-x - 2.0*y + 2.0*z);
00310         outputValues(4, i0, 5) =  0.25*(1.0 - x)*(1.0 - y);
00311 
00312         outputValues(5, i0, 0) =  0.25*(1.0 - y)*(1.0 + z);
00313         outputValues(5, i0, 1) = -0.125*(1.0 + z)*(2.0*x - 2.0*y + z);
00314         outputValues(5, i0, 2) =  0.125*(1.0 - y)*(2.0*x - y + 2.0*z);
00315         outputValues(5, i0, 3) =  0.25*(1.0 + x)*(1.0 + z);
00316         outputValues(5, i0, 4) = -0.125*(1.0 + x)*(x - 2.0*y + 2.0*z);
00317         outputValues(5, i0, 5) =  0.25*(1.0 + x)*(1.0 - y);
00318 
00319         outputValues(6, i0, 0) =  0.25*(1.0 + y)*(1.0 + z);
00320         outputValues(6, i0, 1) =  0.125*(1.0 + z)*(2.0*x + 2.0*y + z);
00321         outputValues(6, i0, 2) =  0.125*(1.0 + y)*(2.0*x + y + 2.0*z);
00322         outputValues(6, i0, 3) =  0.25*(1.0 + x)*(1.0 + z);
00323         outputValues(6, i0, 4) =  0.125*(1.0 + x)*(x + 2.0*y + 2.0*z);
00324         outputValues(6, i0, 5) =  0.25*(1.0 + x)*(1.0 + y);
00325 
00326         outputValues(7, i0, 0) =  0.25*(1.0 + y)*(1.0 + z);
00327         outputValues(7, i0, 1) = -0.125*(1.0 + z)*(-2.0*x + 2.0*y + z);
00328         outputValues(7, i0, 2) = -0.125*(1.0 + y)*(-2.0*x + y + 2.0*z);
00329         outputValues(7, i0, 3) =  0.25*(1.0 - x)*(1.0 + z);
00330         outputValues(7, i0, 4) =  0.125*(1.0 - x)*(-x + 2.0*y + 2.0*z);
00331         outputValues(7, i0, 5) =  0.25*(1.0 - x)*(1.0 + y);
00332 
00333         outputValues(8, i0, 0) = -0.5*(1.0 - y)*(1.0 - z);
00334         outputValues(8, i0, 1) =  0.5*x*(1.0 - z);
00335         outputValues(8, i0, 2) =  0.5*x*(1.0 - y);
00336         outputValues(8, i0, 3) =  0.0;
00337         outputValues(8, i0, 4) =  0.25*(1.0 - x*x);
00338         outputValues(8, i0, 5) =  0.0;
00339 
00340         outputValues(9, i0, 0) =  0.0;
00341         outputValues(9, i0, 1) = -0.5*y*(1.0 - z);
00342         outputValues(9, i0, 2) = -0.25*(1.0 - y*y);
00343         outputValues(9, i0, 3) = -0.5*(1.0 + x)*(1.0 - z);
00344         outputValues(9, i0, 4) =  0.5*y*(1.0 + x);
00345         outputValues(9, i0, 5) =  0.0;
00346 
00347         outputValues(10, i0, 0) = -0.5*(1.0 + y)*(1.0 - z);
00348         outputValues(10, i0, 1) = -0.5*x*(1.0 - z);
00349         outputValues(10, i0, 2) =  0.5*x*(1.0 + y);
00350         outputValues(10, i0, 3) =  0.0;
00351         outputValues(10, i0, 4) = -0.25*(1.0 - x*x);
00352         outputValues(10, i0, 5) =  0.0;
00353 
00354         outputValues(11, i0, 0) =  0.0;
00355         outputValues(11, i0, 1) =  0.5*y*(1.0 - z);
00356         outputValues(11, i0, 2) =  0.25*(1.0 - y*y);
00357         outputValues(11, i0, 3) = -0.5*(1.0 - x)*(1.0 - z);
00358         outputValues(11, i0, 4) =  0.5*y*(1.0 - x);
00359         outputValues(11, i0, 5) =  0.0;
00360 
00361         outputValues(12, i0, 0) =  0.0;
00362         outputValues(12, i0, 1) =  0.25*(1.0 - z*z);
00363         outputValues(12, i0, 2) =  0.5*z*(1.0 - y);
00364         outputValues(12, i0, 3) =  0.0;
00365         outputValues(12, i0, 4) =  0.5*z*(1.0 - x);
00366         outputValues(12, i0, 5) = -0.5*(1.0 - x)*(1.0 - y);
00367 
00368         outputValues(13, i0, 0) =  0.0;
00369         outputValues(13, i0, 1) = -0.25*(1.0 - z*z);
00370         outputValues(13, i0, 2) = -0.5*z*(1.0 - y);
00371         outputValues(13, i0, 3) =  0.0;
00372         outputValues(13, i0, 4) =  0.5*z*(1.0 + x);
00373         outputValues(13, i0, 5) = -0.5*(1.0 + x)*(1.0 - y);
00374 
00375         outputValues(14, i0, 0) =  0.0;
00376         outputValues(14, i0, 1) =  0.25*(1.0 - z*z);
00377         outputValues(14, i0, 2) = -0.5*z*(1.0 + y);
00378         outputValues(14, i0, 3) =  0.0;
00379         outputValues(14, i0, 4) = -0.5*z*(1.0 + x);
00380         outputValues(14, i0, 5) = -0.5*(1.0 + x)*(1.0 + y);
00381 
00382         outputValues(15, i0, 0) =  0.0;
00383         outputValues(15, i0, 1) = -0.25*(1.0 - z*z);
00384         outputValues(15, i0, 2) =  0.5*z*(1.0 + y);
00385         outputValues(15, i0, 3) =  0.0;
00386         outputValues(15, i0, 4) = -0.5*z*(1.0 - x);
00387         outputValues(14, i0, 5) = -0.5*(1.0 - x)*(1.0 + y);
00388 
00389         outputValues(16, i0, 0) = -0.5*(1.0 - y)*(1.0 + z);
00390         outputValues(16, i0, 1) =  0.5*x*(1.0 + z);
00391         outputValues(16, i0, 2) = -0.5*x*(1.0 - y);
00392         outputValues(16, i0, 3) =  0.0;
00393         outputValues(16, i0, 4) = -0.25*(1.0 - x*x);
00394         outputValues(16, i0, 5) =  0.0;
00395 
00396         outputValues(17, i0, 0) =  0.0;
00397         outputValues(17, i0, 1) = -0.5*y*(1.0 + z);
00398         outputValues(17, i0, 2) =  0.25*(1.0 - y*y);
00399         outputValues(17, i0, 3) = -0.5*(1.0 + x)*(1.0 + z);
00400         outputValues(17, i0, 4) = -0.5*y*(1.0 + x);
00401         outputValues(17, i0, 5) =  0.0;
00402 
00403         outputValues(18, i0, 0) = -0.5*(1.0 + y)*(1.0 + z);
00404         outputValues(18, i0, 1) = -0.5*x*(1.0 + z);
00405         outputValues(18, i0, 2) = -0.5*x*(1.0 + y);
00406         outputValues(18, i0, 3) =  0.0;
00407         outputValues(18, i0, 4) =  0.25*(1.0 - x*x);
00408         outputValues(18, i0, 5) =  0.0;
00409 
00410         outputValues(19, i0, 0) =  0.0;
00411         outputValues(19, i0, 1) =  0.5*y*(1.0 + z);
00412         outputValues(19, i0, 2) = -0.25*(1.0 - y*y);
00413         outputValues(19, i0, 3) = -0.5*(1.0 - x)*(1.0 + z);
00414         outputValues(19, i0, 4) = -0.5*y*(1.0 - x);
00415         outputValues(19, i0, 5) =  0.0;
00416 
00417       }
00418       break;
00419       
00420     case OPERATOR_D3:
00421       for (int i0 = 0; i0 < dim0; i0++) {
00422         x = inputPoints(i0,0);
00423         y = inputPoints(i0,1);
00424         z = inputPoints(i0,2);
00425                 
00426         outputValues(0,i0, 0) =  0.0;
00427         outputValues(0,i0, 1) = -0.25*(1.0 - z);
00428         outputValues(0,i0, 2) = -0.25*(1.0 - y);
00429         outputValues(0,i0, 3) = -0.25*(1.0 - z);
00430         outputValues(0,i0, 4) = -0.125*(-2.0*x - 2.0*y - 2.0*z + 1.0);
00431         outputValues(0,i0, 5) = -0.25*(1.0 - y);
00432         outputValues(0,i0, 6) =  0.0;    
00433         outputValues(0,i0, 7) = -0.25*(1.0 - x);
00434         outputValues(0,i0, 8) = -0.25*(1.0 - x);
00435         outputValues(0,i0, 9) =  0.0;
00436                 
00437         outputValues(1,i0, 0) =  0.0;
00438         outputValues(1,i0, 1) = -0.25*(1.0 - z);
00439         outputValues(1,i0, 2) = -0.25*(1.0 - y);
00440         outputValues(1,i0, 3) =  0.25*(1.0 - z);
00441         outputValues(1,i0, 4) =  0.125*(2.0*x - 2.0*y - 2.0*z + 1.0);
00442         outputValues(1,i0, 5) =  0.25*(1.0 - y);
00443         outputValues(1,i0, 6) =  0.0;    
00444         outputValues(1,i0, 7) = -0.25*(1.0 + x);
00445         outputValues(1,i0, 8) = -0.25*(1.0 + x);
00446         outputValues(1,i0, 9) =  0.0;
00447 
00448         outputValues(2,i0, 0) =  0.0;
00449         outputValues(2,i0, 1) =  0.25*(1.0 - z);
00450         outputValues(2,i0, 2) = -0.25*(1.0 + y);
00451         outputValues(2,i0, 3) =  0.25*(1.0 - z);
00452         outputValues(2,i0, 4) = -0.125*(2.0*x + 2.0*y - 2.0*z + 1.0);
00453         outputValues(2,i0, 5) =  0.25*(1.0 + y);
00454         outputValues(2,i0, 6) =  0.0;    
00455         outputValues(2,i0, 7) = -0.25*(1.0 + x);
00456         outputValues(2,i0, 8) =  0.25*(1.0 + x);
00457         outputValues(2,i0, 9) =  0.0;
00458 
00459         outputValues(3,i0, 0) =  0.0;
00460         outputValues(3,i0, 1) =  0.25*(1.0 - z);
00461         outputValues(3,i0, 2) = -0.25*(1.0 + y);
00462         outputValues(3,i0, 3) = -0.25*(1.0 - z);
00463         outputValues(3,i0, 4) =  0.125*(-2.0*x + 2.0*y - 2.0*z + 1.0);
00464         outputValues(3,i0, 5) = -0.25*(1.0 + y);
00465         outputValues(3,i0, 6) =  0.0;    
00466         outputValues(3,i0, 7) = -0.25*(1.0 - x);
00467         outputValues(3,i0, 8) =  0.25*(1.0 - x);
00468         outputValues(3,i0, 9) =  0.0;
00469 
00470         outputValues(4,i0, 0) =  0.0;
00471         outputValues(4,i0, 1) = -0.25*(1.0 + z);
00472         outputValues(4,i0, 2) =  0.25*(1.0 - y);
00473         outputValues(4,i0, 3) = -0.25*(1.0 + z);
00474         outputValues(4,i0, 4) =  0.125*(-2.0*x - 2.0*y + 2.0*z + 1.0);
00475         outputValues(4,i0, 5) = -0.25*(1.0 - y);
00476         outputValues(4,i0, 6) =  0.0;    
00477         outputValues(4,i0, 7) =  0.25*(1.0 - x);
00478         outputValues(4,i0, 8) = -0.25*(1.0 - x);
00479         outputValues(4,i0, 9) =  0.0;
00480 
00481         outputValues(5,i0, 0) =  0.0;
00482         outputValues(5,i0, 1) = -0.25*(1.0 + z);
00483         outputValues(5,i0, 2) =  0.25*(1.0 - y);
00484         outputValues(5,i0, 3) =  0.25*(1.0 + z);
00485         outputValues(5,i0, 4) = -0.125*(2.0*x - 2.0*y + 2.0*z + 1.0);
00486         outputValues(5,i0, 5) =  0.25*(1.0 - y);
00487         outputValues(5,i0, 6) =  0.0;    
00488         outputValues(5,i0, 7) =  0.25*(1.0 + x);
00489         outputValues(5,i0, 8) = -0.25*(1.0 + x);
00490         outputValues(5,i0, 9) =  0.0;
00491 
00492         outputValues(6,i0, 0) =  0.0;
00493         outputValues(6,i0, 1) =  0.25*(1.0 + z);
00494         outputValues(6,i0, 2) =  0.25*(1.0 + y);
00495         outputValues(6,i0, 3) =  0.25*(1.0 + z);
00496         outputValues(6,i0, 4) =  0.125*(2.0*x + 2.0*y + 2.0*z + 1.0);
00497         outputValues(6,i0, 5) =  0.25*(1.0 + y);
00498         outputValues(6,i0, 6) =  0.0;    
00499         outputValues(6,i0, 7) =  0.25*(1.0 + x);
00500         outputValues(6,i0, 8) =  0.25*(1.0 + x);
00501         outputValues(6,i0, 9) =  0.0;
00502 
00503         outputValues(7,i0, 0) =  0.0;
00504         outputValues(7,i0, 1) =  0.25*(1.0 + z);
00505         outputValues(7,i0, 2) =  0.25*(1.0 + y);
00506         outputValues(7,i0, 3) = -0.25*(1.0 + z);
00507         outputValues(7,i0, 4) = -0.125*(-2.0*x + 2.0*y + 2.0*z + 1.0);
00508         outputValues(7,i0, 5) = -0.25*(1.0 + y);
00509         outputValues(7,i0, 6) =  0.0;    
00510         outputValues(7,i0, 7) =  0.25*(1.0 - x);
00511         outputValues(7,i0, 8) =  0.25*(1.0 - x);
00512         outputValues(7,i0, 9) =  0.0;
00513 
00514         outputValues(8,i0, 0) =  0.0;
00515         outputValues(8,i0, 1) =  0.5*(1.0 - z);
00516         outputValues(8,i0, 2) =  0.5*(1.0 - y);
00517         outputValues(8,i0, 3) =  0.0;
00518         outputValues(8,i0, 4) = -0.5*x;
00519         outputValues(8,i0, 5) =  0.0;
00520         outputValues(8,i0, 6) =  0.0;    
00521         outputValues(8,i0, 7) =  0.0;
00522         outputValues(8,i0, 8) =  0.0;
00523         outputValues(8,i0, 9) =  0.0;
00524 
00525         outputValues(9,i0, 0) =  0.0;
00526         outputValues(9,i0, 1) =  0.0;
00527         outputValues(9,i0, 2) =  0.0;
00528         outputValues(9,i0, 3) = -0.5*(1.0 - z);  
00529         outputValues(9,i0, 4) =  0.5*y;
00530         outputValues(9,i0, 5) =  0.0;
00531         outputValues(9,i0, 6) =  0.0;    
00532         outputValues(9,i0, 7) =  0.5*(1.0 + x);
00533         outputValues(9,i0, 8) =  0.0;
00534         outputValues(9,i0, 9) =  0.0;
00535 
00536         outputValues(10,i0, 0) =  0.0;
00537         outputValues(10,i0, 1) = -0.5*(1.0 - z);
00538         outputValues(10,i0, 2) =  0.5*(1.0 + y);
00539         outputValues(10,i0, 3) =  0.0;
00540         outputValues(10,i0, 4) =  0.5*x;
00541         outputValues(10,i0, 5) =  0.0;
00542         outputValues(10,i0, 6) =  0.0;    
00543         outputValues(10,i0, 7) =  0.0;
00544         outputValues(10,i0, 8) =  0.0;
00545         outputValues(10,i0, 9) =  0.0;
00546 
00547         outputValues(11,i0, 0) =  0.0;
00548         outputValues(11,i0, 1) =  0.0;
00549         outputValues(11,i0, 2) =  0.0;
00550         outputValues(11,i0, 3) =  0.5*(1.0 - z);  
00551         outputValues(11,i0, 4) = -0.5*y;
00552         outputValues(11,i0, 5) =  0.0;
00553         outputValues(11,i0, 6) =  0.0;    
00554         outputValues(11,i0, 7) =  0.5*(1.0 - x);
00555         outputValues(11,i0, 8) =  0.0;
00556         outputValues(11,i0, 9) =  0.0;
00557 
00558         outputValues(12,i0, 0) =  0.0;
00559         outputValues(12,i0, 1) =  0.0;
00560         outputValues(12,i0, 2) =  0.0;
00561         outputValues(12,i0, 3) =  0.0;  
00562         outputValues(12,i0, 4) = -0.5*z;
00563         outputValues(12,i0, 5) =  0.5*(1.0 - y);
00564         outputValues(12,i0, 6) =  0.0;    
00565         outputValues(12,i0, 7) =  0.0;
00566         outputValues(12,i0, 8) =  0.5*(1.0 - x);
00567         outputValues(12,i0, 9) =  0.0;
00568 
00569         outputValues(13,i0, 0) =  0.0;
00570         outputValues(13,i0, 1) =  0.0;
00571         outputValues(13,i0, 2) =  0.0;
00572         outputValues(13,i0, 3) =  0.0;  
00573         outputValues(13,i0, 4) =  0.5*z;
00574         outputValues(13,i0, 5) = -0.5*(1.0 - y);
00575         outputValues(13,i0, 6) =  0.0;    
00576         outputValues(13,i0, 7) =  0.0;
00577         outputValues(13,i0, 8) =  0.5*(1.0 + x);
00578         outputValues(13,i0, 9) =  0.0;
00579 
00580         outputValues(14,i0, 0) =  0.0;
00581         outputValues(14,i0, 1) =  0.0;
00582         outputValues(14,i0, 2) =  0.0;
00583         outputValues(14,i0, 3) =  0.0;  
00584         outputValues(14,i0, 4) = -0.5*z;
00585         outputValues(14,i0, 5) = -0.5*(1.0 + y);
00586         outputValues(14,i0, 6) =  0.0;    
00587         outputValues(14,i0, 7) =  0.0;
00588         outputValues(14,i0, 8) = -0.5*(1.0 + x);
00589         outputValues(14,i0, 9) =  0.0;
00590 
00591         outputValues(15,i0, 0) =  0.0;
00592         outputValues(15,i0, 1) =  0.0;
00593         outputValues(15,i0, 2) =  0.0;
00594         outputValues(15,i0, 3) =  0.0;  
00595         outputValues(15,i0, 4) =  0.5*z;
00596         outputValues(15,i0, 5) =  0.5*(1.0 + y);
00597         outputValues(15,i0, 6) =  0.0;    
00598         outputValues(15,i0, 7) =  0.0;
00599         outputValues(15,i0, 8) = -0.5*(1.0 - x);
00600         outputValues(15,i0, 9) =  0.0;
00601 
00602         outputValues(16,i0, 0) =  0.0;
00603         outputValues(16,i0, 1) =  0.5*(1.0 + z);
00604         outputValues(16,i0, 2) = -0.5*(1.0 - y);
00605         outputValues(16,i0, 3) =  0.0;
00606         outputValues(16,i0, 4) =  0.5*x;
00607         outputValues(16,i0, 5) =  0.0;
00608         outputValues(16,i0, 6) =  0.0;    
00609         outputValues(16,i0, 7) =  0.0;
00610         outputValues(16,i0, 8) =  0.0;
00611         outputValues(16,i0, 9) =  0.0;
00612 
00613         outputValues(17,i0, 0) =  0.0;
00614         outputValues(17,i0, 1) =  0.0;
00615         outputValues(17,i0, 2) =  0.0;
00616         outputValues(17,i0, 3) = -0.5*(1.0 + z);  
00617         outputValues(17,i0, 4) = -0.5*y;
00618         outputValues(17,i0, 5) =  0.0;
00619         outputValues(17,i0, 6) =  0.0;    
00620         outputValues(17,i0, 7) = -0.5*(1.0 + x);
00621         outputValues(17,i0, 8) =  0.0;
00622         outputValues(17,i0, 9) =  0.0;
00623 
00624         outputValues(18,i0, 0) =  0.0;
00625         outputValues(18,i0, 1) = -0.5*(1.0 + z);
00626         outputValues(18,i0, 2) = -0.5*(1.0 + y);
00627         outputValues(18,i0, 3) =  0.0;
00628         outputValues(18,i0, 4) = -0.5*x;
00629         outputValues(18,i0, 5) =  0.0;
00630         outputValues(18,i0, 6) =  0.0;    
00631         outputValues(18,i0, 7) =  0.0;
00632         outputValues(18,i0, 8) =  0.0;
00633         outputValues(18,i0, 9) =  0.0;
00634 
00635         outputValues(19,i0, 0) =  0.0;
00636         outputValues(19,i0, 1) =  0.0;
00637         outputValues(19,i0, 2) =  0.0;
00638         outputValues(19,i0, 3) =  0.5*(1.0 + z);  
00639         outputValues(19,i0, 4) =  0.5*y;
00640         outputValues(19,i0, 5) =  0.0;
00641         outputValues(19,i0, 6) =  0.0;    
00642         outputValues(19,i0, 7) = -0.5*(1.0 - x);
00643         outputValues(19,i0, 8) =  0.0;
00644         outputValues(19,i0, 9) =  0.0;
00645         
00646       }
00647       break;
00648       
00649     case OPERATOR_D4:
00650       {
00651         // Intitialize array by zero and then fill only non-zero entries.
00652         int DkCardinality = Intrepid::getDkCardinality(operatorType, this -> basisCellTopology_.getDimension() );
00653         for(int dofOrd = 0; dofOrd < this -> basisCardinality_; dofOrd++) {
00654           for (int i0 = 0; i0 < dim0; i0++) {
00655             for(int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
00656               outputValues(dofOrd, i0, dkOrd) = 0.0;
00657             }
00658           }
00659         }
00660         
00661         for (int i0 = 0; i0 < dim0; i0++) {
00662           x = inputPoints(i0,0);
00663           y = inputPoints(i0,1);
00664           z = inputPoints(i0,2);
00665           
00666           outputValues( 0, i0, 4) =  0.25;
00667           outputValues( 0, i0, 7) =  0.25;
00668           outputValues( 0, i0, 8) =  0.25;
00669 
00670           outputValues( 1, i0, 4) =  0.25;
00671           outputValues( 1, i0, 7) = -0.25;
00672           outputValues( 1, i0, 8) = -0.25;
00673 
00674           outputValues( 2, i0, 4) = -0.25;
00675           outputValues( 2, i0, 7) = -0.25;
00676           outputValues( 2, i0, 8) =  0.25;
00677 
00678           outputValues( 3, i0, 4) = -0.25;
00679           outputValues( 3, i0, 7) =  0.25;
00680           outputValues( 3, i0, 8) = -0.25;
00681 
00682           outputValues( 4, i0, 4) = -0.25;
00683           outputValues( 4, i0, 7) = -0.25;
00684           outputValues( 4, i0, 8) =  0.25;
00685 
00686           outputValues( 5, i0, 4) = -0.25;
00687           outputValues( 5, i0, 7) =  0.25;
00688           outputValues( 5, i0, 8) = -0.25;
00689 
00690           outputValues( 6, i0, 4) =  0.25;
00691           outputValues( 6, i0, 7) =  0.25;
00692           outputValues( 6, i0, 8) =  0.25;
00693 
00694           outputValues( 7, i0, 4) =  0.25;
00695           outputValues( 7, i0, 7) = -0.25;
00696           outputValues( 7, i0, 8) = -0.25;
00697 
00698           outputValues( 8, i0, 4) = -0.5;
00699           outputValues( 9, i0, 7) =  0.5;
00700           outputValues(10, i0, 4) =  0.5;
00701           outputValues(11, i0, 7) = -0.5;
00702           outputValues(12, i0, 8) = -0.5;
00703           outputValues(13, i0, 8) =  0.5;
00704           outputValues(14, i0, 8) = -0.5;
00705           outputValues(15, i0, 8) =  0.5;
00706           outputValues(16, i0, 4) =  0.5;
00707           outputValues(17, i0, 7) = -0.5;
00708           outputValues(18, i0, 4) = -0.5;
00709           outputValues(19, i0, 7) =  0.5;
00710         }
00711       }
00712       break;
00713       
00714     case OPERATOR_D5:
00715     case OPERATOR_D6:
00716     case OPERATOR_D7:
00717     case OPERATOR_D8:
00718     case OPERATOR_D9:
00719     case OPERATOR_D10:
00720       {
00721         // outputValues is a rank-3 array with dimensions (basisCardinality_, dim0, DkCardinality)
00722         int DkCardinality = Intrepid::getDkCardinality(operatorType, 
00723                                                        this -> basisCellTopology_.getDimension() );
00724         for(int dofOrd = 0; dofOrd < this -> basisCardinality_; dofOrd++) {
00725           for (int i0 = 0; i0 < dim0; i0++) {
00726             for(int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
00727               outputValues(dofOrd, i0, dkOrd) = 0.0;
00728             }
00729           }
00730         }
00731       }
00732       break;
00733       
00734     default:
00735       TEUCHOS_TEST_FOR_EXCEPTION( !( Intrepid::isValidOperator(operatorType) ), std::invalid_argument,
00736                           ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): Invalid operator type");
00737   }
00738 }
00739 
00740 
00741 
00742 template<class Scalar, class ArrayScalar>
00743 void Basis_HGRAD_HEX_I2_FEM<Scalar, ArrayScalar>::getValues(ArrayScalar&           outputValues,
00744                                                             const ArrayScalar &    inputPoints,
00745                                                             const ArrayScalar &    cellVertices,
00746                                                             const EOperator        operatorType) const {
00747   TEUCHOS_TEST_FOR_EXCEPTION( (true), std::logic_error,
00748                       ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): FEM Basis calling an FVD member function");
00749                                                             }
00750 
00751 template<class Scalar, class ArrayScalar>
00752 void Basis_HGRAD_HEX_I2_FEM<Scalar, ArrayScalar>::getDofCoords(ArrayScalar & DofCoords) const {
00753 #ifdef HAVE_INTREPID_DEBUG
00754   // Verify rank of output array.
00755   TEUCHOS_TEST_FOR_EXCEPTION( !(DofCoords.rank() == 2), std::invalid_argument,
00756                       ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) rank = 2 required for DofCoords array");
00757   // Verify 0th dimension of output array.
00758   TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(0) == this -> basisCardinality_ ), std::invalid_argument,
00759                       ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) mismatch in number of DoF and 0th dimension of DofCoords array");
00760   // Verify 1st dimension of output array.
00761   TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(1) == (int)(this -> basisCellTopology_.getDimension()) ), std::invalid_argument,
00762                       ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) incorrect reference cell (1st) dimension in DofCoords array");
00763 #endif
00764 
00765   DofCoords(0,0) = -1.0;   DofCoords(0,1) = -1.0; DofCoords(0,2) = -1.0;  
00766   DofCoords(1,0) =  1.0;   DofCoords(1,1) = -1.0; DofCoords(1,2) = -1.0;  
00767   DofCoords(2,0) =  1.0;   DofCoords(2,1) =  1.0; DofCoords(2,2) = -1.0;  
00768   DofCoords(3,0) = -1.0;   DofCoords(3,1) =  1.0; DofCoords(3,2) = -1.0;  
00769   DofCoords(4,0) = -1.0;   DofCoords(4,1) = -1.0; DofCoords(4,2) =  1.0;  
00770   DofCoords(5,0) =  1.0;   DofCoords(5,1) = -1.0; DofCoords(5,2) =  1.0;  
00771   DofCoords(6,0) =  1.0;   DofCoords(6,1) =  1.0; DofCoords(6,2) =  1.0;  
00772   DofCoords(7,0) = -1.0;   DofCoords(7,1) =  1.0; DofCoords(7,2) =  1.0;  
00773 
00774   DofCoords(8,0) =   0.0;   DofCoords(8,1) =  -1.0; DofCoords(8,2) =  -1.0;  
00775   DofCoords(9,0) =   1.0;   DofCoords(9,1) =   0.0; DofCoords(9,2) =  -1.0;  
00776   DofCoords(10,0) =  0.0;   DofCoords(10,1) =  1.0; DofCoords(10,2) = -1.0;  
00777   DofCoords(11,0) = -1.0;   DofCoords(11,1) =  0.0; DofCoords(11,2) = -1.0;  
00778   DofCoords(12,0) = -1.0;   DofCoords(12,1) = -1.0; DofCoords(12,2) =  0.0;  
00779   DofCoords(13,0) =  1.0;   DofCoords(13,1) = -1.0; DofCoords(13,2) =  0.0;  
00780   DofCoords(14,0) =  1.0;   DofCoords(14,1) =  1.0; DofCoords(14,2) =  0.0;  
00781   DofCoords(15,0) = -1.0;   DofCoords(15,1) =  1.0; DofCoords(15,2) =  0.0;  
00782   DofCoords(16,0) =  0.0;   DofCoords(16,1) = -1.0; DofCoords(16,2) =  1.0;  
00783   DofCoords(17,0) =  1.0;   DofCoords(17,1) =  0.0; DofCoords(17,2) =  1.0;  
00784   DofCoords(18,0) =  0.0;   DofCoords(18,1) =  1.0; DofCoords(18,2) =  1.0;  
00785   DofCoords(19,0) = -1.0;   DofCoords(19,1) =  0.0; DofCoords(19,2) =  1.0;  
00786 }
00787 
00788 }// namespace Intrepid
00789 #endif