Bembel is the Boundary Element Method Based Engineering Library written in C and C++ to solve boundary value problems governed by the Laplace, Helmholtz or electric wave equation within the isogeometric framework [3,4,5]. It was developed as part of a cooperation between the TU Darmstadt and the University of Basel, coordinated by H. Harbrecht, S. Kurz and S. Schöps. The code is based on the Laplace BEM of J. Dölz, H. Harbrecht, and M. Multerer, [2,6] as well as the spline and geometry framework of F. Wolf. The code was extended by J. Dölz and F. Wolf in early 2018 to cover electromagnetic applications [4,5].
This code is currently at version 0.1 and a work in progress. It has to be polished and it has to be properly documented.
A traditional German ceramic, as depicted in our logo. Quoting Wikipedia:
Most establishments also serve Apfelwein by the Bembel (a specific Apfelwein jug), much like how beer can be purchased by the pitcher in many countries. The paunchy Bembel (made from salt-glazed stoneware) usually has a basic grey colour with blue-painted detailing.
Current key features include
Planned features include octave wrappers and the full Calderon projector for scalar problems.
Note that all mentioned scripts are written for bash, and thus only engineered to work on Linux / MacOS installations.
We ship a copy of Eigen3
as a subrepository, since its unsupported modules are not available in many
local installations of Eigen. The submodule is automatically pulled when calling
compile.sh script for the first time.
If you have received this copy of bembel as an archive and not as a
git-repository, you may download eigen via the
Note that this will break its functionality as a submodule if you cloned the
If you are not familiar with Eigen3, we emphasize that you can use it similarly to Matlab or Octave, see here.
We do not rely on any other external libraries, except for the standard template
library. Thus, Bembel should compile out of the box. Under Linux, you may simply
compile.sh shell script, which creates a
build/ directory and takes
care of compilation. Afterwards, we recommend running
run_tests.sh which will
call test routines, as well as examples for the computation of a Laplace,
Helmholtz, and Maxwell problem. Afterwards, if you have a workin LaTeX
installation, you can call
The general structure of the repository looks as follows.
assets/only contains things relevant for GitHub pages.
geo/contains geometry files in the format of the octave NURBS package. They can be utilized for computations. Note that the normal vector must be outward directed on all patches!
.mfiles that showcase how geometries can be construct using the NURBS package of octave.
.texfiles utilized by the
test.sh-script to visualize the examples.
src/contains the source files:
src/bemlibCcontains the C and C++ routines. Most of these have not yet been converted to Eigen and modern C++.
src/include/contains the high level
.hpp-files, which implement the interface to utilize our code; as well as a copy of eigen3, and some header files in
spline/for the low level routines.
src/examples/contains the source code for the executables.
src/test/contains the code of some automated tests called by
When using our code, we recommend starting with understanding the code in
src/examples/, followed by learning the capabilities of the high-level classes
*.hpp files, which we also consider to be the persistent API for further
You may also execute Doxygen. Many functions are documented, and the callgraphs
visualize the overall structure of the code.
You may also want to take a look at our more detailed Documentation.
For a list of known bugs and upcoming features, please have a look at the issue tracker on github.
 A. Buffa, J. Dölz, S. Kurz, S. Schöps, R. Vázques, and F. Wolf. Multipatch Approximation of the de Rham Sequence and its Traces in Isogeometric Analysis. 2018. Submitted. To the preprint.
 J. Dölz, H. Harbrecht, and M. Peters. An interpolation-based fast multipole method for higher-order boundary elements on parametric surfaces. Int. J. Numer. Meth. Eng., 108(13):1705-1728, 2016. To the paper.
 J. Dölz, H. Harbrecht, S. Kurz, S. Schöps, and F. Wolf. A fast isogeometric BEM for the three dimensional Laplace- and Helmholtz problems. Comput. Methods Appl. Mech. Engrg., 330:83-101, 2018. To the paper. To the preprint.
 J. Dölz, S. Kurz, S. Schöps, and F. Wolf. Isogeometric Boundary Elements in Electromagnetism: Rigorous Analysis, Fast Methods, and Examples. 2018. Submitted. To the preprint.
 J. Dölz, S. Kurz, S. Schöps, and F. Wolf. A Numerical Comparison of an Isogeometric and a Classical Higher-Order Approach to the Electric Field Integral Equation. 2018. Submitted. To the preprint.
 H. Harbrecht and M. Peters. Comparison of fast boundary element methods on parametric surfaces. Comput. Methods Appl. Mech. Engrg., 261-262:39-55, 2013. To the paper.
Other contributors include D. Andric (geometry import), J. Corno (modified NURBS toolbox script), H. Harbrecht (parts of the legacy C-codebase, particularly the quadrature routines).
Jürgen Dölz currently holds a postdoc position at the Department of Mathematics at TU Darmstadt. While contributing to Bembel, he was supported by SNSF Grants 156101 and 174987, as well as the Graduate School of Computational Engineering at TU Darmstadt and the Excellence Initiative of the German Federal and State Governments and the Graduate School of Computational Engineering at TU Darmstadt.
Michael Multerer currently holds a professorship at the Institute of Computational Science at the Università della Svizzera italiana in Lugano. While contributing to Bembel, he was supported by SNSF Grant 137669 until 2014. He may also be found on GitHub.
Felix Wolf is currently a PhD student at the Institute TEMF at TU Darmstadt. While contributing to Bembel, he was supported by DFG Grants SCHO1562/3-1 and KU1553/4-1, as well as the Graduate School of Computational Engineering at TU Darmstadt and the Excellence Initiative of the German Federal and State Governments and the Graduate School of Computational Engineering at TU Darmstadt. He may also be found on GitHub.