This adds some convenience constructors for NURBS patches, and also includes a test exercising the new functionality.
Co-authored-by: Derek Thomas <derek@coreform.com>
Co-authored-by: Kevin Tew <kevin@coreform.com>
Co-authored-by: David Kamensky <david@coreform.com>
Co-authored-by: Justin Laughlin <laughlin6@llnl.gov>
- Rewrapping to 80
- Forward some base methods to public access
- Restore some old implementation methods in terms of new versions
- Doyxgen and comment fixes
- Unused variables
- Memory leak
- Initialization order
- Remove std::vector usage
- Fix char index into arrays
- Early exit if an empty ncsubmesh is constructed
- Array list initalizer was hardcoded to int
- Remove anonynmous namespace from ncmesh_tables.hpp, use static and
constexpr instead
- Remove unneeded table includes in ncsubmesh.cpp and pncsubmesh.cpp
- Move trivial type assertion of Array to class body from constructor
- Fix warning about use of abs over std::abs in batched linalg
- Add parent hashtable accessors to bypass access controls in parent
classes.
- Change loop condition to avoid need for ncmesh_tables.hpp include
- Change [ParSubMesh] to [SubMesh] for Catch2 category, the parallel
is implicit in [Parallel] label
- Missing include in mesh_test_utils.cpp
- Fix bug for array access with empty ncmesh
Many small features and a lot of really quite dirty code, print statements etc. This comes from squashing a large number of commits together.
A few different strategies were tried and failed (partially building the NC structure, having ranks have different NC etc.) before arriving at
the final reverse tree traversal algorithm.
serial meshes to be partitioned and saved in parallel format
using one processor. This capability allows MFEM to work around
the current bottleneck which requires every MPI rank to load
the big serial mesh before it can be partitioned.
This new capability is added to the `mesh-explorer` miniapp with
the new menu option `D` and is based on two new classes:
* `MeshPartitioner`, constructed from a serial mesh and any
partitioning array. Once constructed, it can extract any part
of the mesh consisting of the elements with ids `elem_id` such
that `partitioning[elem_id] == part_id`. The extracted mesh
part is given in the form of a `MeshPart` object.
* `MeshPart`, which is currently construced by a `MeshPartitioner`.
In the future, it can be created by other methods to facilitate
other capabilities such as parallel mesh re-partitioing. Once
constructed, the `MeshPart` can be saved to a file using the
text-based parallel MFEM format. Support for other formats can
be added as well. Another capability that can be added is the
MPI communication of `MeshPart` objects between different ranks
which can be used, for example, for implementing a `ParMesh`
constructor that needs the serial mesh only on one processor.
Current limitations:
* Non-conforming and NURBS meshes are not supported.
* Meshes with nodes (e.g. high-order or periodic meshes) are
not supported.
Small extension: if `Mesh::SetCurvature` is called with `order = 0`
then the method will remove the nodal `GridFunction` and use the
vertices array instead. This "curvature removal" capability can be
used from the `mesh-explorer` miniapp with the `c` menu option,
by specifying 0 when prompted to enter order.
Temporary change: `ex1p.cpp` is modified to disregard the (serial)
mesh specified with the option `-m`/`--mesh`. Instead, it loads
the parallel mesh `../miniapps/meshing/mesh-explorer.mesh.<rank>`
produced by the `D` menu option of the `mesh-explorer` miniapp.
some small tweaks.
Replace some uses of 'long' with 'long long' to better support
Win64 builds where 'long' is 32-bit and 'long long' is 64-bit.
On Linux and MacOS, both types are typically 64-bit.
Updated various "MemoryUsage" methods to return 'std::size_t'
instead of 'long' since the latter is 32-bit in Win64 builds.
Updated CHANGELOG.