A quick look at bitpit

During the develpment of scientific applications it is always necessary to spend time developing basic functionalities which are common to many scientific programs. For example, applications that deals with finite volume or finite element methods always uses some kind of spatial discretization of the physical domain and thus require code to handle computational meshes. Although essential to the application, the development of these common functionalities is time consuming and subtracts time to the development of the main functionalities of the application.

Each module of the bitpit library is developed to address a specific aspect of real-life application development. Modules can be used as building blocks to quickly develop a high-perfomance scientific application. The library consist of several modules ranging from low level functionalities like algebrical operators to high level functionalities like the evaluation of distance functions on computational meshes.

bitpit is free software developed by Optimad Engineering Srl and licensed under the GNU Lesser General Public License v3.

Basic modules



This module provides containers useful for scientific applications:


The communications module provides high levle methods for handling MPI parallel communications.

IO - Input Output

This module provides methods for reading and writing common data files like DGF (Dune Grid Format), STL (STereo Litography) and VTK (Visualization ToolKit) files. It also provides methods for handling log files.

LA - Linear Algebra

LA provides methods for handling small dense linear systems stored as std::vector or std::array. It

Radial Basis Functions manipulator (RBF)

The RBF module allows to efficiently handle Radial Basis Function interpolation and parameterization even with a large set of nodes.

SA - Sort algorithms

bitpit::LIFOStack manage insertion and extraction uding the Last-In-First-Out pragma bitpit::KdTree sorts vertices in a d-dimensional Euclidean space in a Kd-tree structure bitpit::MinPQueue & bitpit::MaxPQueue manage a binary tree which ensures that the root element has the smalles/largest value in the tree

Computational Geometry (CG)

CG module provides methods for computational geometry.

Mesh modules

PABLO - PArallel Balanced Linear Octree

PABLO is a stand-alone module which provides a parallel linear octree/quadtree. bitpit::ParaTree provides connectivity/adjecency information only, whereas bitpit::PabloUniform provides aditionally all geometrical information for an Octree within and rectangular domain. Message passing paradigm is transparent to the user since PABLO has embedded MPI calls. By this way, the user can easily perform data communications and dynamic load-balance by calling straightforward high level methods.
PABLO allows adaptive mesh refinement by generating non-conforming grid with hanging nodes. Additional features available in PABLO are: 2:1 balancing between octants and a easy way to generate and store intersections between octants.

Patch kernel

PatchKernel is the base mesh container of bitpit. It defines basic elements like vertices, interfaces and cells and basic data structures used by the other mesh modules. It provides a homogenous interface class to all types of meshes and two specialized derived classes, for surface and volume meshes.

Surface meshes

SurfUnstructured is the container for surface segmentations and has methods tp read, write and modify surface triangulations.

Volume meshes

VolCartesian and VolOctree are the modules that handles Cartesian and Octree meshes. They share a common interface through VolumeKernel but each patch provides specific optimized methods.


The Levelset module provides method for evaluating signed and unsigned distance from generic objects immersed in a computational mesh