15 #include "../config/config.hpp" 16 #include "../linalg/densemat.hpp" 38 POINT = 0, SEGMENT,
TRIANGLE, SQUARE, TETRAHEDRON, CUBE, PRISM, PYRAMID,
42 static const int NumGeom = NUM_GEOMETRIES;
43 static const int MaxDim = 3;
44 static const int NumBdrArray[NumGeom];
45 static const char *Name[NumGeom];
46 static const double Volume[NumGeom];
47 static const int Dimension[NumGeom];
48 static const int DimStart[MaxDim+2];
49 static const int NumVerts[NumGeom];
50 static const int NumEdges[NumGeom];
51 static const int NumFaces[NumGeom];
72 {
return GeomCenter[GeomType]; }
82 static bool CheckPoint(
int GeomType,
const IntegrationPoint &ip,
double eps);
99 {
return *GeomToPerfGeomJac[GeomType]; }
101 {
return PerfGeomToGeomJac[GeomType]; }
102 void GetPerfPointMat(
int GeomType,
DenseMatrix &pm);
103 void JacToPerfJac(
int GeomType,
const DenseMatrix &J,
109 {
return geom == SEGMENT || geom == SQUARE || geom == CUBE; }
117 case 0:
return POINT;
118 case 1:
return SEGMENT;
119 case 2:
return SQUARE;
121 default: MFEM_ABORT(
"Invalid dimension.");
return INVALID;
126 int NumBdr(
int GeomType) {
return NumBdrArray[GeomType]; }
135 static const int Dimension = 0;
136 static const int NumVert = 1;
138 static const int NumOrient = 1;
139 static const int Orient[NumOrient][NumVert];
140 static const int InvOrient[NumOrient];
149 static const int Dimension = 1;
150 static const int NumVert = 2;
151 static const int NumEdges = 1;
152 static const int Edges[NumEdges][2];
154 static const int NumOrient = 2;
155 static const int Orient[NumOrient][NumVert];
156 static const int InvOrient[NumOrient];
165 static const int Dimension = 2;
166 static const int NumVert = 3;
167 static const int NumEdges = 3;
168 static const int Edges[NumEdges][2];
172 static const int I[NumVert];
173 static const int J[NumEdges][2];
175 static const int NumFaces = 1;
176 static const int FaceVert[NumFaces][NumVert];
183 static const int NumOrient = 6;
184 static const int Orient[NumOrient][NumVert];
186 static const int InvOrient[NumOrient];
195 static const int Dimension = 2;
196 static const int NumVert = 4;
197 static const int NumEdges = 4;
198 static const int Edges[NumEdges][2];
202 static const int I[NumVert];
203 static const int J[NumEdges][2];
205 static const int NumFaces = 1;
206 static const int FaceVert[NumFaces][NumVert];
208 static const int NumOrient = 8;
209 static const int Orient[NumOrient][NumVert];
210 static const int InvOrient[NumOrient];
219 static const int Dimension = 3;
220 static const int NumVert = 4;
221 static const int NumEdges = 6;
222 static const int Edges[NumEdges][2];
223 static const int NumFaces = 4;
224 static const int FaceTypes[NumFaces];
225 static const int MaxFaceVert = 3;
226 static const int FaceVert[NumFaces][MaxFaceVert];
230 static const int I[NumVert];
231 static const int J[NumEdges][2];
234 static const int NumOrient = 24;
235 static const int Orient[NumOrient][NumVert];
236 static const int InvOrient[NumOrient];
245 static const int Dimension = 3;
246 static const int NumVert = 8;
247 static const int NumEdges = 12;
248 static const int Edges[NumEdges][2];
249 static const int NumFaces = 6;
250 static const int FaceTypes[NumFaces];
251 static const int MaxFaceVert = 4;
252 static const int FaceVert[NumFaces][MaxFaceVert];
256 static const int I[NumVert];
257 static const int J[NumEdges][2];
267 static const int Dimension = 3;
268 static const int NumVert = 6;
269 static const int NumEdges = 9;
270 static const int Edges[NumEdges][2];
271 static const int NumFaces = 5;
272 static const int FaceTypes[NumFaces];
273 static const int MaxFaceVert = 4;
274 static const int FaceVert[NumFaces][MaxFaceVert];
278 static const int I[NumVert];
279 static const int J[NumEdges][2];
289 static const int Dimension = 3;
290 static const int NumVert = 5;
291 static const int NumEdges = 8;
292 static const int Edges[NumEdges][2];
293 static const int NumFaces = 5;
294 static const int FaceTypes[NumFaces];
295 static const int MaxFaceVert = 4;
296 static const int FaceVert[NumFaces][MaxFaceVert];
300 static const int I[NumVert];
301 static const int J[NumEdges][2];
Class for an integration rule - an Array of IntegrationPoint.
static Type TensorProductGeometry(int dim)
RefinedGeometry(int NPts, int NRefG, int NRefE, int NBdrE=0)
Data type dense matrix using column-major storage.
const IntegrationPoint & GetCenter(int GeomType)
Return the center of the given Geometry::Type, GeomType.
const IntegrationRule * RefineInterior(Geometry::Type Geom, int Times)
GeometryRefiner GlobGeometryRefiner
void SetType(const int t)
Set the Quadrature1D type of points to use for subdivision.
RefinedGeometry * Refine(Geometry::Type Geom, int Times, int ETimes=1)
virtual int GetRefinementLevelFromElems(Geometry::Type geom, int Npts)
Get the Refinement level based on number of elements.
int NumBdr(int GeomType)
Return the number of boundary "faces" of a given Geometry::Type.
DenseMatrix * GetPerfGeomToGeomJac(int GeomType)
static bool IsTensorProduct(Type geom)
Class for integration point with weight.
virtual int GetRefinementLevelFromPoints(Geometry::Type Geom, int Npts)
Get the Refinement level based on number of points.
const DenseMatrix & GetGeomToPerfGeomJac(int GeomType) const
int GetType() const
Get the Quadrature1D type of points used for subdivision.