What is HPDDM?
HPDDM is an efficient implementation of various domain decomposition methods (DDM) such as one- and two-level Restricted Additive Schwarz methods, the Finite Element Tearing and Interconnecting (FETI) method, and the Balancing Domain Decomposition (BDD) method. These methods can be enhanced with deflation vectors computed automatically by the framework using:
- Generalized Eigenvalue problems on the Overlap (GenEO), an approach first introduced in a paper by Spillane et al., or
- local Dirichlet-to-Neumann operators, an approach first introduced in a paper by Nataf et al. and revisited by Conen et al.
This code has been proven to be efficient for solving various elliptic problems such as scalar diffusion equations, the system of linear elasticity, but also frequency domain problems like the Helmholtz equation. A comparison with modern multigrid methods can be found in the thesis of Jolivet. The preconditioners may be used with a variety of Krylov subspace methods (which all support right, left, and variable preconditioning):
How to use HPDDM?
HPDDM is a library written in C++11 with MPI and OpenMP for parallelism. While its interface relies on plain old data objects, it requires a modern C++ compiler: g++ 4.7.2 and above, clang++ 3.3 and above, icpc 15.0.0.090 and above¹, or pgc++ 15.1 and above¹. HPDDM has to be linked against BLAS and LAPACK (as found in OpenBLAS, in the Accelerate framework on OS X, in IBM ESSL, or in Intel MKL) as well as a direct solver like MUMPS, SuiteSparse, MKL PARDISO, or PaStiX. Additionally, an eigenvalue solver is recommended. There is an existing interface to ARPACK. Other (eigen)solvers can be easily added using the existing interfaces.
For building robust two-level methods, an interface with a discretization kernel like FreeFem++ or Feel++ is also needed. It can then be used to provide, for example, elementary matrices, that the GenEO approach requires. As such preconditioners assembled by HPDDM are not algebraic, unless only looking at one-level methods. Note that for substructuring methods, this is more of a limitation of the mathematical approach than of HPDDM itself.
If you need to generate the documentation, you first have to retrieve NaturalDocs. Then, just type in the root of the repository
NaturalDocs --input include --output HTML doc --project doc. The list of available options can be found in this cheat sheet.
¹The latest versions of
icpc and (this has been fixed since version 220.127.116.11) pgc++ are not able to compile C++11 properly, if you want to use these compilers, please apply the following patch to the headers of HPDDM
sed -i\ '' 's/type\* = nullptr/type* = (void*)0/g; s/static constexpr const char/const char/g' include/*.hpp examples/*.cpp.
./Makefile.inc by copying one from the folder
./Make.inc and adapt it to your platform. Type
make test to run C++, C, Python, and Fortran examples (just type
make test_language with
language = [cpp|c|python|fortran] if you want to try only one set of examples).
May HPDDM be embedded inside C, Python, or Fortran codes?
What if I don't want to deal with the library API myself?
You may access some functionalities of HPDDM through the following software:
- FreeFem++, all features of HPDDM,
- Feel++, substructuring preconditioners,
- PETSc, advanced Krylov methods,
- htool, overlapping Schwarz preconditioners for dense operators.
Who is behind HPDDM?
How to cite HPDDM?
Centre National de la Recherche Scientifique, France
Institut de Recherche en Informatique de Toulouse, France
Eidgenössische Technische Hochschule Zürich, Switzerland
Université Joseph Fourier, Grenoble, France
Université Pierre et Marie Curie, Paris, France
Inria Paris, France
Agence Nationale de la Recherche, France
Partnership for Advanced Computing in Europe
Grand Equipement National de Calcul Intensif, France
Fondation Sciences Mathématiques de Paris, France