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.
- basic algebrical operators (sum, difference, multiplication, division) for the std::vector and std::array containers
- basic mathematic 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
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
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
- 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 algorithmsbitpit::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.
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.
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.
SurfUnstructured is the container for surface segmentations and has methods tp read, write and modify surface triangulations.
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