# Timeline

##### Jan, 2011: first SpaFEDTe commit.

##### Jun, 2012: agglomerated elements implementation is available.

##### Nov, 2013: support for parallel mesh input in vtk format (.pvtu).

##### Nov, 2013: metis based partitioner with output in parallel vtk format (.pvtu).

# Welcome

SpaFEDTe is a Templated C++ library for creating Discontinuous Finite Element Spaces.

The ultimate (quite ambitious) goal is to provide a framework for the numerical approximation of PDEs. Many high-quality finite element libraries exist and many of them offer a more comprehensive set of features. So, why SpaFEDTe?

SpaFEDTe offers a variety of Discontinuous Finite Element Spaces and allows to easily implement new ones combining (possibly user defined) basis functions, mapping functions and quadrature rules. In addition to standard Reference Frame FE the library implements Physical Frame FE, here considered as a way to increase accuracy and flexibility of discontinuous Galerkin methods.

## Menu

Discretizations

- Discontinuous Galerkin

Finite Element Shapes

- Segment, 2 and 3 nodes.
- Triangle, 3 and 6 nodes.
- Quadrangle, 4, 8 and 9 nodes.
- Tetrahedron, 4, and 10 nodes.
- Hexahedron, 8, 20 and 27 nodes.
- Prism, 6 and 15 nodes.
- Pyramid, 5 and 13 nodes.
- Agglomerated elements (polygons and polyhedrons).

Finite Element Spaces

- Physical frame modal basis functions (all FE Shapes)
- Arbitrary order orthonormal basis by means of the Modified Gram–Schmidt algorithm.
- Rescaled rotated monomials.

- Reference frame modal basis function (FE Shapes admitting a reference frame analogue)
- Generalized tensor product basis functions based on Jacobi polynomials.
- Monomials.
- Mapping functions
- First and second order Lagrangian basis functions.

- Quadrature rules
- Arbitrary order Gauss-Jacobi quadrature rules.

FE Data Storage

- FE related quantities can be stored once and for all in contiguous vectors (useful for agglomerated elements meshes).
- FE related quantities can be computed on the fly during assembly.

Local Matrix Assembly

- Assembly code can be dimension independent (1, 2 and 3D).
- Assembly exploits matrix and vectors arithmetic provided by Eigen3.

Solution visualization

- Solution output in the parallel vtk format (.pvtu).
- Subdivision in sub-cells according to the polynomial degree for visualization purposes.

Examples

- L2 projection
- Poisson Equation
- Interior Penalty dG discretization.
- BR2 dG discretization.
- Stokes
- Incompressible Navier-Stokes (Kovasznay flow, Ethier-Steinman 3D exact solution)
- Convective term dG discretization proposed by Di Pietro and Ern, Mathemathics of Computation 79(271):1303-1330, 2010.
- Convective term dG discritization proposed by Bassi, Crivellini, Di Pietro, and Rebay, Journal of Computational Physics 218(2):794-815, 2006.
- Pseudo-Transient Continuation (2D Lid-Driven Cavity)

## External Libraries

SpaFEDTe is based on high-quality open-source external libraries

- MOAB (A Mesh-Oriented datABase), here used for distributed parallel mesh management and mesh partitioning.

- PETSc (Portable, Extensible Toolkit for Scientific Computation), here used for parallel matrices and vectors data structures and the solution of linear and linearized systems in parallel.

- Eigen3 (a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms) here used for local vectors and matrices data types, linear algebra, matrix and vector arithmetic and efficient local assembly.

## Missing features

Output for simulation restart

## Future plans

h- and p-adatptivity

A posteriori error estimation

h-multigrid

hybrid FV

## Funding

This work received funds from PROGRAMMI DI RICERCA SCIENTIFICA DI RILEVANTE INTERESSE NAZIONALE (DM n. 1407 del 4 dicembre 2008), Sviluppo di una piattaforma di calcolo di ordine elevato per applicazioni industriali di Fluidodinamica e Aeroacustica computazionale.