46 #ifndef Shards_BasicTopologies_hpp 
   47 #define Shards_BasicTopologies_hpp 
   50 #include <Shards_CellTopologyTraits.hpp> 
   63 #ifndef DOXYGEN_COMPILE 
   76 #ifndef DOXYGEN_COMPILE 
   91 template< 
unsigned NodeCount = 2 > 
struct Line {};
 
  106 template< 
unsigned NodeCount = 2 > 
struct Beam {};
 
  153 template< 
unsigned NodeCount = 3 > 
struct Triangle {};
 
  174 template<> 
const CellTopologyData * getCellTopologyData< ShellTriangle<3> >();
 
  177 template<> 
const CellTopologyData * getCellTopologyData< ShellTriangle<6> >();
 
  205 template<> 
const CellTopologyData * getCellTopologyData< Quadrilateral<4> >();
 
  208 template<> 
const CellTopologyData * getCellTopologyData< Quadrilateral<8> >();
 
  211 template<> 
const CellTopologyData * getCellTopologyData< Quadrilateral<9> >();
 
  223 template<> 
const CellTopologyData * getCellTopologyData< ShellQuadrilateral<4> >();
 
  226 template<> 
const CellTopologyData * getCellTopologyData< ShellQuadrilateral<8> >();
 
  229 template<> 
const CellTopologyData * getCellTopologyData< ShellQuadrilateral<9> >();
 
  239 template<> 
const CellTopologyData * getCellTopologyData< Tetrahedron<4> >();
 
  242 template<> 
const CellTopologyData * getCellTopologyData< Tetrahedron<10> >();
 
  245 template<> 
const CellTopologyData * getCellTopologyData< Tetrahedron<8> >();
 
  248 template<> 
const CellTopologyData * getCellTopologyData< Tetrahedron<11> >();
 
  255 template< 
unsigned NodeCount = 5 > 
struct Pyramid {};
 
  271 template< 
unsigned NodeCount = 6 > 
struct Wedge {};
 
  368 template<> 
const CellTopologyData * getCellTopologyData< Hexahedron<20> >();
 
  371 template<> 
const CellTopologyData * getCellTopologyData< Hexahedron<27> >();
 
  376 #ifndef DOXYGEN_COMPILE 
  386   LineNodePermutation ;
 
  388 typedef IndexList< CELL_PERMUTATION_POLARITY_POSITIVE,
 
  389                    CELL_PERMUTATION_POLARITY_NEGATIVE >
 
  390   LineNodePermutationPolarity;
 
  392 template<> 
struct Line<2> : 
public 
  394                       TypeListEnd, TypeListEnd,
 
  395                       TypeListEnd, TypeListEnd,
 
  397                       LineNodePermutationPolarity >
 
  400 template<> 
struct Line<3> : 
public 
  401   CellTopologyTraits< 1 , 2 , 3 ,
 
  402                       TypeListEnd, TypeListEnd,
 
  403                       TypeListEnd, TypeListEnd,
 
  405                       LineNodePermutationPolarity >
 
  406 { 
typedef Line<2> base ; };
 
  411   MakeTypeList< LineNodeMapIdentity >::type BeamEdgeNodeMap ;
 
  413 template<> 
struct Beam<2> : 
public 
  414   CellTopologyTraits< 2 , 2 , 2 ,
 
  415                       MakeTypeList< Line<2> >::type ,
 
  417 { 
typedef Beam<2> base ; };
 
  419 template<> 
struct Beam<3> : 
public 
  420   CellTopologyTraits< 2 , 2 , 3 ,
 
  421                       MakeTypeList< Line<3> >::type ,
 
  423 { 
typedef Beam<2> base ; };
 
  428   MakeTypeList< LineNodeMapIdentity , LineNodeMapReversed >::type
 
  429     ShellLineEdgeNodeMap ;
 
  431 template<> 
struct ShellLine<2> : 
public 
  432   CellTopologyTraits< 2 , 2 , 2 ,
 
  433                       MakeTypeList< Line<2> , Line<2> >::type ,
 
  434                       ShellLineEdgeNodeMap >
 
  435 { 
typedef ShellLine<2> base ; };
 
  437 template<> 
