List of changes and additions:
* In class Mesh:
* Replaced the data fields BaseGeom, BaseBdrGeom, and BaseFaceGeom
with a new data field: mesh_geoms that is a bitwise mask for all
Geometry::Types found in the (local) Mesh including entities of
lower dimensions.
* The new data field mesh_geoms is set by the method SetMeshGen.
* Removed the (protected) method InitBaseGeom.
* Add new methods: HasGeometry, GetNumGeometries, and GetGeometries
that can be used to query the content of mesh_geoms. Also, added
class Mesh::GeometryList that can simplify such queries too.
* The methods GetFaceBaseGeometry, GetElementBaseGeometry, and
GetBdrElementBaseGeometry no longer have a default value for
their input parameter (the entity index) and accept only values
within their respective ranges.
* Removed the parameter of the method GetRefinementTransforms.
* Updated the methods PrepareNodeReorder and DoNodeReorder to
support mixed meshes.
* In parallel, the data field meshgen is now required to represent
information about the global mesh - updated relevant ParMesh
methods.
* Made any required changes outside of class Mesh due to the above
changes.
* Made various tweaks and improvements in the following methods:
CheckBdrElementOrientation, Mixed2DUniformRefinement,
Mixed3DUniformRefinement, UniformRefinement, and
GeneralRefinement.
* Updated the method PrintCharacteristics to print the types of
elements, boundary elements and faces used in the mesh.
* In the method ReadInlineMesh, replace remaining "pri" strings
with "wedge".
* In the mesh reader method ReadGmshMesh, recover the term "prism"
in the comments - it was replaced, unintentionally, I assume,
by "wedge".
* Add support for refinement of curvilinear mixed meshes:
* In class FiniteElementSpace, updated the methods:
GetLocalRefinementMatrices, GetLocalDerefinementMatrices,
RefinementMatrix, RefinementMatrix_main, as well as class
RefinementOperator to support mixed meshes.
* Add two new meshes: star-mixed-p2.mesh and fichera-mixed-p2.mesh
which represent examples of quadratic mixed meshes in 2D and 3D,
respectively.
* Add sample runs in ex1/ex1p using the new quadratic mixed meshes.
* In class Geometry:
* In the enumeration Type: removed the constant MIXED and added
new constant: NUM_GEOMETRIES.
* Add new static data field: DimStart[] that indexes the Types by
dimension: the Types of dimension 'd' are given by the range
[ DimStart[d], DimStart[d+1] ).
* In class ParNCMesh, added method GetGhostFaceGeometry that,
for now, returns Geometry::SQUARE.
* Update the return type of the method DofOrderForOrientation in
class FiniteElementCollection (and all derived classes) from
'int *' to 'const int *'.
* Removed the virtual method Element::GetRefinementFlag and made
the only relevant derived version (in class Tetrahedron),
non-virtual.
* In class Tetrahedron, added method Init.
* Added FIXME comments for some outstanding issues.
* In the mesh-explorer miniapp:
* Added option to enable or disable the 'refine' parameter when
reading a mesh from file.
* In the 'jitter' menu option, ask the user if the boundary
nodes should be moved or not.
* In the 'Print sub-element stats' menu option, count and print
bad/inverted elements by their Geometry::Type as well.
* Removed the fixed low-order finite element classes for wedges.
* Replace more cases of 'int' variables with 'Geometry::Type',
mainly in class FiniteElement and its derived classes.
* Use constants from BasisType (instead of Quadrature1D) in the
parameters of the *WedgeElement finite element classes.
* Impose ordering on the construction of some global objects by
moving them into the same translation unit: specifically, moved
the objects 'TriangleFE', 'TetrahedronFE', 'WedgeFE', and
'Geometries' into fem/fe.cpp.
* In switchs on 'Geometry::Type', move the 'Geometry::PRISM' case
last - just to follow the order in the enumeration.
* Add a new method CoarseFineTransformations::GetPointMatrices
that simplifies some code that uses CoarseFineTransformations.
* Removed the 'INVALID' and 'MIXED' constants from the enum
Element::Type.
* Remove the static method Element::GeometryType.
* Tweak some doxygen comments in the classes Embedding and
CoarseFineTransformations.
* Generate an error if the method Wedge::GetNFaces is called:
its parameter 'nFaceVertices' does not make sense for wedges.
NodalTensorFiniteElement and PositiveTensorFiniteElement, add a
parameter to their constructors of a new type, DofMapType, to
indicate the type of basis being constructed: L2 or H1.
Add a new static method BasisType::GetNodalBasis() that converts
a Quadrature1D type to the corresponding nodal BasisType.
Fix a bug: in GeometryRefiner::Refine(), convert the Quadrature1D
type to BasisType before calling poly1d.GetPoints().
so that open-type quadrature (i.e. without the end points) can also
be used for refinement.
Enhanced class InverseElementTransformation with more options, set
by the methods SetInitGuessPointsType() and SetInitGuessRelOrder()
which control the type and order of the initial guess refinement
used by the Closest* initial guess types.
ElementsTransformation inversion algorithms, and serves as a base class
for other, e.g. custom, implementations. The new class contains all
previous implementations of ElementTransformation::TransformBack() and
adds a some new options.
The method IsoparametricTransformation::TransformBack() is now
implemented by simply constructing a InverseElementTransformation object
(with default options) and calling its Transform() method.
Updated the methods Mesh::FindPoints() and ParMesh::FindPoints() to
accept an optional argument of type InverseElementTransformation,
allowing more flexibility through customization of the transformation
inversion algorithm. In ParMesh::FindPoints(), when the i-th point was
found by one or more ranks, the output entry elem_ids[i] will be set to
-2 (except on the rank that is assigned that point) to indicate that the
i-th point was found but assigned to another rank - this value allows
all ranks to distinguish this case from the case when a point was not
found by any rank - indicated by elem_ids[j] set to -1.
Added two new methods to class ElementTransformation: GetGeometryType()
and GetDimension(). To aviod making these new methods virtual (and to
make the existing method GetSpaceDim() non-virtual), added data fields
'geom' and 'space_dim' to the base class ElementTransformation. In order
to facilitate the initialization of those fields for class
IsoparametricTransformation, added new method, FinalizeTransformation().
This method must be called after setting the point-matrix and the finite
element of the IsoparametricTransformation - all such places in MFEM
have been updated to perform that call.
Add new version of Geometry::ProjectPoint() that projects points outside
the reference element to the closest boundary point of the element.
Updated class GeometryRefiner to allow simultaneous use by different
places in a code - new calls to the Refine() and RefineInterior()
methods will not destroy previously allocated and returned objects by
the same calls.
This is helpful in determining is an IntegrationPoint is almost inside
an element.
Also uses this overload in IsoparametricTransformation::TransformBack().