- Introduction
- What is a Bembel?
- Features
- Known Bugs and Upcoming Features
- Contributing to Bembel
- How to use the OpenCascade libary
- How to cite
Bembel is the Boundary Element Method Based Engineering Library written in C++ library featuring higher order isogeometric Galerkin boundary element methods for Laplace, Helmholtz, and Maxwell problems. Bembel is compatible with geometries from the Octave NURBS package, and provides an interface to the Eigen template library for linear algebra operations. For computational efficiency, it applies an embedded fast multipole method tailored to the isogeometric analysis framework and a parallel matrix assembly based on OpenMP.
A good place to start is the introduction here: Getting Started.
Furthermore, examples are provided in the examples/
folder, where details can be found in the publication [1].
Apart from that, a Doxygen documentation is available.
A traditional Hessian 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
- Header-only implementation,
- Already implemented Laplace, Helmholtz and Maxwell single layer operator, easily expendable to other operators,
- Arbitrary parametric mappings for the geometry representation, by default realized as NURBS-mappings from files generated by the NURBS package,
- Arbitrary-order B-Spline functions as Ansatz spaces, as in the framework of isogeometric analysis for electromagnetics,
- An embedded interpolation-based fast multipole method for compression, equivalent to the H2 matrix format,
- openMP parallelized matrix assembly,
- Full compatibility with the Eigen linear algebra library.
- Import and export methods for STEP files according to ISO standard 10303 to simulate your own geometries.
Please send bug reports and feature requests via issue tracker on GitHub.
Any contribution to this project in fixing a bug or implementing a feature is welcome. Create a fork of this repository and create a pull request. To successfully merge your pull request you should follow our Coding Guidelines
This project utilizes the OpenCascade (OCCT) library for STEP file handling. The required libraries are automatically linked using the provided CMake configuration. Follow the steps below to ensure that OpenCascade is properly set up on your system.
You need OpenCascade installed on your system. You can either install it via your system's package manager or build it from source. On Ubuntu-based systems, you can install it with:
sudo apt install libocct-foundation-dev libocct-data-exchange-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev
Alternatively, you can download and build OpenCascade from the official website: OpenCascade Technology.
In some cases you need to install libtbb-dev
an development package for Intel's Threading Building Blocks (TBB). It is a library that provides high-level abstractions for parallel programming. On Ubuntu-based systems, you can install it with:
sudo apt install libtbb-dev
After installing, you can use the CMake files to compile the code.
You can use Docker to create a clean and isolated Ubuntu environment to build and run this project. Below are the steps to set up the required tools and libraries using Docker.
-
Pull and Run an Ubuntu Docker Container
Start by running an interactive Ubuntu container:
sudo docker run -it ubuntu
This will pull the latest Ubuntu image and give you an interactive shell inside the container.
-
Update Package Lists
Inside the Docker container, run the following command to update the package lists:
apt update
-
Install Required Development Tools and Libraries
Install Git, CMake, GCC/G++, and Eigen3:
apt install git cmake g++ libeigen3-dev -y
-
Install OpenCascade Libraries
Install the necessary OpenCascade libraries for working with STEP files and 3D geometry:
apt install libocct-data-exchange-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev -y
-
Install Intel's Threading Building Blocks (TBB)
Install the TBB library for parallelization:
apt install libtbb-dev -y
-
Clone the Repository
Clone the project repository inside the Docker container:
git clone "https://github.com/Pero-ISt/bembel.git"
-
Build the Project
Navigate into the cloned repository directory:
cd bembel
Generate the build files with CMake:
cmake -B build .
Build the project using CMake:
cmake --build build --config release
If you need to preserve the container state, you can commit the container to an image and run it again later. For more advanced Docker usage, see Docker's official documentation.
[1] J. Dölz, H. Harbrecht, S. Kurz, M. Multerer, S. Schöps, and F. Wolf. Bembel: The Fast Isogeometric Boundary Element C++ Library for Laplace, Helmholtz, and Electric Wave Equation. In: SoftwareX, 11, 10476.
@article{Bembel2020,
doi = {https://doi.org/10.1016/j.softx.2020.100476},
year = {2020}, volume = {11}, pages = {100476},
issn = {2352-7110},
author = {J. Dölz and H. Harbrecht and S. Kurz and M. Multerer and S. Schöps and F. Wolf},
title = {{Bembel}: The fast isogeometric boundary element {C++} library for {Laplace}, {Helmholtz}, and electric wave equation},
journal = {Software {X}}}