struct ShellLine<3> : 
public 
  438   CellTopologyTraits< 2 , 2 , 3 ,
 
  439                       MakeTypeList< Line<3> , Line<3> >::type ,
 
  440                       ShellLineEdgeNodeMap >
 
  441 { 
typedef ShellLine<2> base ; };
 
  447 typedef IndexList< 0, 1, 2,  3, 4, 5 > TriangleNodeMapIdentity ;
 
  448 typedef IndexList< 2, 0, 1,  5, 3, 4 > TriangleNodeMapPositive1 ;
 
  449 typedef IndexList< 1, 2, 0,  4, 5, 3 > TriangleNodeMapPositive2 ;
 
  450 typedef IndexList< 0, 2, 1,  5, 4, 3 > TriangleNodeMapReversed0 ;
 
  451 typedef IndexList< 2, 1, 0,  4, 3, 5 > TriangleNodeMapReversed1 ;
 
  452 typedef IndexList< 1, 0, 2,  3, 5, 4 > TriangleNodeMapReversed2 ;
 
  454 typedef MakeTypeList< TriangleNodeMapIdentity , 
 
  455                       TriangleNodeMapPositive1 , 
 
  456                       TriangleNodeMapPositive2 , 
 
  457                       TriangleNodeMapReversed0 , 
 
  458                       TriangleNodeMapReversed1 , 
 
  459                       TriangleNodeMapReversed2 >::type
 
  460   TriangleNodePermutation ;
 
  462 typedef IndexList< CELL_PERMUTATION_POLARITY_POSITIVE,
 
  463                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  464                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  465                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  466                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  467                    CELL_PERMUTATION_POLARITY_NEGATIVE >
 
  468   TriangleNodePermutationPolarity;
 
  470 typedef MakeTypeList< IndexList< 0 , 1 , 3 > ,
 
  471                       IndexList< 1 , 2 , 4 > ,
 
  472                       IndexList< 2 , 0 , 5 > >::type
 
  473   TriangleEdgeNodeMap ;
 
  475 template<> 
struct Triangle<3> : 
public 
  476   CellTopologyTraits< 2 , 3 , 3 ,
 
  477                       MakeTypeList< Line<2>  ,
 
  480                       TriangleEdgeNodeMap ,
 
  481                       TypeListEnd , TypeListEnd ,
 
  482                       TriangleNodePermutation ,
 
  483                       TriangleNodePermutationPolarity >
 
  484 { 
typedef Triangle<3> base ; };
 
  486 template<> 
struct Triangle<6> : 
public 
  487   CellTopologyTraits< 2 , 3 , 6 ,
 
  488                       MakeTypeList< Line<3>  ,
 
  491                       TriangleEdgeNodeMap ,
 
  492                       TypeListEnd , TypeListEnd ,
 
  493                       TriangleNodePermutation ,
 
  494                       TriangleNodePermutationPolarity >
 
  495 { 
typedef Triangle<3> base ; };
 
  497 typedef IndexList< 0, 1, 2,  3 > Triangle4_NodeMapIdentity ;
 
  498 typedef IndexList< 2, 0, 1,  3 > Triangle4_NodeMapPositive1 ;
 
  499 typedef IndexList< 1, 2, 0,  3 > Triangle4_NodeMapPositive2 ;
 
  500 typedef IndexList< 0, 2, 1,  3 > Triangle4_NodeMapReversed0 ;
 
  501 typedef IndexList< 2, 1, 0,  3 > Triangle4_NodeMapReversed1 ;
 
  502 typedef IndexList< 1, 0, 2,  3 > Triangle4_NodeMapReversed2 ;
 
  504 typedef MakeTypeList< Triangle4_NodeMapIdentity ,
 
  505                       Triangle4_NodeMapPositive1 , 
 
  506                       Triangle4_NodeMapPositive2 , 
 
  507                       Triangle4_NodeMapReversed0 , 
 
  508                       Triangle4_NodeMapReversed1 , 
 
  509                       Triangle4_NodeMapReversed2 >::type
 
  510   Triangle4_NodePermutation ;
 
  512 typedef IndexList< CELL_PERMUTATION_POLARITY_POSITIVE,
 
  513                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  514                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  515                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  516                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  517                    CELL_PERMUTATION_POLARITY_NEGATIVE >
 
  518   Triangle4_NodePermutationPolarity;
 
  520 template<> 
