[ FFFFF EEEEE EEEEE CCCC + + ]
[ F E E C + + ]
[ FFFF EEEE EEEE C +++++++ +++++++]
[ F E E C + + ]
[ F EEEEE EEEEE CCCC + + ]
[ C++ Finite element library based on FEEC ]
[www.github.com/martinlicht/simplefem]
FEEC++ is a C++ library for finite element methods in the spirit of finite element exterior calculus (FEEC). Its goal is to enable easy prototyping for fundamental research in numerical PDE with a FEEC point-of-view.
FEEC++ implements finite element differential forms of arbitrary (uniform) polynomial degree over simplicial meshes, including Whitney forms and Sullivans forms, together with the relevant algebraic and metric operations. It comes with linear algebra implementations and supports uniform refinement and longest edge bisection.
FEEC++ builds and runs on Linux, Windows (Cygwin), and MacOS. The only necessary prerequisites are a C++14 compiler (such as GCC and Clang) and GNU Make.
Most important features:
- Written in C++
- Minimal dependencies: C++14 compiler and GNU make
- Compiles and runs on Linux, Windows & Cygwin, or Windows & MinGW-w64
Finite element features:
- Meshes in dimension 1, 2, and 3
- uniform mesh refinement and longest edge bisection
- Whitney and Sullivan k-forms of any polynomial degree in any dimension
- Exterior derivative, traces, exterior and interior products
- Metric linear operations such as mass operator and Hodge star operator
- Mass matrices with constant or non-uniform coefficients
C++ design guidelines:
- C++14 with optional C++17 enhancements
- Minimal dependencies: C++14 compiler and GNU Make
- Minimal requirements and fast compilation
- Any necessary external library included
- Fail-fast philosophy
Planned finite element features:
- Different bases of finite element differential forms
- Polynomial multigrid
- Curved geometries (surfaces supported already)
- Finite element spaces with non-uniform polynomial degree
- Duality-based error estimators and adaptive strategies
This codebase aims for facilitating easy proof-of-concept implementations for finite element methods not found in the standard textbooks, with minimal dependencies and easily portable with regard to OS and machine power.
This project has some explicit non-goals: the project does neither aim for massively distributed-memory parallelism nor for peak high-performance computing.