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];
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]; }
99 {
return *GeomToPerfGeomJac[GeomType]; }
101 {
return PerfGeomToGeomJac[GeomType]; }
102 void GetPerfPointMat(
int GeomType,
DenseMatrix &pm)
const;
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 static int GetInverseOrientation(Type geom_type,
int orientation);
129 int NumBdr(
int GeomType)
const {
return NumBdrArray[GeomType]; }
138 static const int Dimension = 0;
139 static const int NumVert = 1;
141 static const int NumOrient = 1;
142 static const int Orient[NumOrient][NumVert];
143 static const int InvOrient[NumOrient];
152 static const int Dimension = 1;
153 static const int NumVert = 2;
154 static const int NumEdges = 1;
155 static const int Edges[NumEdges][2];
157 static const int NumOrient = 2;
158 static const int Orient[NumOrient][NumVert];
159 static const int InvOrient[NumOrient];
168 static const int Dimension = 2;
169 static const int NumVert = 3;
170 static const int NumEdges = 3;
171 static const int Edges[NumEdges][2];
175 static const int I[NumVert];
176 static const int J[NumEdges][2];
178 static const int NumFaces = 1;
179 static const int FaceVert[NumFaces][NumVert];
186 static const int NumOrient = 6;
187 static const int Orient[NumOrient][NumVert];
189 static const int InvOrient[NumOrient];
198 static const int Dimension = 2;
199 static const int NumVert = 4;
200 static const int NumEdges = 4;
201 static const int Edges[NumEdges][2];
205 static const int I[NumVert];
206 static const int J[NumEdges][2];
208 static const int NumFaces = 1;
209 static const int FaceVert[NumFaces][NumVert];
211 static const int NumOrient = 8;
212 static const int Orient[NumOrient][NumVert];
213 static const int InvOrient[NumOrient];
222 static const int Dimension = 3;
223 static const int NumVert = 4;
224 static const int NumEdges = 6;
225 static const int Edges[NumEdges][2];
226 static const int NumFaces = 4;
227 static const int FaceTypes[NumFaces];
228 static const int MaxFaceVert = 3;
229 static const int FaceVert[NumFaces][MaxFaceVert];
233 static const int I[NumVert];
234 static const int J[NumEdges][2];
237 static const int NumOrient = 24;
238 static const int Orient[NumOrient][NumVert];
239 static const int InvOrient[NumOrient];
248 static const int Dimension = 3;
249 static const int NumVert = 8;
250 static const int NumEdges = 12;
251 static const int Edges[NumEdges][2];
252 static const int NumFaces = 6;
253 static const int FaceTypes[NumFaces];
254 static const int MaxFaceVert = 4;
255 static const int FaceVert[NumFaces][MaxFaceVert];
259 static const int I[NumVert];
260 static const int J[NumEdges][2];
270 static const int Dimension = 3;
271 static const int NumVert = 6;
272 static const int NumEdges = 9;
273 static const int Edges[NumEdges][2];
274 static const int NumFaces = 5;
275 static const int FaceTypes[NumFaces];
276 static const int MaxFaceVert = 4;
277 static const int FaceVert[NumFaces][MaxFaceVert];
281 static const int I[NumVert];
282 static const int J[NumEdges][2];
292 static const int Dimension = 3;
293 static const int NumVert = 5;
294 static const int NumEdges = 8;
295 static const int Edges[NumEdges][2];
296 static const int NumFaces = 5;
297 static const int FaceTypes[NumFaces];
298 static const int MaxFaceVert = 4;
299 static const int FaceVert[NumFaces][MaxFaceVert];
303 static const int I[NumVert];
304 static const int J[NumEdges][2];
Data type dense matrix using column-major storage.
RefinedGeometry * Refine(Geometry::Type Geom, int Times, int ETimes=1)
int GetType() const
Get the Quadrature1D type of points used for subdivision.
void SetType(int t)
Set the Quadrature1D type of points to use for subdivision.
const IntegrationRule * RefineInterior(Geometry::Type Geom, int Times)
static int GetRefinementLevelFromElems(Geometry::Type geom, int Npts)
Get the Refinement level based on number of elements.
static int GetRefinementLevelFromPoints(Geometry::Type Geom, int Npts)
Get the Refinement level based on number of points.
GeometryRefiner(int t=Quadrature1D::ClosedUniform)
const IntegrationPoint & GetCenter(int GeomType) const
Return the center of the given Geometry::Type, GeomType.
static bool IsTensorProduct(Type geom)
int NumBdr(int GeomType) const
Return the number of boundary "faces" of a given Geometry::Type.
const DenseMatrix * GetPerfGeomToGeomJac(int GeomType) const
static Type TensorProductGeometry(int dim)
const DenseMatrix & GetGeomToPerfGeomJac(int GeomType) const
Class for integration point with weight.
Class for an integration rule - an Array of IntegrationPoint.
@ ClosedUniform
aka closed Newton-Cotes
RefinedGeometry(int NPts, int NRefG, int NRefE, int NBdrE=0)
real_t Volume()
Analytic volume integral over subdomain with positive level-set.
GeometryRefiner GlobGeometryRefiner