Feature | COMSOL Multiphysics | MFEM | GetFEM++ | deal.II | Elmer | MOOSE | FEniCS Project | FEATool Multiphysics |
---|
license: | Proprietary | BSD | LGPL | LGPL | GNU (L)GPL | LGPL | GNU GPL\LGPL | Proprietary |
GUI: | Yes | No | No | No | Yes, partial functionality | Yes | Postprocessing only | Matlab and Octave GUI |
Documentation: | user guides, reference manuals, API documentation, application libraries with solved examples, online tutorials | examples, miniapps, Doxygen, online documentation | User doc, tutorials, demos, developer's guide | extensive tutorials, video lectures, Doxygen | ElmerSolver Manual, Elmer Models Manual, ElmerGUI Tutorials, etc. LaTeX documentation available in PDFs | Doxygen, Markdown, example codes, test inputs | Tutorial, demos, book | Online FEATool documentation, tutorials, and model examples |
Mesh |
mesh elements: | intervals (1D); triangles, quadrilaterals (2D and 3D boundaries); tetrahedra, pyramids, prisms, hexahedra (3d) | segments, triangles, quadrilaterals, tetrahedra, hexahedra, prisms, pyramids | intervals, triangles, tetrahedra, quads, hexes, prisms, some 4D elements, easily extensible. | intervals (1D); triangles, quadrilaterals (2D and 3D boundaries); tetrahedra, pyramids, prisms, hexahedra (3d) | intervals (1d), triangles, quadrilaterals (2d), tetrahedra, pyramids, wedges, hexahedra (3d) | Tria, Quad, Tetra, Prism, etc. | intervals, triangles, tetrahedra (quads, hexes - work in progress) | intervals, triangles, tetrahedra, quads, hexes |
mesh high-order mapping: | Any? Second-order is the default for most cases. | arbitrary-order meshes and NURBS meshes | | any order | Yes, for Lagrange elements | | (Any - work in progress) | |
mesh generation: | Built-in | meshing miniapps and target-matrix mesh optimization | experimental in any dimension + predefined shapes + Extrusion. | external mesh generators via mesh exchange files, internally generated meshes for simple shapes, internal interfaces to gmsh | Limited own meshing capabilities with ElmerGrid and netgen/tetgen APIs. Internal extrusion and mesh multiplication on parallel level. | Built-in | Yes, Constructive Solid Geometry (CSG) supported via mshr (CGAL and Tetgen used as backends) | Integrated DistMesh, Gmsh, and Triangle GUI and CLI interfaces |
mesh adaptive-refinement: | Yes, full adaptive mesh refinement (h-refinement); no p-refinement but several higher-order elements are included. Mesh adaptation on the whole or parts of the geometry, for stationary, eigenvalue, and time-dependent simulations and by rebuilding the entire mesh or refining chosen mesh elements. | conforming and non-conforming adaptive refinement for tensor product and simplex meshes | Only h | h-, p-, and hp-adaptivity for both continuous and discontinuous finite elements | h-refinement for selected equations | h, p, mached hp, singular hp | Only h | |
mesh input/output: | STL, PLY, NASTRAN, 3MF, VRML (import only), native format | VTK, Gmsh, CUBIT, NETGEN, TrueGrid, and MFEM format | gmsh, GiD, Ansys | DB, XDA, GMSH, Tecplot, UNV, UCD, Abaqus, VTK, Assimp, ExodusII | | ExodusII, Nemesis, Abaqus, Ensight, Gmsh, GMV, OFF, TecPlot TetGen, etc. | XDMF (and FEniCS XML) | FeatFlow, FEniCS XML, GiD, Gmsh, GMV, Triangle |
mesh check: | Avoids inverted and degenerated elements; various mesh quality measures | | ? | | | | intersections (collision testing) | |
CAD files support: | STEP, IGES, others. | | No | IGES, STEP (with OpenCascade wrapper) | Limited support via OpenCASCADE in ElmerGUI | | | |
mesh operation: | Merge, copy, refine; convert; boundary layers; extrude, revolve, sweep, loft for 3D geometries | | Extrude, rotate, translation, refine | Extrude, rotate, translation, refine | | Merge, join, extrude, modular mesh modifier system | | Merge, join, extrude, and revolve operations |
Parallel possibilities |
automatic mesh partitioning: | | METIS and space-filling curve partitioning | Yes (METIS) | yes, shared (METIS/Parmetis/Zoltan) and distributed (p4est) | partitioning with ElmerGrid using Metis or geometric division, internal partitioning in ElmerSolver using Zoltan | Metis, Parmetis, Hilbert (shared and distributed meshes) | Yes (ParMETIS and SCOTCH) | |
MPI: | Yes | Yes | Yes | Yes (up to 310k processes) | Yes | Yes | Yes | |
threads: | Supports multithreading | Using OpenMP, RAJA, or OCCA backends | | Threading Build Blocks | threadsafe, some modules threaded and vectorized. | Yes | | |
OpenMP: | Yes | Yes | Yes | Yes (vectorization only) | Yes, partially | Yes | | |
OpenCL: | No | Through OCCA backends | No | No | No | | | |
CUDA: | No | Yes | No | since 9.1, see step-64 for matrix-free GPU+MPI example | Preliminary API for sparse linear algebra | | | |
Solver |
Dimension: | 0D, 1D, 2D, 3D (can coexist) | 1D/2D/3D | Any, possibility to mix and couple problem of different dimension | 1/2/3D | 1D/2D/3D (dimensions may coexist) | 1/2/3D | 1/2/3D | 1/2/3D |
FE: | Lagrange (order 1-7), Hermite (order 3-7), discontinuous Lagrange (order 0-7), bubble, Gauss point, serendipity, Nedelec | Arbitrary-order Lagrange elements (continuous and discontinuous), Bernstein basis, Nedelec and Raviart-Thomas elements, support for NURBS spaces (IGA) | Continuous and discontinuous Lagrange, Hermite, Argyris, Morley, Nedelec, Raviart-Thomas, composite elements (HCT, FVS), Hierarchical elements, Xfem, easily extensible. | Lagrange elements of any order, continuous and discontinuous; Nedelec and Raviart-Thomas elements of any order; BDM and Bernstein; elements composed of other elements. | Lagrange elements, p-elements up to 10th order, Hcurl conforming elements (linear and quadratic) for | Lagrange, Hierarchic, Discontinuous Monomials, Nedelec | Lagrange, BDM, RT, Nedelic, Crouzeix-Raviart, all simplex elements in the Periodic Table (femtable.org), any | Lagrange (1st-5th order), Crouzeix-Raviart, Hermite |
Quadrature: | | Gauss-Legendre, Gauss-Lobatto, and uniform quadrature rules. | | Gauss-Legendre, Gauss-Lobatto, midpoint, trapezoidal, Simpson, Milne and Weddle (closed Newton-Cotes for 4 and 7 order polynomials), Gauss quadrature with logarithmic or 1/R weighting function, Telles quadrature of arbitrary order. | | Gauss-Legendre (1D and tensor product rules in 2D and 3D) tabulated up to 44th-order to high precision, best available rules for triangles and tetrahedra to very high order, best available monomial rules for quadrilaterals and hexahedra. | | |
Transient problems: | Yes, BDF, Runge-Kutta (RK34, Cash-Karp 5, Dormand-Prince 5), and generalized alpha time stepping | Runge-Kutta, SSP, SDIRK, Adams-Bashforth, Adams-Moulton, Symplectic Integration Algorithm, Newmark method, Generalized-alpha method | | Any user implemented and/or from a set of predefined. Explicit methods: forward Euler, 3rd and 4th order Runge-Kutta. Implicit methods: backward Euler, implicit Midpoint, Crank-Nicolson, SDIRK. Embedded explicit methods: Heun-Euler, Bogacki-Shampine, Dopri, Fehlberg, Cash-Karp. | | implicit-euler explicit-euler crank-nicolson bdf2 explicit-midpoint dirk explicit-tvd-rk-2 newmark-beta | | BE, CN, and Fractional-Step-Theta schemes |
Predefined equations: | Incompressible Navier-Stokes, heat transfer, convection-diffusion-reaction, linear elasticity, electromagnetics, pressure acoustics, Darcy's law, and support for custom PDE equations | Miniapps and examples for Laplace, elasticity, Maxwell, Darcy, advection, Euler, Helmholtz, and others | | The tutorial provides examples for many different equations | Around 50 predefined solvers | Phase Field, Solid Mechanics, Navier-Stokes, Porous Flow, Level Set, Chemical Reactions, Heat Conduction, support for custom PDEs | | Incompressible Navier-Stokes, Heat transfer, convection-diffusion-reaction, linear elasticity, electromagnetics, Darcy's, Brinkman equations, and support for custom PDE equations |
Automated assembly: | | | Yes | | | | Yes | Yes |
Visualization: | Built-in | In situ visualization with GLVis. Export to VisIt and ParaView. | External or with the Scilab/Matlab/Python interface. Possibility to perform complex slices. | External (export to .vtk/.vtu and many others) | ElmerGUI comes VTK based visualization tool (but Paraview is recommended) | Yes, VTK-based GUI, Python visualizatuion library | Buil-in simple plotting + External | Built-in with optional Plotly and GMV export |
Output format: | Text and unstructured VTK-file for data. BMP, PNG, GIF, TIFF, JPEG, glTF, Windows clipboard, Microsoft PowerPoint (for images). GIF, Flash, AVI, WebM (for animations). Touchstone data (for networks). | VisIt, ParaView (VTU), GLVis format | vtk, gmsh, OpenDX. | *.dx *.ucd *.gnuplot *.povray *.eps *.gmv *.tecplot *.tecplot_binary *.vtk *.vtu *.svg *.hdf5 | Several output formats (VTU, gmsh,...) | ExodusII, Xdr, etc. | VTK(.pvd, .vtu) and XDMF/HDF5 | GMV and Plotly |
Boundary elements solver: | Yes | | No | Yes | Existing but without multipole acceleration (not usable for large problems) | | No | |
Use multiple meshes: | | | Yes including different dimensions and taking account of any transformation. | Yes, autorefined from same initial mesh for each variable of a coupled problem | Continuity of non-conforming interfaces ensured by mortar finite elements | | Yes, including non-matching meshes | |
Linear algebra |
Used libs: | MUMPS, PARDISO, SPOOLES; ARPACK, BLAS, BLIS, Intel MKL, LAPACK | Built-in and integrated with hypre. Optional integrations with PETSc, Ginkgo, SuperLU, Suite Sparse, libCEED, and more | SuperLU, MUMPS, Built-in. | Built-in + Trilinos, PETSc, and SLEPc | Built-in, Hypre, Trilinos, umfpack, MUMPS, Pardiso, etc. (optional) | PETSc, Trilinos, LASPack, SLEPc | PETSc, Trilinos/TPetra, Eigen. | Matlab/Octave built-in (Umfpack), supports integration with the FEniCS and FeatFlow solvers |
Iterative matrix solvers: | GMRES, FGMRES, BiCGStab, conjugate gradients, TFQMR, or any precoditioner. Algebraic and geometric multigrid. Domain decomponsition (Schwarz, Schur) | Krylov methods (CG, MINRES, GMRES, BiCGStab) | All Krylov | All Krylov (CG, Minres, GMRES, BiCGStab, QMRS) | Built-in Krylov solvers, Krylov and multigrid solvers from external libraries | LASPack serial, PETSc parallel | | Matlab/Octave built-in |
Preconditioners: | Direct preconditioner, Krylov, SOR, SSOR, SORU, SOR line, SOR gauge, SOR vector, Jacobi, incomplete and hierarchical LU, SAI, SCGS, Vanka, AMS | Algebraic, Geometric, and p-multigrid. Block ILU preconditioning. Support for hypre's AMS and ADS preconditioners for H(curl) and H(div). | Basic ones (ILU, ILUT) | Many, including algebraic multigrid (via Hypre and ML) and geometric multigrid | Built-in preconditioners (ILU, diagonal, vanka, block) and | LASPack serial, PETSc parallel, algebraic multigrid (via Hypre) | | Matlab/Octave built-in |
Matrix-free |
matrix-free: | Yes | Yes | No | Yes | Experimental implementation | | | |
matrix-free save memory: | | Yes | No | Yes | | | | |
matrix-free speed-up: | | Yes | No | Yes | | | | |
Used language |
Native language: | Primarily C++ and Java | C++ | C++ | C++ | Fortran (2008 standard) | C++ | C++ | Matlab / Octave |
Bindings to language: | Full API for Java and Matlab (the latter via add-on product) | PyMFEM (Python) | Python, Scilab or Matlab | Python bindings to some functionality | | | Python | |
Other |
Predefined equations: | Yes, many predefined physics and multiphysics interfaces in COMSOL Multiphysics and its add-ons. | A large number of Bilinear and Linear forms | Model bricks: Laplace, linear and nonlinear elasticity, Helmholtz, plasticity, Mindlin and K.L. plates, boundary conditions including contact with friction. | | | | | |
Coupled nonlinear problems: | Yes | Yes | Yes | | | | | |
Binary: | Windows, Linux, macOS | Yes, via OpenHPC. Also available as part of Spack, xSDK, E4S, FASTMath, RADIUSS and CEED. | Linux (Debian/Ubuntu) | Linux, Windows, Mac | Windows, Linux (launchpad: Debian/Ubuntu), Mac (homebrew) (all with MPI) | | Linux (Debian\Ubuntu), Mac | Windows, Linux, Mac |
fullname: | | Modular Finite Element Methods | | | Elmer finite element software | | | |
Testing: | | Comprehensive unit and regression tests. Continuous integration through Travis CI | | 13,000+ tests | More than 700 consistency tests ensuring backward compatibility | 4300+ tests, Testing as a service for derived applications | | |
scripting: | Full API for Java and, through add-on product, Matlab | | | | | Runtime parsed mathematical expression in input files | | Fully scriptable in as m-file Matlab scripts and the GUI supports exporting models in script format |
automatic differentiation: | Yes | Yes | | Yes | | Forward-mode for Jacobian computation, symbolic differentiation capabilities | | |
multiphysics: | Yes, full custom and predefined multiphysics couplings between all kinds of physics | Arbitrary multiphysics couplings are supported | | Yes | | Arbitrary multiphysics couplings are supported | | Arbitrary multiphysics couplings are supported |
Optimization Solvers: | With the Optimization Module add-on: Coordinate search, Nelder-Mead, Monte Carlo, BOBYQA, COBYLA, SNOPT, MMA, Levenberg-Marquardt | Integration with HiOp. Built-in SLBQP optimizer | | | | Support for TAO- and nlopt-based constrained optimization solvers incorporating gradient and Hessian information. | | |
HIP: | | Yes | | | | | | |
Symbolic derivation of the tangent system for nonlinear problems: | | | Yes | Yes | | | | |
Support for fictitious domain methods: | | | Yes | Yes | | | | |