Version 4.0 of MFEM, a lightweight, general, scalable C++ library for finite element methods, is now available.
The goal of MFEM is to enable high-performance scalable finite element discretization research and application development on a wide variety of platforms, ranging from laptops to exascale supercomputers.
For the first time ever, MFEM-4.0 adds support for GPU acceleration in the library:
- Device kernels can be written in CUDA, OCCA, RAJA or OpenMP.
- Several examples have been ported with minimal code changes.
- Many linear algebra and finite element operations can use device acceleration by simply replacing loops with the MFEM_FORALL macro.
- The library provides seamless device/host memory management.
Some other new additions in version 4.0 are:
- Partially assembled finite element operators in the core library.
- Support for wedge/prism elements and meshes with mixed element types.
- General “low-order refined”-to-“high-order” field transfer.
- Seven new examples and miniapps.
The MFEM library has many more features, including:
- 2D and 3D, arbitrary order H1, H(curl), H(div), L2, NURBS elements.
- Parallel version scalable to hundreds of thousands of MPI cores.
- Conforming/nonconforming adaptive mesh refinement (AMR), including anisotropic refinement, derefinement and parallel load balancing.
- Galerkin, mixed, isogeometric, discontinuous Galerkin, hybridized, and DPG discretizations.
- Support for triangular, quadrilateral, tetrahedral and hexahedral elements, including arbitrary order curvilinear meshes.
- Scalable algebraic multigrid, time integrators, and eigensolvers.
- Lightweight interactive OpenGL visualization with the MFEM-based GLVis tool.
MFEM is being developed in CASC, LLNL and is freely available under LGPL 2.1.
For more details, see the interactive documentation and the full MFEM CHANGELOG.