struct Triangle<4> : 
public 
  521   CellTopologyTraits< 2 , 3 , 4 ,
 
  522                       MakeTypeList< Line<2>  ,
 
  525                       TriangleEdgeNodeMap ,
 
  526                       TypeListEnd , TypeListEnd ,
 
  527                       Triangle4_NodePermutation ,
 
  528                       Triangle4_NodePermutationPolarity >
 
  529 { 
typedef Triangle<3> base ; };
 
  533 typedef MakeTypeList< TriangleNodeMapIdentity ,
 
  534                       TriangleNodeMapReversed0 >::type
 
  535   ShellTriangleFaceNodeMap ;
 
  537 template<> 
struct ShellTriangle<3> : 
public 
  538   CellTopologyTraits< 3 , 3 , 3 ,
 
  539                             MakeTypeList< Line<2>  ,
 
  542                             TriangleEdgeNodeMap ,
 
  543                             MakeTypeList< Triangle<3>  ,
 
  544                                           Triangle<3>  >::type ,
 
  545                             ShellTriangleFaceNodeMap >
 
  546 { 
typedef ShellTriangle<3> base ; };
 
  548 template<> 
struct ShellTriangle<6> : 
public 
  549   CellTopologyTraits< 3 , 3 , 6 ,
 
  550                             MakeTypeList< Line<3>  ,
 
  553                             TriangleEdgeNodeMap ,
 
  554                             MakeTypeList< Triangle<6>  ,
 
  555                                           Triangle<6>  >::type ,
 
  556                             ShellTriangleFaceNodeMap >
 
  557 { 
typedef ShellTriangle<3> base ; };
 
  564 typedef IndexList< 0, 1, 2, 3,  4, 5, 6, 7,  8 > QuadrilateralNodeMapIdentity ;
 
  565 typedef IndexList< 3, 0, 1, 2,  7, 4, 5, 6,  8 > QuadrilateralNodeMapPositive1 ;
 
  566 typedef IndexList< 2, 3, 0, 1,  6, 7, 4, 5,  8 > QuadrilateralNodeMapPositive2 ;
 
  567 typedef IndexList< 1, 2, 3, 0,  5, 6, 7, 4,  8 > QuadrilateralNodeMapPositive3 ;
 
  568 typedef IndexList< 0, 3, 2, 1,  7, 6, 5, 4,  8 > QuadrilateralNodeMapReversed0 ;
 
  569 typedef IndexList< 3, 2, 1, 0,  6, 5, 4, 7,  8 > QuadrilateralNodeMapReversed1 ;
 
  570 typedef IndexList< 2, 1, 0, 3,  5, 4, 7, 6,  8 > QuadrilateralNodeMapReversed2 ;
 
  571 typedef IndexList< 1, 0, 3, 2,  4, 7, 6, 5,  8 > QuadrilateralNodeMapReversed3 ;
 
  573 typedef MakeTypeList< QuadrilateralNodeMapIdentity ,
 
  574                       QuadrilateralNodeMapPositive1 ,
 
  575                       QuadrilateralNodeMapPositive2 ,
 
  576                       QuadrilateralNodeMapPositive3 ,
 
  577                       QuadrilateralNodeMapReversed0 ,
 
  578                       QuadrilateralNodeMapReversed1 ,
 
  579                       QuadrilateralNodeMapReversed2 ,
 
  580                       QuadrilateralNodeMapReversed3 >::type
 
  581   QuadrilateralNodePermutation ;
 
  583 typedef IndexList< CELL_PERMUTATION_POLARITY_POSITIVE,
 
  584                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  585                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  586                    CELL_PERMUTATION_POLARITY_POSITIVE,
 
  587                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  588                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  589                    CELL_PERMUTATION_POLARITY_NEGATIVE,
 
  590                    CELL_PERMUTATION_POLARITY_NEGATIVE >
 
  591   QuadrilateralNodePermutationPolarity;
 
  593 typedef MakeTypeList< IndexList< 0 , 1 ,  4 > ,
 
  594                       IndexList< 1 , 2 ,  5 > ,
 
  595                       IndexList< 2 , 3 ,  6 > ,
 
  596                       IndexList< 3 , 0 ,  7 > >::type
 
  597   QuadrilateralEdgeNodeMap ;
 
  599 template<> 
