diff --git a/CHANGELOG b/CHANGELOG index ea2cf006b84..c6c15c22414 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,9 +15,9 @@ Meshing improvements -------------------- - Added support for mixed meshes and pyramids in GSLIB-FindPoints. -- New classes, SubMesh and ParSubMesh, that allow to define a subset of a parent - Mesh. Both classes allow for the same functionality as Mesh and ParMesh and - work with all existing interfaces like finite element spaces etc. +- Added new SubMesh and ParSubMesh classes that can be used to extract a subset + of a given Mesh. These classes have the same functionality as Mesh and ParMesh + and work with all existing MFEM interfaces like finite element spaces etc. Discretization improvements --------------------------- @@ -84,13 +84,14 @@ Miscellaneous - Added boundary elimination with device support for `SparseMatrix` and `HypreParMatrix`. - + - When using `AssemblyLevel::FULL`, `FABilinearFormExtension::FormSystemMatrix` outputs an `OperatorHandle` containing a `SparseMatrix` in serial, and an `HypreParMatrix` in parallel (instead of a `ConstrainedOperator`). - Added TMOP metrics for mesh untangling and worst-case quality improvement. + Version 4.4, released on March 21, 2022 ======================================= diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 10d18a2f83f..69f4c85d7c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,9 @@ The MFEM source code has the following structure: . ├── config │ ├── cmake - │ └── githooks + │ ├── docker + │ ├── githooks + │ └── vcpkg ├── data ├── doc ├── examples @@ -111,6 +113,7 @@ The MFEM source code has the following structure: │ ├── ginkgo │ ├── hiop │ ├── jupyter + │ ├── moonolith │ ├── petsc │ ├── pumi │ ├── sundials @@ -118,13 +121,15 @@ The MFEM source code has the following structure: ├── fem │ ├── ceed │ ├── fe - │ ├── qinterp + │ ├── lor │ ├── moonolith + │ ├── qinterp │ └── tmop ├── general ├── linalg │ └── simd ├── mesh + │ └── submesh ├── miniapps │ ├── adjoint │ ├── autodiff @@ -134,6 +139,7 @@ The MFEM source code has the following structure: │ ├── hooke │ ├── meshing │ ├── mtop + │ ├── multidomain │ ├── navier │ ├── nurbs │ ├── parelag diff --git a/mesh/submesh/psubmesh.hpp b/mesh/submesh/psubmesh.hpp index 968126b93fd..74960e25a5a 100644 --- a/mesh/submesh/psubmesh.hpp +++ b/mesh/submesh/psubmesh.hpp @@ -371,8 +371,9 @@ class ParSubMesh : public ParMesh /// ParSubMesh face ids. Inverse map of parent_face_ids_. Array parent_to_submesh_face_ids_; }; -} + +} // namespace mfem #endif // MFEM_USE_MPI -#endif \ No newline at end of file +#endif diff --git a/mesh/submesh/submesh.cpp b/mesh/submesh/submesh.cpp index e2b3309643f..d9646e237ce 100644 --- a/mesh/submesh/submesh.cpp +++ b/mesh/submesh/submesh.cpp @@ -115,5 +115,4 @@ TransferMap SubMesh::CreateTransferMap(const GridFunction &src, return TransferMap(src, dst); } - -} // namespace mfem \ No newline at end of file +} // namespace mfem diff --git a/mesh/submesh/submesh.hpp b/mesh/submesh/submesh.hpp index 9aa486bf5dd..a5b96aaed0a 100644 --- a/mesh/submesh/submesh.hpp +++ b/mesh/submesh/submesh.hpp @@ -18,6 +18,7 @@ namespace mfem { + /** * @brief Subdomain representation of a topological parent in another Mesh. * @@ -194,6 +195,7 @@ class SubMesh : public Mesh Array face_to_be; }; -} + +} // namespace mfem #endif diff --git a/mesh/submesh/submesh_utils.hpp b/mesh/submesh/submesh_utils.hpp index 01078332bfa..cf09118c695 100644 --- a/mesh/submesh/submesh_utils.hpp +++ b/mesh/submesh/submesh_utils.hpp @@ -9,7 +9,6 @@ // terms of the BSD-3 license. We welcome feedback and contributions, see file // CONTRIBUTING.md for details. - #ifndef MFEM_SUBMESH_UTILS #define MFEM_SUBMESH_UTILS diff --git a/mesh/submesh/transfer_category.hpp b/mesh/submesh/transfer_category.hpp index ce134ffe44a..16e16e8940c 100644 --- a/mesh/submesh/transfer_category.hpp +++ b/mesh/submesh/transfer_category.hpp @@ -14,6 +14,7 @@ namespace mfem { + /** * @brief TransferCategory describes the type of transfer. * @@ -25,6 +26,7 @@ enum TransferCategory SubMeshToParent, SubMeshToSubMesh }; + } // namespace mfem #endif // MFEM_TRANSFER_CATEGORY diff --git a/data/multidomain-hex.mesh b/miniapps/multidomain/multidomain-hex.mesh similarity index 100% rename from data/multidomain-hex.mesh rename to miniapps/multidomain/multidomain-hex.mesh diff --git a/miniapps/multidomain/multidomain.cpp b/miniapps/multidomain/multidomain.cpp index 523492fec57..e915e288bf3 100644 --- a/miniapps/multidomain/multidomain.cpp +++ b/miniapps/multidomain/multidomain.cpp @@ -8,7 +8,7 @@ // MFEM is free software; you can redistribute it and/or modify it under the // terms of the BSD-3 license. We welcome feedback and contributions, see file // CONTRIBUTING.md for details. -// + // This miniapp aims to demonstrate how to solve two PDEs, that represent // different physics, on the same domain. MFEM's SubMesh interface is used to // compute on and transfer between the spaces of predefined parts of the domain. @@ -28,7 +28,7 @@ // // A convection-diffusion equation is described inside the cylinder domain // -// dT/dt = κΔT - α∇•(b T) in inner cylinder +// dT/dt = κΔT - α∇•(b T) in inner cylinder // T = T_wall on cylinder wall (obtained from heat equation) // ∇T•n = 0 else // @@ -47,7 +47,7 @@ using namespace mfem; // Prescribed velocity profile for the convection-diffusion equation inside the -// cylinder. The profile is constrcuted s.t. it approximates a no-slip (v=0) +// cylinder. The profile is constructed s.t. it approximates a no-slip (v=0) // directly at the cylinder wall boundary. void velocity_profile(const Vector &c, Vector &q) { @@ -209,7 +209,7 @@ int main(int argc, char *argv[]) int num_procs = Mpi::WorldSize(); int myid = Mpi::WorldRank(); - Mesh *serial_mesh = new Mesh("../../data/multidomain-hex.mesh"); + Mesh *serial_mesh = new Mesh("multidomain-hex.mesh"); ParMesh parent_mesh = ParMesh(MPI_COMM_WORLD, *serial_mesh); delete serial_mesh; diff --git a/tests/unit/mesh/test_psubmesh.cpp b/tests/unit/mesh/test_psubmesh.cpp index de8ca3b7027..4661040f553 100644 --- a/tests/unit/mesh/test_psubmesh.cpp +++ b/tests/unit/mesh/test_psubmesh.cpp @@ -205,7 +205,8 @@ void multidomain_test_3d(FECType fec_type) const int p = 2; // Circle: sideset 1 // Domain boundary: sideset 2 - Mesh *serial_parent_mesh = new Mesh("../../data/multidomain-hex.mesh"); + Mesh *serial_parent_mesh = new + Mesh("../../miniapps/multidomain/multidomain-hex.mesh"); ParMesh parent_mesh(MPI_COMM_WORLD, *serial_parent_mesh); delete serial_parent_mesh;