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 402 TypeListEnd, TypeListEnd,
403 TypeListEnd, TypeListEnd,
405 LineNodePermutationPolarity >
413 template<>
struct Beam<2> :
public 415 MakeTypeList< Line<2> >::type ,
419 template<>
struct Beam<3> :
public 421 MakeTypeList< Line<3> >::type ,
429 ShellLineEdgeNodeMap ;
433 MakeTypeList< Line<2> , Line<2> >::type ,
434 ShellLineEdgeNodeMap >
439 MakeTypeList< Line<3> , Line<3> >::type ,
440 ShellLineEdgeNodeMap >
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;
473 TriangleEdgeNodeMap ;
475 template<>
struct Triangle<3> :
public 477 MakeTypeList< Line<2> ,
480 TriangleEdgeNodeMap ,
481 TypeListEnd , TypeListEnd ,
482 TriangleNodePermutation ,
483 TriangleNodePermutationPolarity >
486 template<>
struct Triangle<6> :
public 488 MakeTypeList< Line<3> ,
491 TriangleEdgeNodeMap ,
492 TypeListEnd , TypeListEnd ,
493 TriangleNodePermutation ,
494 TriangleNodePermutationPolarity >
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 522 MakeTypeList< Line<2> ,
525 TriangleEdgeNodeMap ,
526 TypeListEnd , TypeListEnd ,
527 Triangle4_NodePermutation ,
528 Triangle4_NodePermutationPolarity >
534 TriangleNodeMapReversed0 >::type
535 ShellTriangleFaceNodeMap ;
539 MakeTypeList< Line<2> ,
542 TriangleEdgeNodeMap ,
543 MakeTypeList< Triangle<3> ,
544 Triangle<3> >::type ,
545 ShellTriangleFaceNodeMap >
550 MakeTypeList< Line<3> ,
553 TriangleEdgeNodeMap ,
554 MakeTypeList< Triangle<6> ,
555 Triangle<6> >::type ,
556 ShellTriangleFaceNodeMap >
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;
597 QuadrilateralEdgeNodeMap ;
601 MakeTypeList< Line<2> ,
605 QuadrilateralEdgeNodeMap ,
606 TypeListEnd , TypeListEnd ,
607 QuadrilateralNodePermutation ,
608 QuadrilateralNodePermutationPolarity >
613 MakeTypeList< Line<3> ,
617 QuadrilateralEdgeNodeMap ,
618 TypeListEnd , TypeListEnd ,
619 QuadrilateralNodePermutation ,
620 QuadrilateralNodePermutationPolarity >
625 MakeTypeList< Line<3> ,
629 QuadrilateralEdgeNodeMap ,
630 TypeListEnd , TypeListEnd ,
631 QuadrilateralNodePermutation ,
632 QuadrilateralNodePermutationPolarity >
638 QuadrilateralNodeMapReversed0 >::type
639 ShellQuadrilateralFaceNodeMap ;
643 MakeTypeList< Line<2> ,
647 QuadrilateralEdgeNodeMap ,
648 MakeTypeList< Quadrilateral<4> ,
649 Quadrilateral<4> >::type ,
650 ShellQuadrilateralFaceNodeMap >
655 MakeTypeList< Line<3> ,
659 QuadrilateralEdgeNodeMap ,
660 MakeTypeList< Quadrilateral<8> ,
661 Quadrilateral<8> >::type ,
662 ShellQuadrilateralFaceNodeMap >
667 MakeTypeList< Line<3> ,
671 QuadrilateralEdgeNodeMap ,
672 MakeTypeList< Quadrilateral<9> ,
673 Quadrilateral<9> >::type ,
674 ShellQuadrilateralFaceNodeMap >
679 typedef MakeTypeList< IndexList< 0 , 1 , 4 > ,
680 IndexList< 1 , 2 , 5 > ,
685 TetrahedronEdgeNodeMap ;
691 TetrahedronSideNodeMap ;
695 MakeTypeList< Line<2> ,
701 TetrahedronEdgeNodeMap ,
702 MakeTypeList< Triangle<3> ,
705 Triangle<3> >::type ,
706 TetrahedronSideNodeMap >
711 MakeTypeList< Line<3> ,
717 TetrahedronEdgeNodeMap ,
718 MakeTypeList< Triangle<6> ,
721 Triangle<6> >::type ,
722 TetrahedronSideNodeMap >
727 MakeTypeList< Line<3> ,
733 TetrahedronEdgeNodeMap ,
734 MakeTypeList< Triangle<6> ,
737 Triangle<6> >::type ,
738 TetrahedronSideNodeMap >
743 MakeTypeList< Line<2> ,
749 TetrahedronEdgeNodeMap ,
750 MakeTypeList< Triangle<4> ,
753 Triangle<4> >::type ,
754 TetrahedronSideNodeMap >
778 template<>
struct Pyramid<5> :
public 780 MakeTypeList< Line<2> ,
789 MakeTypeList< Triangle<3> ,
793 Quadrilateral<4> >::type ,
797 template<>
struct Pyramid<13> :
public 799 MakeTypeList< Line<3> ,
808 MakeTypeList< Triangle<6> ,
812 Quadrilateral<8> >::type ,
816 template<>
struct Pyramid<14> :
public 818 MakeTypeList< Line<3> ,
827 MakeTypeList< Triangle<6> ,
831 Quadrilateral<9> >::type ,
847 >::type WedgeEdgeNodeMap ;
855 >::type WedgeFaceNodeMap ;
857 template<>
struct Wedge<6> :
public 859 MakeTypeList< Line<2> ,
869 MakeTypeList< Quadrilateral<4> ,
873 Triangle<3> >::type ,
877 template<>
struct Wedge<15> :
public 879 MakeTypeList< Line<3> ,
889 MakeTypeList< Quadrilateral<8> ,
893 Triangle<6> >::type ,
897 template<>
struct Wedge<18> :
public 899 MakeTypeList< Line<3> ,
909 MakeTypeList< Quadrilateral<9> ,
913 Triangle<6> >::type ,
932 HexahedronEdgeNodeMap ;
941 HexahedronFaceNodeMap ;
947 MakeTypeList< Line<2> ,
959 HexahedronEdgeNodeMap ,
960 MakeTypeList< Quadrilateral<4> ,
965 Quadrilateral<4> >::type ,
966 HexahedronFaceNodeMap >
973 MakeTypeList< Line<3> ,
985 HexahedronEdgeNodeMap ,
986 MakeTypeList< Quadrilateral<8> ,
991 Quadrilateral<8> >::type ,
992 HexahedronFaceNodeMap >
999 MakeTypeList< Line<3> ,
1011 HexahedronEdgeNodeMap ,
1012 MakeTypeList< Quadrilateral<9> ,
1017 Quadrilateral<9> >::type ,
1018 HexahedronFaceNodeMap >
1031 template<
unsigned NodeCount = 5 >
struct Pentagon {};
1045 template<>
struct Pentagon<5> :
public 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 > ,
1078 template<>
struct Hexagon<6> :
public 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 >
1108 template<>
struct BasicTopologyOf< Line<3>::
Traits >
1112 template<>
struct BasicTopologyOf< Beam<2>::
Traits >
1116 template<>
struct BasicTopologyOf< Beam<3>::
Traits >
1120 template<>
struct BasicTopologyOf< ShellLine<2>::
Traits >
1124 template<>
struct BasicTopologyOf< ShellLine<3>::
Traits >
1128 template<>
struct BasicTopologyOf< Triangle<3>::
Traits >
1132 template<>
struct BasicTopologyOf< Triangle<6>::
Traits >
1136 template<>
struct BasicTopologyOf< Triangle<4>::
Traits >
1140 template<>
struct BasicTopologyOf< Quadrilateral<4>::
Traits >
1144 template<>
struct BasicTopologyOf< Quadrilateral<8>::
Traits >
1148 template<>
struct BasicTopologyOf< Quadrilateral<9>::
Traits >
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 >
1164 template<>
struct BasicTopologyOf< Tetrahedron<10>::
Traits >
1168 template<>
struct BasicTopologyOf< Tetrahedron<11>::
Traits >
1172 template<>
struct BasicTopologyOf< Tetrahedron<8>::
Traits >
1176 template<>
struct BasicTopologyOf< Pyramid<5>::
Traits >
1180 template<>
struct BasicTopologyOf< Pyramid<13>::
Traits >
1184 template<>
struct BasicTopologyOf< Pyramid<14>::
Traits >
1188 template<>
struct BasicTopologyOf< Wedge<6>::
Traits >
1192 template<>
struct BasicTopologyOf< Wedge<15>::
Traits >
1196 template<>
struct BasicTopologyOf< Wedge<18>::
Traits >
1200 template<>
struct BasicTopologyOf< Hexahedron<8>::
Traits >
1204 template<>
struct BasicTopologyOf< Hexahedron<20>::
Traits >
1208 template<>
struct BasicTopologyOf< Hexahedron<27>::
Traits >
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...
CellTopologyTraits< Dimension, Number_Vertex, Number_Node, EdgeList, EdgeMaps, FaceList, FaceMaps, PermutationMaps, PermutationPolarity > Traits
The self type for the traits.
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...
Member typedef ... type ; is a type list constructed from the template arguments.
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...