struct Quadrilateral<4> : 
public 
  600   CellTopologyTraits< 2 , 4 , 4 ,
 
  601                             MakeTypeList< Line<2>  ,
 
  605                             QuadrilateralEdgeNodeMap ,
 
  606                             TypeListEnd , TypeListEnd ,
 
  607                             QuadrilateralNodePermutation ,
 
  608                             QuadrilateralNodePermutationPolarity >
 
  609 { 
typedef Quadrilateral<4> base ; };
 
  611 template<> 
struct Quadrilateral<8> : 
public 
  612   CellTopologyTraits< 2 , 4 , 8 ,
 
  613                             MakeTypeList< Line<3>  ,
 
  617                             QuadrilateralEdgeNodeMap ,
 
  618                             TypeListEnd , TypeListEnd ,
 
  619                             QuadrilateralNodePermutation ,
 
  620                             QuadrilateralNodePermutationPolarity >
 
  621 { 
typedef Quadrilateral<4> base ; };
 
  623 template<> 
struct Quadrilateral<9> : 
public 
  624   CellTopologyTraits< 2 , 4 , 9 ,
 
  625                             MakeTypeList< Line<3>  ,
 
  629                             QuadrilateralEdgeNodeMap ,
 
  630                             TypeListEnd , TypeListEnd ,
 
  631                             QuadrilateralNodePermutation ,
 
  632                             QuadrilateralNodePermutationPolarity >
 
  633 { 
typedef Quadrilateral<4> base ; };
 
  637 typedef MakeTypeList< QuadrilateralNodeMapIdentity ,
 
  638                       QuadrilateralNodeMapReversed0 >::type
 
  639   ShellQuadrilateralFaceNodeMap ;
 
  641 template<> 
struct ShellQuadrilateral<4> : 
public 
  642   CellTopologyTraits< 3 , 4 , 4 ,
 
  643                             MakeTypeList< Line<2>  ,
 
  647                             QuadrilateralEdgeNodeMap ,
 
  648                             MakeTypeList< Quadrilateral<4>  ,
 
  649                                           Quadrilateral<4>  >::type ,
 
  650                             ShellQuadrilateralFaceNodeMap >
 
  651 { 
typedef ShellQuadrilateral<4> base ; };
 
  653 template<> 
struct ShellQuadrilateral<8> : 
public 
  654   CellTopologyTraits< 3 , 4 , 8 ,
 
  655                             MakeTypeList< Line<3>  ,
 
  659                             QuadrilateralEdgeNodeMap ,
 
  660                             MakeTypeList< Quadrilateral<8>  ,
 
  661                                           Quadrilateral<8>  >::type ,
 
  662                             ShellQuadrilateralFaceNodeMap >
 
  663 { 
typedef ShellQuadrilateral<4> base ; };
 
  665 template<> 
struct ShellQuadrilateral<9> : 
public 
  666   CellTopologyTraits< 3 , 4 , 9 ,
 
  667                             MakeTypeList< Line<3>  ,
 
  671                             QuadrilateralEdgeNodeMap ,
 
  672                             MakeTypeList< Quadrilateral<9>  ,
 
  673                                           Quadrilateral<9>  >::type ,
 
  674                             ShellQuadrilateralFaceNodeMap >
 
  675 { 
typedef ShellQuadrilateral<4> base ; };
 
  679 typedef MakeTypeList< IndexList< 0 , 1 , 4 > ,
 
  680                       IndexList< 1 , 2 , 5 > ,
 
  681                       IndexList< 2 , 0 , 6 > ,
 
  682                       IndexList< 0 , 3 , 7 > ,
 
  683                       IndexList< 1 , 3 , 8 > ,
 
  684                       IndexList< 2 , 3 , 9 > >::type
 
  685   TetrahedronEdgeNodeMap ;
 
  687 typedef MakeTypeList< IndexList< 0 , 1 , 3 ,   4 , 8 , 7 > ,
 
  688                       IndexList< 1 , 2 , 3 ,   5 , 9 , 8 > ,
 
  689                       IndexList< 0 , 3 , 2 ,   7 , 9 , 6 > ,
 
  690                       IndexList< 0 , 2 , 1 ,   6 , 5 , 4 > >::type
 
  691   TetrahedronSideNodeMap ;
 
  693 template<> 
struct Tetrahedron<4> : 
public 
  694   CellTopologyTraits< 3 , 4 , 4 ,
 
  695                       MakeTypeList< Line<2>  ,
 
  701                       TetrahedronEdgeNodeMap ,
 
  702                       MakeTypeList< Triangle<3>  ,
 
  705                                     Triangle<3>  >::type ,
 
  706                       TetrahedronSideNodeMap >
 
  707 { 
typedef Tetrahedron<4> base ; };
 
  709 template<> 
