Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "SundanceCellType.hpp"
00043 #include "PlayaExceptions.hpp"
00044
00045 using namespace Sundance;
00046 using namespace Sundance;
00047
00048 namespace Sundance
00049 {
00050
00051 std::string toString(const CellType& cellType)
00052 {
00053 switch(cellType)
00054 {
00055 case NullCell:
00056 return "NullCell";
00057 case PointCell:
00058 return "PointCell";
00059 case LineCell:
00060 return "LineCell";
00061 case TriangleCell:
00062 return "TriangleCell";
00063 case QuadCell:
00064 return "QuadCell";
00065 case TetCell:
00066 return "TetCell";
00067 case BrickCell:
00068 return "BrickCell";
00069 case PrismCell:
00070 return "PrismCell";
00071 }
00072 return "NullCell";
00073 }
00074
00075 int dimension(const CellType& cellType)
00076 {
00077 switch(cellType)
00078 {
00079 case NullCell:
00080 return -1;
00081 case PointCell:
00082 return 0;
00083 case LineCell:
00084 return 1;
00085 case TriangleCell:
00086 case QuadCell:
00087 return 2;
00088 case TetCell:
00089 case BrickCell:
00090 case PrismCell:
00091 return 3;
00092 }
00093 return -1;
00094 }
00095
00096 int numFacets(const CellType& cellType, int facetDim)
00097 {
00098 int d = dimension(cellType);
00099 if (facetDim == d) return 1;
00100
00101 TEUCHOS_TEST_FOR_EXCEPTION(facetDim > d, std::runtime_error,
00102 "invalid facet dim " << facetDim << " for cell "
00103 << toString(cellType));
00104
00105 switch(cellType)
00106 {
00107 case NullCell:
00108 case PointCell:
00109 return -1;
00110 case LineCell:
00111 return 2;
00112 case TriangleCell:
00113 return 3;
00114 case TetCell:
00115 if (facetDim==0 || facetDim==2) return 4;
00116 return 6;
00117 case QuadCell:
00118 return 4;
00119 case BrickCell:
00120 if (facetDim==0) return 8;
00121 else if (facetDim==1) return 12;
00122 else return 6;
00123 case PrismCell:
00124 if (facetDim==0) return 6;
00125 else if (facetDim==1) return 9;
00126 else return 5;
00127 }
00128 return -1;
00129 }
00130
00131
00132 CellType facetType(const CellType& cellType, int facetDim, int facetIndex)
00133 {
00134 int d = dimension(cellType);
00135 if (facetDim == d) return cellType;
00136 TEUCHOS_TEST_FOR_EXCEPTION(facetDim > d, std::runtime_error,
00137 "invalid facet dim " << facetDim << " for cell "
00138 << toString(cellType));
00139
00140 if (facetDim==0) return PointCell;
00141 if (facetDim==1) return LineCell;
00142
00143 switch(cellType)
00144 {
00145 case NullCell:
00146 case PointCell:
00147 case LineCell:
00148 case TriangleCell:
00149 case QuadCell:
00150 return NullCell;
00151
00152 case TetCell:
00153 return TriangleCell;
00154 case BrickCell:
00155 return QuadCell;
00156 case PrismCell:
00157 if (facetIndex==0 || facetIndex==4) return TriangleCell;
00158 return QuadCell;
00159 }
00160 return NullCell;
00161 }
00162
00163 }