This is an auto generated comparison from manually filled *.profiles
for FEA software. It is also available in HTML format preview 1 (fast and correct rendering of html table from previous commit), preview 2 (a bit slow, had problems with Firefox, usually current commit) with first row and Feature column being fixed for ease of table exploration. Profiles in table are sorted with the number of filled keys.
Profile is read line-by-line. Any string before colon :
is treated as a key, the other part till the end of the line as value. Lines without colon are ignored, comments should start with hash #
in the begging of the line. main-keys.txt
file contains keys in order to be listed first, all other keys from all profiles are listed afterwards. Keys are always carried with colon, table group names are not (for visual ease they are four spaces indented).
Use generate-comparison.py
to generate a table from profiles, you will need to install org-ruby
gem to convert it into HTML format (use sudo gem install org-ruby
in Ubuntu linux to install this gem). It will also emmit tmp.wiki
so you can update the related Wikipedia page.
Fill free to contribute! There is still a lot of codes, not compared it the table, e.g: NgSolve, CalculiX and Salomé + Code_Saturne, ANSYS, NASTRAN, CFD-ACE+, COSMOSWORKS.
Feature | deal.II | code_aster | PERMAS(R) | COMSOL(R) | MFEM | GetFEM++ | Rama Simulator | Range | Elmerfem | MOOSE | libMesh | FEniCS | FEATool Multiphysics | Firedrake |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
website: | http://www.dealii.org | https://www.code-aster.org | https://www.intes.de | https://www.comsol.com | https://mfem.org/ | http://home.gna.org/getfem/ | http://ramasimulator.org | http://www.range-software.com | https://www.csc.fi/elmer | https://www.mooseframework.org/ | http://libmesh.github.io/ | http://fenicsproject.org/ | https://www.featool.com/ | http://firedrakeproject.org/ |
license: | LGPL | GPL | Proprietary | Proprietary | BSD | LGPL | GPL | GPL | GNU (L)GPL | LGPL | LGPL | GNU GPL\LGPL | Proprietary | GNU LGPL |
GUI: | No | Yes (Salome-Meca) | Yes | Yes | No | No | Yes | Yes | Yes, partial functionality | Yes | No | Postprocessing only | Matlab and Octave GUI | No |
Community: | Google Group | discussion forum, Bitbucket forge | https://meet.intes.de:444/projects/permas4edu https://www.researchgate.net/topic/PERMAS | https://www.comsol.com/forum | GitHub Repository | Mailing list | https://github.com/Evenedric/stuff | GitHub | 1000’s of users, discussion forum, mailing list, Discord server | Google Group | mail lists | Mailing list | Mailing list | Mailing list and IRC channel |
Documentation: | 80+ tutorials, 75+ video lectures, Doxygen | user manual, theory manual, verification manual, developer manual (more than 25000 pages both in French and English with machine translation) | User guides, reference manuals, API documentation, application libraries with solved examples, online tutorials | User guides, reference manuals, API documentation, application libraries with solved examples, online tutorials | 26 examples, 17 miniapps, Doxygen, online documentation | User doc, tutorials, demos, developer’s guide | User guide, reference manual, API documentation, examples, tutorials | user manual, tutorials | ElmerSolver Manual, Elmer Models Manual, ElmerGUI Tutorials, etc. (>700 pages of LaTeX documentation available in PDFs) | Doxygen, Markdown, 170+ example codes, 4300+ test inputs | Doxygen, 100+ example codes | Tutorial, demos (how many?), 700-page book | Online FEATool documentation, ~600 pages, ~20 step-by-step tutorials, and 85 m-script model examples | Manual, demos, API reference |
Mesh | ||||||||||||||
mesh elements: | intervals (1d), triangles, quads (2d), and tetrahedra, pyramids, wedges, hexes (3d) | segments (1d), triangles, quadrilaterals (2d), tetrahedra, pyramids, wedges, hexahedra (3d) | Intervals (1D); triangles, quadrilaterals (2D and 3D boundaries); tetrahedra, pyramids, prisms, hexahedra (3d) | Intervals (1D); triangles, quadrilaterals (2D and 3D boundaries); tetrahedra, pyramids, prisms, hexahedra (3d) | segments, triangles, quadrilaterals, tetrahedra, hexahedra, prisms | intervals, triangles, tetrahedra, quads, hexes, prisms, some 4D elements, easily extensible. | triangles | points(0d), segments (1d), triangles, quadrilaterals (2d), tetrahedra, hexahedra (3d) | intervals (1d), triangles, quadrilaterals (2d), tetrahedra, pyramids, wedges, hexahedra (3d) | Tria, Quad, Tetra, Prism, etc. | Tria, Quad, Tetra, Prism, etc. | intervals, triangles, tetrahedra (quads, hexes - work in progress) | intervals, triangles, tetrahedra, quads, hexes | intervals, triangles, tetrahedra, quads, plus extruded meshes of hexes and wedges |
mesh high-order mapping: | any order | Quadratic | Second order (Serendipity and Lagrange) | Any? Second-order is the default for most cases. | arbitrary-order meshes and NURBS meshes | No | Yes, for Lagrange elements | (Any - work in progress) | (Any - using appropriate branches) | |||||
mesh generation: | external+predefined shapes | Yes (Salome-Meca) | Built-in and external | Built-in | meshing miniapps and target-matrix mesh optimization | Experimental in any dimension + predefined shapes + Extrusion. | Built-in | Yes (TetGen) | Limited own meshing capabilities with ElmerGrid and netgen/tetgen APIs. Internal extrusion and mesh multiplication on parallel level. | Built-in | 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 | External + predefined shapes. Internal mesh extrusion operation. |
mesh adaptive-refinement: | h, p, and hp for CG and DG | h-refinement | No; no p-refinement but several higher-order elements are included. | 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 | No | h-refinement for selected equations | h, p, mached hp, singular hp | h, p, mached hp, singular hp | Only h | |||
mesh input\output: | gmsh, unv, UCD, VTK | unv, gmsh, MED, aster | STL, ABAQUS, NASTRAN, NX (Dr.Binde), PATRAN, UNV, BIF/BOF, H3D, native format (i.e. .hdf, .post) | STL, PLY, NASTRAN, 3MF, VRML (import only), native format | VTK, Gmsh, CUBIT, NETGEN, TrueGrid, and MFEM format | gmsh, GiD, Ansys | Matlab | rbm, stl | ExodusII, Nemesis, Abaqus, Ensight, Gmsh, GMV, OFF, TecPlot TetGen, etc. | 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 degenerate elements | limited features (double nodes, degenerated elements) | Avoids inverted and degenerated elements; various mesh quality measures | Avoids inverted and degenerated elements; various mesh quality measures | ? | Avoids degenerate elements | limited features (double nodes, degenerated elements, intersected elements) | intersections (collision testing) | ||||||
CAD files support: | IGES, STEP (with OpenCascade wrapper) | Yes (Salome-Meca) | STL. | STEP, IGES and many others. | No | DXF | Yes (stl) | Limited support via OpenCASCADE in ElmerGUI | ||||||
mesh operation: | Merge, copy, extrude, rotate/transform | Yes (Salome-Meca) | Merge, copy; convert; extrude, revolve | Merge, copy, refine; convert; boundary layers; extrude, revolve, sweep, loft for 3D geometies | Extrude, rotate, translation, refine | Union, difference, intersection, refine | Extrude, rotate, translation, refine | Merge, join, extrude, modular mesh modifier system | distort/translate/rotate/scale | Merge, join, extrude, and revolve operations | ||||
Parallel possibilities | ||||||||||||||
automatic mesh partitioning: | yes, shared (METIS/Parmetis) and distributed (p4est) | Yes for parallel calculations (PTScotch, ParMetis) | Task graph and mesh partitioning for DMP | METIS and space-filling curve partitioning | Yes (METIS) | No | partitioning with ElmerGrid using Metis or geometric division, internal partitioning in ElmerSolver using Zoltan | Metis, Parmetis, Hilbert (shared and distributed meshes) | Metis, Parmetis, Hilbert | Yes (ParMETIS and SCOTCH) | Yes | |||
MPI: | Yes (up to 300k processes), test for 4k processes and geometric multigrid for 147k, strong and weak scaling | Yes | on request | Almost ideal for parameter sweep? For large scale simulations Comsol 4.2 bench by Pepper has 19.2 speedup on 24 core cluster (0.8 efficiency). | Yes | Yes | No | Yes, demonstrated scalability up to 1000’s of cores | Yes | Yes | Yes, DOLFIN solver scales up to 24k | Yes, Scaling plot for Firedrake out to 24k cores. | ||
threads: | Threading Build Blocks | Yes | Supports multithreading | Supports multithreading | Using OpenMP, RAJA, or OCCA backends | Supports multithreading | Yes | threadsafe, some modules threaded and vectorized. | Yes | Yes | ||||
OpenMP: | Yes (vectorization only) | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes, partially | Yes | Yes | Limited | ||
OpenCL: | No | No | No | No | Through OCCA backends | No | No | No | No | |||||
CUDA: | since 9.1, see step-64 for matrix-free GPU+MPI example | No | Yes | No | Yes | No | No | No | Preliminary API for sparse linear algebra | |||||
Solver | ||||||||||||||
Dimension: | 1/2/3D | 0D/1D/2D/3D (dimensions may coexist) | 0D, 1D, 2D, 3D (can coexist) | 0D, 1D, 2D, 3D (can coexist) | 1D/2D/3D | Any, possibility to mix and couple problem of different dimension | 2D | 0D/1D/2D/3D (dimensions may coexist) | 1D/2D/3D (dimensions may coexist) | 1/2/3D | 2D\3D | 1/2/3D | 1/2/3D | 1/2/3D |
FE: | 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 (isoparametric), mixed elements, structural mechanics elements (beam, plate) | Lagrange (bubble,EAS, serendipity), beam and plate elements, control elements, RBC elements, Hermite | 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 | Lagrange elements | Lagrange elements, p-elements up to 10th order, Hcurl conforming elements (linear and quadratic) for | Lagrange, Hierarchic, Discontinuous Monomials, Nedelec | 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 | Lagrange, BDM, RT, Nedelec, all simplex elements and Q- quad elements in the Periodic Table, any |
Quadrature: | 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. | depending on the type of element (Gauss, Newton-Cotes, etc) | Gauss-Legendre, Gauss-Lobatto and best element specific quadrature rules. | Gauss-Legendre, Gauss-Lobatto, and uniform quadrature rules. | 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. | 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: | Any user implemented and/or from a set of predifined. 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. | Yes | Yes, Newmark, HHT, Alpha Method | 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 | Yes | Yes | implicit-euler explicit-euler crank-nicolson bdf2 explicit-midpoint dirk explicit-tvd-rk-2 newmark-beta | BE, CN, and Fractional-Step-Theta schemes | |||||
Predifined equations: | None in the library, but a large number in the tutorial programs | Yes (mechanics, thermics, acoustics) | heat transfer, linear elasticity, electromagnetics, pressure acoustics, fluid-structure interaction. | Incompressible Navier-Stokes, heat transfer, convection-diffusion-reaction, linear elasticity, electromagnetics, pressure acoustics, Darcy’s law, and support for custom PDE equations A lot more via add-on modules. | Miniapps and examples for Laplace, elasticity, Maxwell, Darcy, advection, Euler, Helmholtz, and others | Helmholtz | Yes (Incompressible Navier-Stokes, Heat transfer (convection-conduction-radiation), Stress analysis, Soft body dynamics, Modal analysis, Electrostatics, Magnetostatics ) | Around 50 predefined solvers | Phase Field, Solid Mechanics, Navier-Stokes, Porous Flow, Level Set, Chemical Reactions, Heat Conduction, support for custom PDEs | No | 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 | Yes | Yes | Yes | ||||||||
Visualization: | External (export to *.vtk/vtu and many others) | Paraview (Salome-Meca) | Built-in | 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. | Built-in | GUI (built-in) | ElmerGUI comes VTK based visualization tool (but Paraview is recommended) | Yes, VTK-based GUI, Python visualizatuion library | No | Buil-in simple plotting + External | Built-in with optional Plotly and GMV export | External |
Output format: | *.dx *.ucd *.gnuplot *.povray *.eps *.gmv *.tecplot *.tecplot_binary *.vtk *.vtu *.svg *.hdf5 | MED, ASCII | Text, PNG, GIF, JPEG, XLSX, Microsoft PowerPoint (for images). GIF, MP4, Windows Media | Text and unstructured VTK-file for data.BMP,PNG, GIF, TIFF, JPEG, glTF, Windows clipboard, Microsoft PowerPoint (for images). GIF, Flash, AVI, WebM (for animatios). Touchstone data (for networks). | VisIt, ParaView (VTU), GLVis format | vtk, gmsh, OpenDX. | PNG | Several output formats (VTU, gmsh,…) | ExodusII, Xdr, etc. | ExodusII, Xdr, etc. | VTK(.pvd, .vtu) and XDMF/HDF5 | GMV and Plotly | VTK(.pvd, .vtu) | |
Boundary elements solver: | Yes | Yes for Soil-Structure Interaction (Miss3D) | No | Yes | No | No | Existing but without multipole acceleration (not usable for large problems) | No | No | |||||
Use multiple meshes: | Yes, autorefined from same initial mesh for each variable of a coupled problem | Yes | Yes including different dimensions and taking account of any transformation. | Continuity of non-conforming interfaces ensured by mortar finite elements | Yes, including non-matching meshes | Yes | ||||||||
Linear algebra | ||||||||||||||
Used libs: | Built-in + Trilinos, PETSc, and SLEPc | BLAS/LAPACK, MUMPS (and SCALAPACK), PETSc | MUMPS, SPOOLES; ARPACK, BLAS, BLIS, Intel MKL, LAPACK | 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. | ARPACK, BLAS, LAPACK | No | Built-in, Hypre, Trilinos, umfpack, MUMPS, Pardiso, etc. (optional) | PETSc, Trilinos, LASPack, SLEPc | PETSc, Trilinos, LASPack, SLEPc | PETSc, Trilinos/TPetra, Eigen. | Matlab/Octave built-in (Umfpack), supports integration with the FEniCS and FeatFlow solvers | PETSc |
Iterative matrix solvers: | All Krylov (CG, Minres, GMRES, BiCGStab, QMRS) | GMRES, CG, GCR, CR, FGMRES (via PETSc) | GMRES, PCG, (P-)Multigrid, Contact-Multigrid, FETI | 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 | GMRES, CG | Built-in Krylov solvers, Krylov and multigrid solvers from external libraries | LASPack serial, PETSc parallel | LASPack serial, PETSc parallel | Matlab/Octave built-in | |||
Preconditioners: | Many, including algebraic multigrid (via Hypre and ML) and geometric multigrid | ILU, Jacobi, Simple Precision Preconditioner (via MUMPS) | diverse | 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) | ILU, Jacobi | Built-in preconditioners (ILU, diagonal, vanka, block) and | LASPack serial, PETSc parallel, algebraic multigrid (via Hypre) | LASPack serial, PETSc parallel | Matlab/Octave built-in | |||
Matrix-free | ||||||||||||||
matrix-free: | Yes | No | Yes | Yes | Yes | No | No | No | Experimental implementation | Yes | ||||
matrix-free save memory: | Yes | No | Yes | No | No | |||||||||
matrix-free speed-up: | Yes | No | Yes | No | No | |||||||||
Used language | ||||||||||||||
Native language: | C++ | Fortran 90, Python | Primarily Fortran and C++ , Python | Primarily C++ and Java | C++ | C++ | C++ | C++ | Fortran (2008 standard) | C++ | C++ | C++ | Matlab / Octave | Python (and generated C) |
Bindings to language: | Python (for some parts of the library) | Python | Fortran, C, Python | Full API for Java and Matlab (the latter via add-on product) | PyMFEM | Python, Scilab or Matlab | Lua | No | Python | |||||
Other | ||||||||||||||
Wilkinson Prize: | 2007 | 2015 for dolfin-adjoint | ||||||||||||
Binary: | Linux, Windows, Mac | Yes for Salome-Meca (Linux) | Windows, Linux | Windows, Linux, macOS | Yes, via OpenHPC. Also available as part of Spack, xSDK, E4S, FASTMath, RADIUSS and CEED. | Linux (Debian/Ubuntu) | Windows, Linux, macOS | Windows, Linux (launchpad: Debian/Ubuntu), Mac (homebrew) (all with MPI) | Linux (Debian\Ubuntu), Mac | Windows, Linux, Mac | No. Automated installers for Linux and Mac | |||
Predefined equations: | None in the library, but a large number in the tutorial programs | linear quasistatics, linear thermics, non-linear quasistatics, non-linear dynamics, eigen problem for mechanics, linear dynamics on physical basis and modal basis, harmonic analysis, spectral analysis | Yes, many predefined physics | 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. | No | |||||||
Coupled nonlinear problems: | Yes | thermo-hydro-mechanical problem for porous media, coupling with Code_Saturne CFD software for Fluid-Structure Interaction via SALOME platform | Yes | Yes | Yes | Yes | No | |||||||
Testing: | 6600+ tests | More than 3500 verification testcases covering all features and providing easy starting points for beginners | More than 6000 regular QA tests | https://www.comsol.com/legal/quality-policy | Comprehensive unit and regression tests. Continuous integration through Travis CI | More than 700 consistency tests ensuring backward compatibility | 4300+ tests, Testing as a service for derived applications | |||||||
automatic differentiation: | Yes | Yes | Yes | Yes | Forward-mode for Jacobian computation, symbolic differentiation capabilities | |||||||||
multiphysics: | Yes | Yes, full custom and predefined multiphysics couplings between all kinds of physics | Yes, full custom and predefined multiphysics couplings between all kinds of physics | Arbitrary multiphysics couplings are supported | No | Arbitrary multiphysics couplings are supported | Arbitrary multiphysics couplings are supported | |||||||
Optimization solvers: | Interfaces to SUNDIALS and ROL | |||||||||||||
HIP: | Yes | Yes | ||||||||||||
Symbolic derivation of the tangent system for nonlinear problems: | Yes | Yes | ||||||||||||
fullname: | Analyse des Structures et Thermo-mécanique pour des Études et des Recherches (ASTER) | Elmer finite element software | ||||||||||||
scripting: | Python | Full API for Java and, through add-on product, Matlab | Lua | Runtime parsed mathematical expression in input files | Fully scriptable in as m-file Matlab scripts and the GUI supports exporting models in script format | |||||||||
Optimization Solvers: | Adaptive Monte Carlo, Latin Hypercube Sampling, Response surface, SCP, SLP, SQP, ACP, COBYLA, GCA, MS (multistart), OC (optimality criteria) , WLIN, dividing rectangle, design centering | With the Optimization Module add-on: Coorinate search, Nelder-Mead, Monte Carlo, BOBYQA, COBYLA, SNOPT, MMA, Levenberg-Marquardt | Integration with HiOp. Built-in SLBQP optimizer | Levenberg-Marquardt, Subspace dogleg | Support for TAO- and nlopt-based constrained optimization solvers incorporating gradient and Hessian information. | Support for TAO- and nlopt-based constrained optimization solvers incorporating gradient and Hessian information. | ||||||||
Support for fictitious domain methods: | Yes |