struct Tetrahedron<10> : 
public 
  710   CellTopologyTraits< 3 , 4 , 10 ,
 
  711                       MakeTypeList< Line<3>  ,
 
  717                       TetrahedronEdgeNodeMap ,
 
  718                       MakeTypeList< Triangle<6>  ,
 
  721                                     Triangle<6>  >::type ,
 
  722                       TetrahedronSideNodeMap >
 
  723 { 
typedef Tetrahedron<4> base ; };
 
  725 template<> 
struct Tetrahedron<11> : 
public 
  726   CellTopologyTraits< 3 , 4 , 11 ,
 
  727                       MakeTypeList< Line<3>  ,
 
  733                       TetrahedronEdgeNodeMap ,
 
  734                       MakeTypeList< Triangle<6>  ,
 
  737                                     Triangle<6>  >::type ,
 
  738                       TetrahedronSideNodeMap >
 
  739 { 
typedef Tetrahedron<4> base ; };
 
  741 template<> 
struct Tetrahedron<8> : 
public 
  742   CellTopologyTraits< 3 , 4 , 8 ,
 
  743                       MakeTypeList< Line<2>  ,
 
  749                       TetrahedronEdgeNodeMap ,
 
  750                       MakeTypeList< Triangle<4>  ,
 
  753                                     Triangle<4>  >::type ,
 
  754                       TetrahedronSideNodeMap >
 
  755 { 
typedef Tetrahedron<4> base ; };
 
  760   MakeTypeList< IndexList< 0 , 1 ,   5 > ,
 
  761                 IndexList< 1 , 2 ,   6 > ,
 
  762                 IndexList< 2 , 3 ,   7 > ,
 
  763                 IndexList< 3 , 0 ,   8 > ,
 
  764                 IndexList< 0 , 4 ,   9 > ,
 
  765                 IndexList< 1 , 4 ,  10 > ,
 
  766                 IndexList< 2 , 4 ,  11 > ,
 
  767                 IndexList< 3 , 4 ,  12 > >::type
 
  771   MakeTypeList< IndexList< 0, 1, 4,     5, 10,  9 > ,
 
  772                 IndexList< 1, 2, 4,     6, 11, 10 > ,
 
  773                 IndexList< 2, 3, 4,     7, 12, 11 > ,
 
  774                 IndexList< 3, 0, 4,     8,  9, 12 > ,
 
  775                 IndexList< 0, 3, 2, 1,  8,  7,  6,  5,  13 > >::type
 
  778 template<> 
struct Pyramid<5> : 
public 
  779   CellTopologyTraits< 3 , 5 , 5 ,
 
  780                       MakeTypeList< Line<2>  ,
 
  789                       MakeTypeList< Triangle<3>  ,
 
  793                                     Quadrilateral<4>  >::type ,
 
  795 { 
typedef Pyramid<5> base ; };
 
  797 template<> 
struct Pyramid<13> : 
public 
  798   CellTopologyTraits< 3 , 5 , 13 ,
 
  799                       MakeTypeList< Line<3>  ,
 
  808                       MakeTypeList< Triangle<6>  ,
 
  812                                     Quadrilateral<8>  >::type ,
 
  814 { 
typedef Pyramid<5> base ; };
 
  816 template<> 
struct Pyramid<14> : 
public 
  817   CellTopologyTraits< 3 , 5 , 14 ,
 
  818                       MakeTypeList< Line<3>  ,
 
  827                       MakeTypeList< Triangle<6>  ,
 
  831                                     Quadrilateral<9>  >::type ,
 
  833 { 
typedef Pyramid<5> base ; };
 
  838   MakeTypeList< IndexList< 0 , 1 ,   6 > ,
 
  839                 IndexList< 1 , 2 ,   7 > ,
 
  840                 IndexList< 2 , 0 ,   8 > ,
 
  841                 IndexList< 3 , 4 ,  12 > ,
 
  842                 IndexList< 4 , 5 ,  13 > ,
 
  843                 IndexList< 5 , 3 ,  14 > ,
 
  844                 IndexList< 0 , 3 ,   9 > ,
 
  845                 IndexList< 1 , 4 ,  10 > ,
 
  846                 IndexList< 2 , 5 ,  11 >
 
  847   >::type WedgeEdgeNodeMap ;
 
  850   MakeTypeList< IndexList< 0 , 1 , 4 , 3 ,   6 , 10 , 12 ,  9 ,  15 > ,
 
  851                 IndexList< 1 , 2 , 5 , 4 ,   7 , 11 , 13 , 10 ,  16 > ,
 
  852                 IndexList< 0 , 3 , 5 , 2 ,   9 , 14 , 11 ,  8 ,  17 > ,
 
  853                 IndexList< 0 , 2 , 1 ,       8 ,  7 ,  6 > ,
 
  854                 IndexList< 3 , 4 , 5 ,      12 , 13 , 14 >
 
  855   >::type WedgeFaceNodeMap ;
 
  857 template<> 
