FreeFEM Documentation on GitHub

stars - forks


The project has evolved from MacFem, PCfem, written in Pascal. The first C version lead to freefem 3.4; it offered mesh adaptivity on a single mesh only.

A thorough rewriting in C++ led to freefem+ (freefem+ 1.2.10 was its last release), which included interpolation over multiple meshes (functions defined on one mesh can be used on any other mesh); this software is no longer maintained but is still in use because it handles a problem description using the strong form of the PDEs. Implementing the interpolation from one unstructured mesh to another was not easy because it had to be fast and non-diffusive; for each point, one had to find the containing triangle. This is one of the basic problems of computational geometry (see [PREPARATA1985] for example). Doing it in a minimum number of operations was the challenge. Our implementation is \(\mathcal{O}(n log n)\) and based on a quadtree. This version also grew out of hand because of the evolution of the template syntax in C++.

We have been working for a few years now on FreeFEM , entirely re-written again in C++ with a thorough usage of template and generic programming for coupled systems of unknown size at compile time. Like all versions of freefem, it has a high level user friendly input language which is not too far from the mathematical writing of the problems.

The freefem language allows for a quick specification of any partial differential system of equations. The language syntax of FreeFEM is the result of a new design which makes use of the STL [STROUSTRUP2000], templates, and bison for its implementation; more details can be found in [HECHT2002]. The outcome is a versatile software in which any new finite elements can be included in a few hours; but a recompilation is then necessary. Therefore the library of finite elements available in FreeFEM will grow with the version number and with the number of users who program more new elements. So far we have discontinuous \(P_0\) elements,linear \(P_1\) and quadratic \(P_2\) Lagrangian elements, discontinuous \(P_1\) and Raviart-Thomas elements and a few others like bubble elements.

The development of FreeFEM through more than 30 years


MacFem/PCFem the old ones (O. Pironneau in Pascal) no free.


FreeFem rewrite in C++ (P1,P0 one mesh ) O. Pironneau, D. Bernardi, F.Hecht (mesh adaptation , bamg) , C. Prudhomme .


FreeFem+ rewrite in C++ (P1,P0 more mesh) O. Pironneau, D. Bernardi, F.Hecht (algebra of function).


FreeFem++ rewrite with an other finite element kernel and an new language F. Hecht, O. Pironneau, K.Ohtsuka.


FreeFem 3d (S. Del Pino), a fist 3d version base on fictitious domaine method.


FreeFem++ v3 use a new finite element kernel multidimensionnels: 1d,2d,3d…


FreeFem++ v3.34 parallel version


FreeFem++ v3.57 parallel version


FreeFem++ v4: New matrix type, Surface element, New Parallel tools …
Table of content