52 #include "Teuchos_oblackholestream.hpp" 
   53 #include "Teuchos_RCP.hpp" 
   54 #include "Teuchos_GlobalMPISession.hpp" 
   55 #include "Teuchos_ScalarTraits.hpp" 
   56 #include <Kokkos_Core.hpp> 
   59 using namespace Intrepid;
 
   81                                  const shards::CellTopology&        parentCell,
 
   82                                  const Kokkos::View<double**>&      subcParamVert_A,
 
   83                                  const Kokkos::View<double**>&      subcParamVert_B,
 
   85                                  const Teuchos::RCP<std::ostream>&  outStream);
 
   89 Teuchos::RCP< Basis< double, FieldContainer<double> > >
 
   90 getIntrepidBasis(
const shards::CellTopology &cellTopo)
 
   92   Teuchos::RCP< Basis< double, FieldContainer<double> > > HGRAD_Basis;
 
   94   switch( cellTopo.getKey() ){
 
   97     case shards::Line<2>::key:
 
  101     case shards::Triangle<3>::key:
 
  105     case shards::Quadrilateral<4>::key:
 
  109     case shards::Tetrahedron<4>::key:
 
  113     case shards::Hexahedron<8>::key:
 
  117     case shards::Wedge<6>::key:
 
  121     case shards::Pyramid<5>::key:
 
  126     case shards::Triangle<6>::key:    
 
  130     case shards::Quadrilateral<9>::key:
 
  134     case shards::Tetrahedron<10>::key:
 
  138     case shards::Tetrahedron<11>::key:
 
  142     case shards::Hexahedron<20>::key:
 
  146     case shards::Hexahedron<27>::key:
 
  150     case shards::Wedge<15>::key:
 
  154     case shards::Wedge<18>::key:
 
  158     case shards::Pyramid<13>::key:
 
  163     case shards::Quadrilateral<8>::key:
 
  164     TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument, 
 
  165                             ">>> ERROR (getIntrepidBasis): Cell topology not supported. ");
 
  169     case shards::Line<3>::key:
 
  170     case shards::Beam<2>::key:
 
  171     case shards::Beam<3>::key:
 
  172     case shards::ShellLine<2>::key:
 
  173     case shards::ShellLine<3>::key:
 
  174     case shards::ShellTriangle<3>::key:
 
  175     case shards::ShellTriangle<6>::key:
 
  176     case shards::ShellQuadrilateral<4>::key:
 
  177     case shards::ShellQuadrilateral<8>::key:
 
  178     case shards::ShellQuadrilateral<9>::key:
 
  179         TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument, 
 
  180                             ">>> ERROR (getIntrepidBasis): Cell topology not supported. ");
 
  183         TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::invalid_argument, 
 
  184                             ">>> ERROR (getIntrepidBasis): Cell topology not supported.");        
 
  190 int main(
int argc, 
char *argv[]) {
 
  192   Teuchos::GlobalMPISession mpiSession(&argc, &argv);
 
  193 Kokkos::initialize();
 
  195   typedef shards::CellTopology    CellTopology;
 
  198   int iprint     = argc - 1;
 
  200   Teuchos::RCP<std::ostream> outStream;
 
  201   Teuchos::oblackholestream bhs; 
 
  204     outStream = Teuchos::rcp(&std::cout, 
false);
 
  206     outStream = Teuchos::rcp(&bhs, 
false);
 
  209   Teuchos::oblackholestream oldFormatState;
 
  210   oldFormatState.copyfmt(std::cout);
 
  213     << 
"===============================================================================\n" \
 
  215     << 
"|                              Unit Test CellTools                            |\n" \
 
  217     << 
"|     1) Edge parametrizations                                                |\n" \
 
  218     << 
"|     2) Face parametrizations                                                |\n" \
 
  219     << 
"|     3) Edge tangents                                                        |\n" \
 
  220     << 
"|     4) Face tangents and normals                                            |\n" \
 
  222     << 
"|  Questions? Contact  Pavel Bochev (pbboche@sandia.gov)                      |\n" \
 
  223     << 
"|                      Denis Ridzal (dridzal@sandia.gov), or                  |\n" \
 
  224     << 
"|                      Kara Peterson (kjpeter@sandia.gov)                     |\n" \
 
  226     << 
"|  Intrepid's website: http://trilinos.sandia.gov/packages/intrepid           |\n" \
 
  227     << 
"|  Trilinos website:   http://trilinos.sandia.gov                             |\n" \
 
  229     << 
"===============================================================================\n";
 
  235   Kokkos::View<double**> cube_1(
"cube_1",2, 1);
 
  241   Kokkos::View<double**> simplex_2(
"simplex_2",3, 2);
 
  242   simplex_2(0, 0) = 0.0;   simplex_2(0, 1) = 0.0;
 
  243   simplex_2(1, 0) = 1.0;   simplex_2(1, 1) = 0.0;
 
  244   simplex_2(2, 0) = 0.0;   simplex_2(2, 1) = 1.0;
 
  248   Kokkos::View<double**> cube_2(
"cube_2",4, 2);
 
  249   cube_2(0, 0) =  -1.0;    cube_2(0, 1) =  -1.0;
 
  250   cube_2(1, 0) =   1.0;    cube_2(1, 1) =  -1.0;
 
  251   cube_2(2, 0) =   1.0;    cube_2(2, 1) =   1.0;
 
  252   cube_2(3, 0) =  -1.0;    cube_2(3, 1) =   1.0;
 
  256   std::vector<shards::CellTopology> allTopologies;
 
  257   shards::getTopologies(allTopologies);
 
  267     << 
"===============================================================================\n"\
 
  268     << 
"| Test 1: edge parametrizations:                                              |\n"\
 
  269     << 
"===============================================================================\n\n";
 
  274     for(
int topoOrd = 0; topoOrd < (int)allTopologies.size(); topoOrd++){
 
  277       if(allTopologies[topoOrd].getDimension() > 1 && CellTools::hasReferenceCell(allTopologies[topoOrd]) ){
 
  278         *outStream << 
" Testing edge parametrization for " <<  allTopologies[topoOrd].getName() <<
"\n";
 
  280                                     allTopologies[topoOrd],
 
  291       << 
"===============================================================================\n"\
 
  292       << 
"| Test 2: face parametrizations:                                              |\n"\
 
  293       << 
"===============================================================================\n\n";
 
  298     for(
int topoOrd = 0; topoOrd < (int)allTopologies.size(); topoOrd++){
 
  301       if(allTopologies[topoOrd].getDimension() > 2 && CellTools::hasReferenceCell(allTopologies[topoOrd]) ){
 
  302         *outStream << 
" Testing face parametrization for cell topology " <<  allTopologies[topoOrd].getName() <<
"\n";
 
  304                                     allTopologies[topoOrd],
 
  320     std::vector<shards::CellTopology> standardBaseTopologies;    
 
  321     shards::getTopologies(standardBaseTopologies, 4, shards::STANDARD_CELL, shards::BASE_TOPOLOGY);
 
  324     CellTopology paramEdge    (shards::getCellTopologyData<shards::Line<2> >() );
 
  325     CellTopology paramTriFace (shards::getCellTopologyData<shards::Triangle<3> >() );
 
  326     CellTopology paramQuadFace(shards::getCellTopologyData<shards::Quadrilateral<4> >() );
 
  333       << 
"===============================================================================\n"\
 
  334       << 
"| Test 3: edge tangents/normals for stand. cells with base topologies:        |\n"\
 
  335       << 
"===============================================================================\n\n";
 
  337     std::vector<shards::CellTopology>::iterator cti;
 
  340     Teuchos::RCP<Cubature<double> > edgeCubature = cubFactory.
create(paramEdge, 6); 
 
  341     int cubDim       = edgeCubature -> getDimension();
 
  342     int numCubPoints = edgeCubature -> getNumPoints();
 
  347     edgeCubature -> getCubature(paramEdgePoints, paramEdgeWeights);
 
  351     for(cti = standardBaseTopologies.begin(); cti !=standardBaseTopologies.end(); ++cti){
 
  354       if( ( (*cti).getDimension() >= 2) && ( (*cti).getKey() != shards::Pyramid<5>::key) ){ 
 
  356         int cellDim = (*cti).getDimension();
 
  357         int vCount  = (*cti).getVertexCount();
 
  358         Kokkos::View<double**> refCellVertices(
"refCellVertices",vCount, cellDim);
 
  359         CellTools::getReferenceSubcellVertices(refCellVertices, cellDim, 0, (*cti) );
 
  361         *outStream << 
" Testing edge tangents";
 
  362           if(cellDim == 2) { *outStream << 
" and normals"; }          
 
  363         *outStream <<
" for cell topology " <<  (*cti).getName() <<
"\n";
 
  367          Kokkos::View<double***> physCellVertices(
"physCellVertices",1, vCount, cellDim);
 
  371         for(
int v = 0; v < vCount; v++){
 
  372           for(
int d = 0; d < cellDim; d++){
 
  373             double delta = Teuchos::ScalarTraits<double>::random()/8.0;
 
  374             physCellVertices(0, v, d) = refCellVertices(v, d) + delta;
 
  379         Kokkos::View<double**> refEdgePoints(
"refEdgePoints",numCubPoints, cellDim);        
 
  380         Kokkos::View<double****> edgePointsJacobians(
"edgePointsJacobians",1, numCubPoints, cellDim, cellDim);
 
  381         Kokkos::View<double***> edgePointTangents(
"edgePointTangents",1, numCubPoints, cellDim);
 
  382         Kokkos::View<double***> edgePointNormals(
"edgePointNormals",1, numCubPoints, cellDim);        
 
  385         for(
int edgeOrd = 0; edgeOrd < (int)(*cti).getEdgeCount(); edgeOrd++){
 
  392           CellTools::mapToReferenceSubcell(refEdgePoints, paramEdgePoints, 1, edgeOrd, (*cti) );
 
  393           CellTools::setJacobian(edgePointsJacobians, refEdgePoints, physCellVertices, getIntrepidBasis(*cti) );
 
  394           CellTools::getPhysicalEdgeTangents(edgePointTangents, edgePointsJacobians, edgeOrd, (*cti)); 
 
  402           int v0ord = (*cti).getNodeMap(1, edgeOrd, 0);
 
  403           int v1ord = (*cti).getNodeMap(1, edgeOrd, 1);
 
  405           for(
int pt = 0; pt < numCubPoints; pt++){
 
  408             Kokkos::View<double*> edgeBenchmarkTangents(
"edgeBenchmarkTangents",3);
 
  410             for(
int d = 0; d < cellDim; d++){
 
  411               edgeBenchmarkTangents(d) = (physCellVertices(0, v1ord, d) - physCellVertices(0, v0ord, d))/2.0;
 
  414               if( abs(edgeBenchmarkTangents(d) - edgePointTangents(0, pt, d)) > INTREPID_THRESHOLD ){
 
  417                   << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  418                   << 
" Edge tangent computation by CellTools failed for: \n" 
  419                   << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  420                   << 
"        Edge ordinal = " << edgeOrd << 
"\n" 
  421                   << 
"   Edge point number = " << pt << 
"\n" 
  422                   << 
"  Tangent coordinate = " << d << 
"\n" 
  423                   << 
"     CellTools value = " <<  edgePointTangents(0, pt, d) << 
"\n" 
  424                   << 
"     Benchmark value = " <<  edgeBenchmarkTangents(d) << 
"\n\n";
 
  430               CellTools::getPhysicalSideNormals(edgePointNormals, edgePointsJacobians, edgeOrd, (*cti));
 
  431               if( abs(edgeBenchmarkTangents(1) - edgePointNormals(0, pt, 0)) > INTREPID_THRESHOLD ){
 
  434                   << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  435                   << 
" Edge Normal computation by CellTools failed for: \n" 
  436                   << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  437                   << 
"        Edge ordinal = " << edgeOrd << 
"\n" 
  438                   << 
"   Edge point number = " << pt << 
"\n" 
  439                   << 
"   Normal coordinate = " << 0 << 
"\n" 
  440                   << 
"     CellTools value = " <<  edgePointNormals(0, pt, 0) << 
"\n" 
  441                   << 
"     Benchmark value = " <<  edgeBenchmarkTangents(1) << 
"\n\n";
 
  443               if( abs(edgeBenchmarkTangents(0) + edgePointNormals(0, pt, 1)) > INTREPID_THRESHOLD ){
 
  446                   << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  447                   << 
" Edge Normal computation by CellTools failed for: \n" 
  448                   << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  449                   << 
"        Edge ordinal = " << edgeOrd << 
"\n" 
  450                   << 
"   Edge point number = " << pt << 
"\n" 
  451                   << 
"   Normal coordinate = " << 1  << 
"\n" 
  452                   << 
"     CellTools value = " <<  edgePointNormals(0, pt, 1) << 
"\n" 
  453                   << 
"     Benchmark value = " << -edgeBenchmarkTangents(0) << 
"\n\n";
 
  465       << 
"===============================================================================\n"\
 
  466       << 
"| Test 4: face/side normals for stand. 3D cells with base topologies:         |                                                      |\n"\
 
  467       << 
"===============================================================================\n\n";
 
  471     Teuchos::RCP<Cubature<double> > triFaceCubature  = cubFactory.
create(paramTriFace, 6); 
 
  472     Teuchos::RCP<Cubature<double> > quadFaceCubature = cubFactory.
create(paramQuadFace, 6); 
 
  474     int faceCubDim           = triFaceCubature -> getDimension();
 
  475     int numTriFaceCubPoints  = triFaceCubature -> getNumPoints();
 
  476     int numQuadFaceCubPoints = quadFaceCubature -> getNumPoints();    
 
  484     triFaceCubature -> getCubature(paramTriFacePointsFC, paramTriFaceWeightsFC);
 
  485     quadFaceCubature -> getCubature(paramQuadFacePointsFC, paramQuadFaceWeightsFC);
 
  486     Kokkos::View<double**> paramTriFacePoints(¶mTriFacePointsFC[0],paramTriFacePointsFC.dimension(0),paramTriFacePointsFC.dimension(1));
 
  487     Kokkos::View<double*> paramTriFaceWeights(¶mTriFaceWeightsFC[0],paramTriFaceWeightsFC.dimension(0));
 
  488     Kokkos::View<double**> paramQuadFacePoints(¶mQuadFacePointsFC[0],paramQuadFacePointsFC.dimension(0),paramQuadFacePointsFC.dimension(1));
 
  489     Kokkos::View<double*> paramQuadFaceWeights(¶mQuadFaceWeightsFC[0],paramQuadFaceWeightsFC.dimension(0));
 
  491     for(cti = standardBaseTopologies.begin(); cti !=standardBaseTopologies.end(); ++cti){
 
  494       if( ( (*cti).getDimension() == 3) && ( (*cti).getKey() != shards::Pyramid<5>::key) ){ 
 
  496         int cellDim = (*cti).getDimension();
 
  497         int vCount  = (*cti).getVertexCount();
 
  498         Kokkos::View<double**> refCellVertices(
"refCellVertices",vCount, cellDim);
 
  499         CellTools::getReferenceSubcellVertices(refCellVertices, cellDim, 0, (*cti) );
 
  501         *outStream << 
" Testing face/side normals for cell topology " <<  (*cti).getName() <<
"\n";
 
  504         Kokkos::View<double***> physCellVertices(
"physCellVertices",1, vCount, cellDim);
 
  508         for(
int v = 0; v < vCount; v++){
 
  509           for(
int d = 0; d < cellDim; d++){
 
  510             double delta = Teuchos::ScalarTraits<double>::random()/8.0;
 
  511             physCellVertices(0, v, d) = refCellVertices(v, d) + delta;
 
  517         Kokkos::View<double**> refTriFacePoints(
"refTriFacePoints",numTriFaceCubPoints, cellDim);        
 
  518         Kokkos::View<double**> refQuadFacePoints(
"refQuadFacePoints",numQuadFaceCubPoints, cellDim);        
 
  519         Kokkos::View<double****> triFacePointsJacobians(
"triFacePointsJacobians",1, numTriFaceCubPoints, cellDim, cellDim);
 
  520         Kokkos::View<double****> quadFacePointsJacobians(
"quadFacePointsJacobians",1, numQuadFaceCubPoints, cellDim, cellDim);
 
  521         Kokkos::View<double***> triFacePointNormals(
"triFacePointNormals",1, numTriFaceCubPoints, cellDim);
 
  522         Kokkos::View<double***> triSidePointNormals(
"triSidePointNormals",1, numTriFaceCubPoints, cellDim);
 
  523         Kokkos::View<double***> quadFacePointNormals(
"quadFacePointNormals",1, numQuadFaceCubPoints, cellDim);
 
  524         Kokkos::View<double***> quadSidePointNormals(
"quadSidePointNormals",1, numQuadFaceCubPoints, cellDim);
 
  528         for(
int faceOrd = 0; faceOrd < (int)(*cti).getSideCount(); faceOrd++){
 
  532           switch( (*cti).getCellTopologyData(2, faceOrd) -> key ) {
 
  534             case shards::Triangle<3>::key: 
 
  537                 CellTools::mapToReferenceSubcell(refTriFacePoints, paramTriFacePoints, 2, faceOrd, (*cti) );
 
  538                 CellTools::setJacobian(triFacePointsJacobians, refTriFacePoints, physCellVertices, getIntrepidBasis(*cti) );
 
  539                 CellTools::getPhysicalFaceNormals(triFacePointNormals, triFacePointsJacobians, faceOrd, (*cti));               
 
  540                 CellTools::getPhysicalSideNormals(triSidePointNormals, triFacePointsJacobians, faceOrd, (*cti));               
 
  547                 int v0ord = (*cti).getNodeMap(2, faceOrd, 0);
 
  548                 int v1ord = (*cti).getNodeMap(2, faceOrd, 1);
 
  549                 int v2ord = (*cti).getNodeMap(2, faceOrd, 2);
 
  553                 for(
int pt = 0; pt < numTriFaceCubPoints; pt++){
 
  554                   Kokkos::View<double*> tanX(
"tanX",3), tanY(
"tanY",3), faceNormal(
"faceNormal",3);
 
  555                   for(
int d = 0; d < cellDim; d++){
 
  556                     tanX(d) = (physCellVertices(0, v1ord, d) - physCellVertices(0, v0ord, d));
 
  557                     tanY(d) = (physCellVertices(0, v2ord, d) - physCellVertices(0, v0ord, d));
 
  563                   for(
int d = 0; d < cellDim; d++){
 
  566                     if( abs(faceNormal(d) - triFacePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
 
  569                         << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  570                         << 
" Face normal computation by CellTools failed for: \n" 
  571                         << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  572                         << 
"       Face Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name << 
"\n" 
  573                         << 
"        Face ordinal = " << faceOrd << 
"\n" 
  574                         << 
"   Face point number = " << pt << 
"\n" 
  575                         << 
"   Normal coordinate = " << d  << 
"\n" 
  576                         << 
"     CellTools value = " <<  triFacePointNormals(0, pt, d)
 
  577                         << 
"     Benchmark value = " <<  faceNormal(d) << 
"\n\n";
 
  580                     if( abs(faceNormal(d) - triSidePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
 
  583                         << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  584                         << 
" Side normal computation by CellTools failed for: \n" 
  585                         << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  586                         << 
"       Side Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name << 
"\n" 
  587                         << 
"        Side ordinal = " << faceOrd << 
"\n" 
  588                         << 
"   Side point number = " << pt << 
"\n" 
  589                         << 
"   Normal coordinate = " << d  << 
"\n" 
  590                         << 
"     CellTools value = " <<  triSidePointNormals(0, pt, d)
 
  591                         << 
"     Benchmark value = " <<  faceNormal(d) << 
"\n\n";
 
  598             case shards::Quadrilateral<4>::key:
 
  601                 CellTools::mapToReferenceSubcell(refQuadFacePoints, paramQuadFacePoints, 2, faceOrd, (*cti) );
 
  602                 CellTools::setJacobian(quadFacePointsJacobians, refQuadFacePoints, physCellVertices, getIntrepidBasis(*cti) );
 
  603                 CellTools::getPhysicalFaceNormals(quadFacePointNormals, quadFacePointsJacobians, faceOrd, (*cti));               
 
  604                 CellTools::getPhysicalSideNormals(quadSidePointNormals, quadFacePointsJacobians, faceOrd, (*cti)); 
 
  613                 int v0ord = (*cti).getNodeMap(2, faceOrd, 0);
 
  614                 int v1ord = (*cti).getNodeMap(2, faceOrd, 1);
 
  615                 int v2ord = (*cti).getNodeMap(2, faceOrd, 2);
 
  616                 int v3ord = (*cti).getNodeMap(2, faceOrd, 3);
 
  619                 for(
int pt = 0; pt < numTriFaceCubPoints; pt++){
 
  620                   Kokkos::View<double*> tanX(
"tanX",3), tanY(
"tanY",3), faceNormal(
"faceNormal",3);
 
  621                   for(
int d = 0; d < cellDim; d++){
 
  622                     tanX(d) = (physCellVertices(0, v0ord, d)*(-1.0 + paramQuadFacePoints(pt,1) )  +
 
  623                                physCellVertices(0, v1ord, d)*( 1.0 - paramQuadFacePoints(pt,1) ) + 
 
  624                                physCellVertices(0, v2ord, d)*( 1.0 + paramQuadFacePoints(pt,1) ) + 
 
  625                                physCellVertices(0, v3ord, d)*(-1.0 - paramQuadFacePoints(pt,1) ) )/4.0;
 
  627                     tanY(d) = (physCellVertices(0, v0ord, d)*(-1.0 + paramQuadFacePoints(pt,0) ) +
 
  628                                physCellVertices(0, v1ord, d)*(-1.0 - paramQuadFacePoints(pt,0) ) + 
 
  629                                physCellVertices(0, v2ord, d)*( 1.0 + paramQuadFacePoints(pt,0) ) + 
 
  630                                physCellVertices(0, v3ord, d)*( 1.0 - paramQuadFacePoints(pt,0) ) )/4.0;
 
  635                   for(
int d = 0; d < cellDim; d++){
 
  638                     if( abs(faceNormal(d) - quadFacePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
 
  641                         << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  642                         << 
" Face normal computation by CellTools failed for: \n" 
  643                         << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  644                         << 
"       Face Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name << 
"\n" 
  645                         << 
"        Face ordinal = " << faceOrd << 
"\n" 
  646                         << 
"   Face point number = " << pt << 
"\n" 
  647                         << 
"   Normal coordinate = " << d  << 
"\n" 
  648                         << 
"     CellTools value = " <<  quadFacePointNormals(0, pt, d)
 
  649                         << 
"     Benchmark value = " <<  faceNormal(d) << 
"\n\n";
 
  652                     if( abs(faceNormal(d) - quadSidePointNormals(0, pt, d)) > INTREPID_THRESHOLD ){
 
  655                         << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  656                         << 
" Side normal computation by CellTools failed for: \n" 
  657                         << 
"       Cell Topology = " << (*cti).getName() << 
"\n" 
  658                         << 
"       Side Topology = " << (*cti).getCellTopologyData(2, faceOrd) -> name << 
"\n" 
  659                         << 
"        Side ordinal = " << faceOrd << 
"\n" 
  660                         << 
"   Side point number = " << pt << 
"\n" 
  661                         << 
"   Normal coordinate = " << d  << 
"\n" 
  662                         << 
"     CellTools value = " <<  quadSidePointNormals(0, pt, d)
 
  663                         << 
"     Benchmark value = " <<  faceNormal(d) << 
"\n\n";
 
  671               *outStream << 
" Face normals test failure: face topology not supported \n\n";
 
  681   catch (std::logic_error err) {
 
  682     *outStream << err.what() << 
"\n";
 
  688     std::cout << 
"End Result: TEST FAILED\n";
 
  690     std::cout << 
"End Result: TEST PASSED\n";
 
  693   std::cout.copyfmt(oldFormatState);
 
  701                                  const shards::CellTopology&        parentCell,
 
  702                                  const Kokkos::View<double**>&      subcParamVert_A,
 
  703                                  const Kokkos::View<double**>&      subcParamVert_B,
 
  705                                  const Teuchos::RCP<std::ostream>&  outStream){
 
  708   int cellDim      = parentCell.getDimension();
 
  709   int subcCount    = parentCell.getSubcellCount(subcDim);
 
  713   for(
int subcOrd = 0; subcOrd < subcCount; subcOrd++){
 
  714     int subcVertexCount = parentCell.getVertexCount(subcDim, subcOrd);
 
  718     Kokkos::View<double**> refSubcellVertices(
"refSubcellVertices",subcVertexCount, cellDim);
 
  719     Kokkos::View<double**> mappedParamVertices(
"mappedParamVertices",subcVertexCount, cellDim);
 
  736     else if(subcDim == 2) {
 
  739       if(subcVertexCount == 3){
 
  747       else if(subcVertexCount == 4){
 
  757     for(
int subcVertOrd = 0; subcVertOrd < subcVertexCount; subcVertOrd++){
 
  758       for(
int dim = 0; dim <  cellDim; dim++){
 
  760         if(mappedParamVertices(subcVertOrd, dim) != refSubcellVertices(subcVertOrd, dim) ) {
 
  763             << std::setw(70) << 
"^^^^----FAILURE!" << 
"\n" 
  764             << 
" Cell Topology = " << parentCell.getName() << 
"\n" 
  765             << 
" Parametrization of subcell " << subcOrd << 
" which is " 
  766             << parentCell.getName(subcDim,subcOrd) << 
" failed for vertex " << subcVertOrd << 
":\n" 
  767             << 
" parametrization map fails to map correctly coordinate " << dim << 
" of that vertex\n\n";
 
Implementation of the serendipity-family H(grad)-compatible FEM basis of degree 2 on a Hexahedron cel...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Wedge cell. 
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Wedge cell. 
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Hexahedron cell...
Header file for utility class to provide multidimensional containers. 
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Line cell. 
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Triangle cell...
Implementation of an H(grad)-compatible FEM basis of degree 2 on Wedge cell. 
Header file for the abstract base class Intrepid::DefaultCubatureFactory. 
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Quadrilateral cell...
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Tetrahedron cell...
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Quadrilateral cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Pyramid cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Hexahedron cell...
Implementation of an H(grad)-compatible FEM basis of degree 2 on a Pyramid cell. 
A factory class that generates specific instances of cubatures. 
Teuchos::RCP< Cubature< Scalar, ArrayPoint, ArrayWeight > > create(const shards::CellTopology &cellTopology, const std::vector< int > °ree)
Factory method. 
void testSubcellParametrizations(int &errorFlag, const shards::CellTopology &parentCell, const FieldContainer< double > &subcParamVert_A, const FieldContainer< double > &subcParamVert_B, const int subcDim, const Teuchos::RCP< std::ostream > &outStream)
Maps the vertices of the subcell parametrization domain to that subcell. 
Implementation of the default H(grad)-compatible FEM basis of degree 2 on Triangle cell...
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Tetrahedron cell...