struct Wedge<6> : 
public 
  858   CellTopologyTraits< 3 , 6 , 6 ,
 
  859                       MakeTypeList< Line<2>  ,
 
  869                       MakeTypeList< Quadrilateral<4>  ,
 
  873                                     Triangle<3>  >::type ,
 
  875 { 
typedef Wedge<6> base ; };
 
  877 template<> 
struct Wedge<15> : 
public 
  878   CellTopologyTraits< 3 , 6 , 15 ,
 
  879                       MakeTypeList< Line<3>  ,
 
  889                       MakeTypeList< Quadrilateral<8>  ,
 
  893                                     Triangle<6>  >::type ,
 
  895 { 
typedef Wedge<6> base ; };
 
  897 template<> 
struct Wedge<18> : 
public 
  898   CellTopologyTraits< 3 , 6 , 18 ,
 
  899                       MakeTypeList< Line<3>  ,
 
  909                       MakeTypeList< Quadrilateral<9>  ,
 
  913                                     Triangle<6>  >::type ,
 
  915 { 
typedef Wedge<6> base ; };
 
  920   MakeTypeList< IndexList< 0 , 1 ,   8 > ,
 
  921                 IndexList< 1 , 2 ,   9 > ,
 
  922                 IndexList< 2 , 3 ,  10 > ,
 
  923                 IndexList< 3 , 0 ,  11 > ,
 
  924                 IndexList< 4 , 5 ,  16 > ,
 
  925                 IndexList< 5 , 6 ,  17 > ,
 
  926                 IndexList< 6 , 7 ,  18 > ,
 
  927                 IndexList< 7 , 4 ,  19 > ,
 
  928                 IndexList< 0 , 4 ,  12 > ,
 
  929                 IndexList< 1 , 5 ,  13 > ,
 
  930                 IndexList< 2 , 6 ,  14 > ,
 
  931                 IndexList< 3 , 7 ,  15 > >::type
 
  932   HexahedronEdgeNodeMap ;
 
  935   MakeTypeList< IndexList< 0, 1, 5, 4,   8, 13, 16, 12,   25 > ,
 
  936                 IndexList< 1, 2, 6, 5,   9, 14, 17, 13,   24 > ,
 
  937                 IndexList< 2, 3, 7, 6,  10, 15, 18, 14,   26 > ,
 
  938                 IndexList< 0, 4, 7, 3,  12, 19, 15, 11,   23 > ,
 
  939                 IndexList< 0, 3, 2, 1,  11, 10,  9,  8,   21 > ,
 
  940                 IndexList< 4, 5, 6, 7,  16, 17, 18, 19,   22 > >::type
 
  941   HexahedronFaceNodeMap ;
 
  945 template<> 
struct Hexahedron<8> : 
public 
  946   CellTopologyTraits< 3 , 8 , 8 ,
 
  947                       MakeTypeList< Line<2>  ,
 
  959                       HexahedronEdgeNodeMap ,
 
  960                       MakeTypeList< Quadrilateral<4>  ,
 
  965                                     Quadrilateral<4>  >::type ,
 
  966                       HexahedronFaceNodeMap >
 
  968   typedef Hexahedron<8> base ;
 
  971 template<> 
struct Hexahedron<20> : 
public 
  972   CellTopologyTraits< 3 , 8 , 20 ,
 
  973                       MakeTypeList< Line<3>  ,
 
  985                       HexahedronEdgeNodeMap ,
 
  986                       MakeTypeList< Quadrilateral<8>  ,
 
  991                                     Quadrilateral<8>  >::type ,
 
  992                       HexahedronFaceNodeMap >
 
  994   typedef Hexahedron<8> base ;
 
  997 template<> 
