A quick look at bitpit
During the development 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-performance scientific application. The library consist of several modules ranging from low level functionalities like algebraic 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
Operators
- basic algebraic operators (sum, difference, multiplication, division) for the std::vector and std::array containers
- basic mathematical functions like dot product, cross product, norm, absolute value, ... for the std::vector and std::array containers
- stream operators and display functions for the std::vector and std::array containers
Containers
This module provides containers useful for scientific applications:
- an associative container based on the std::vector which allows fast insertion and deletion of elements and guarantees a
- a 2D linearized vector
- binary buffers useful for parallel data exchange
Communications
The communications module provides high level 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
- creation of basic matrices, like identity and diagonal matrices
- basic matrix operations like transpose and matrix multiplication
- solution of linear systems
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 using 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 smallest/largest value in the treeComputational 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 additionally 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.
Levelset
The Levelset module provides method for evaluating signed and unsigned distance from generic objects immersed in a computational mesh