struct Hexahedron<27> : 
public 
  998   CellTopologyTraits< 3 , 8 , 27 ,
 
  999                       MakeTypeList< Line<3>  ,
 
 1011                       HexahedronEdgeNodeMap ,
 
 1012                       MakeTypeList< Quadrilateral<9>  ,
 
 1017                                     Quadrilateral<9>  >::type ,
 
 1018                       HexahedronFaceNodeMap >
 
 1020   typedef Hexahedron<8> base ;
 
 1031 template< 
unsigned NodeCount = 5 > 
struct Pentagon {};
 
 1039 MakeTypeList< IndexList< 0 , 1 > ,
 
 1040               IndexList< 1 , 2 > ,
 
 1041               IndexList< 2 , 3 > ,
 
 1042               IndexList< 3 , 4 > ,
 
 1043               IndexList< 4 , 0 > >::type  PentagonEdgeNodeMap ;
 
 1045 template<> 
struct Pentagon<5> : 
public 
 1046 CellTopologyTraits< 2 , 5 , 5 ,
 
 1047                     MakeTypeList< Line<2>  ,
 
 1052                     PentagonEdgeNodeMap >
 
 1054   typedef Pentagon<5> base ; 
 
 1063 template< 
unsigned NodeCount = 6 > 
struct Hexagon {};
 
 1071 MakeTypeList< IndexList< 0 , 1 > ,
 
 1072               IndexList< 1 , 2 > ,
 
 1073               IndexList< 2 , 3 > ,
 
 1074               IndexList< 3 , 4 > ,
 
 1075               IndexList< 4 , 5 > ,
 
 1076               IndexList< 5 , 0> >::type  HexagonEdgeNodeMap ;
 
 1078 template<> 
struct Hexagon<6> : 
public 
 1079 CellTopologyTraits< 2 , 6 , 6 ,
 
 1080                     MakeTypeList< Line<2>  ,
 
 1086                     HexagonEdgeNodeMap >
 
 1088   typedef Hexagon<6> base ; 
 
 1093 template< 
class Traits > 
struct BasicTopologyOf ;
 
 1096 template<> 
struct BasicTopologyOf< Node::Traits >
 
 1097 { 
typedef Node type ; };
 
 1100 template<> 
struct BasicTopologyOf< Particle::Traits >
 
 1101 { 
typedef Particle type ; };
 
 1104 template<> 
struct BasicTopologyOf< Line<2>::Traits >
 
 1105 { 
typedef Line<2> type ; };
 
 1108 template<> 
struct BasicTopologyOf< Line<3>::Traits >
 
 1109 { 
typedef Line<3> type ; };
 
 1112 template<> 
struct BasicTopologyOf< Beam<2>::Traits >
 
 1113 { 
typedef Beam<2> type ; };
 
 1116 template<> 
struct BasicTopologyOf< Beam<3>::Traits >
 
 1117 { 
typedef Beam<3> type ; };
 
 1120 template<> 
struct BasicTopologyOf< ShellLine<2>::Traits >
 
 1121 { 
typedef ShellLine<2> type ; };
 
 1124 template<> 
struct BasicTopologyOf< ShellLine<3>::Traits >
 
 1125 { 
typedef ShellLine<3> type ; };
 
 1128 template<> 
struct BasicTopologyOf< Triangle<3>::Traits >
 
 1129 { 
typedef Triangle<3> type ; };
 
 1132 template<> 
struct BasicTopologyOf< Triangle<6>::Traits >
 
 1133 { 
typedef Triangle<6> type ; };
 
 1136 template<> 
struct BasicTopologyOf< Triangle<4>::Traits >
 
 1137 { 
typedef Triangle<4> type ; };
 
 1140 template<> 
struct BasicTopologyOf< Quadrilateral<4>::Traits >
 
 1141 { 
typedef Quadrilateral<4> type ; };
 
 1144 template<> 
struct BasicTopologyOf< Quadrilateral<8>::Traits >
 
 1145 { 
typedef Quadrilateral<8> type ; };
 
 1148 template<> 
struct BasicTopologyOf< Quadrilateral<9>::Traits >
 
 1149 { 
typedef Quadrilateral<9> type ; };
 
 1152 template<> 
struct BasicTopologyOf< Pentagon<5>::Traits >
 
 1153 { 
typedef Pentagon<5> type ; };
 
 1156 template<> 
struct BasicTopologyOf< Hexagon<6>::Traits >
 
 1157 { 
typedef Hexagon<6> type ; };
 
 1160 template<> 
struct BasicTopologyOf< Tetrahedron<4>::Traits >
 
 1161 { 
typedef Tetrahedron<4> type ; };
 
 1164 template<> 
struct BasicTopologyOf< Tetrahedron<10>::Traits >
 
 1165 { 
typedef Tetrahedron<10> type ; };
 
 1168 template<> 
struct BasicTopologyOf< Tetrahedron<11>::Traits >
 
 1169 { 
typedef Tetrahedron<11> type ; };
 
 1172 template<> 
struct BasicTopologyOf< Tetrahedron<8>::Traits >
 
 1173 { 
typedef Tetrahedron<8> type ; };
 
 1176 template<> 
struct BasicTopologyOf< Pyramid<5>::Traits >
 
 1177 { 
typedef Tetrahedron<5> type ; };
 
 1180 template<> 
struct BasicTopologyOf< Pyramid<13>::Traits >
 
 1181 { 
typedef Tetrahedron<13> type ; };
 
 1184 template<> 
struct BasicTopologyOf< Pyramid<14>::Traits >
 
 1185 { 
typedef Tetrahedron<14> type ; };
 
 1188 template<> 
struct BasicTopologyOf< Wedge<6>::Traits >
 
 1189 { 
typedef Wedge<6> type ; };
 
 1192 template<> 
struct BasicTopologyOf< Wedge<15>::Traits >
 
 1193 { 
typedef Wedge<15> type ; };
 
 1196 template<> 
struct BasicTopologyOf< Wedge<18>::Traits >
 
 1197 { 
typedef Wedge<18> type ; };
 
 1200 template<> 
struct BasicTopologyOf< Hexahedron<8>::Traits >
 
 1201 { 
typedef Hexahedron<8> type ; };
 
 1204 template<> 
struct BasicTopologyOf< Hexahedron<20>::Traits >
 
 1205 { 
typedef Hexahedron<20> type ; };
 
 1208 template<> 
struct BasicTopologyOf< Hexahedron<27>::Traits >
 
 1209 { 
typedef Hexahedron<27> type ; };
 
 1215 const unsigned * index_identity_array();
 
 1237 #endif // Shards_BasicTopologies_hpp 
TypeListClean< dirty_type >::type type
The constructed type list. 
Topological traits: Dimension = 3, Sides = 5, Edges = 8, Vertices = 5, and Nodes = 5...
Topological traits: Dimension = 3, Sides = 5, Edges = 9, Vertices = 6, and Nodes = 6...
const CellTopologyData * getCellTopologyData< Particle >()
Singleton for Particle topology. 
Topological traits: Dimension = 1, Vertices = 2, Nodes = 2 or 3. 
Topological traits: Dimension = 3, Sides = 6, Edges = 12, Vertices = 8, and Nodes = 8...
Topological traits: Dimension = 2, Edges = 1, Vertices = 2, and Nodes = 2 or 3. 
Compile-time traits for a cell topology. 
Compile-time list of indices. 
Topological traits: Dimension = 2, Edges = 3, Vertices = 3, and Nodes = 3 or 6. 
Topological traits: Dimension = 0, Vertices = 0, Nodes = 0. 
Topological traits: Dimension = 1, Vertices = 1, Nodes = 1. 
Topological traits: Dimension = 2, Edges = 2, Vertices = 2, and Nodes = 2 or 3. 
A simple 'C' struct of cell topology attributes. 
const CellTopologyData * getCellTopologyData< Node >()
Singleton for Node topology. 
Topological traits: Dimension = 2, Sides = 2, Edges = 4, Vertices = 4, and Nodes = 4...
Topological traits: Dimension = 3, Sides = 4, Edges = 6, Vertices = 4, and Nodes = 4 or 10...
Topological traits: Dimension = 2, Edges = 4, Vertices = 4, and Nodes = 4, 8, or 9. 
std::ostream & operator<<(std::ostream &, const CellTopology &)
Overloaded << operator for CellTopologyData objects. 
Topological traits: Dimension = 3, Sides = 2, Edges = 3, Vertices = 3, and Nodes = 3 or 6...