bitpit is a C++ library for scientific High Performance Computing. Within bitpit different modules factorize the typical effort which is needed to derived a real-life application code.
Efforts is dedicated to handle different types of computational meshes, their runtime adaptation and data transfer for parallel applications.
Basic modules
common common
The bitpit::utils namespace provides miscellaneous functions for the bitpit framework
operators
- + - * / operators for the std::vector and std::array classes
- basic mathematic functions like dotProduct crossProduct norm abs ... for the std::vector and std::array classes
- << >> operators and display functions for the std::vector and std::array classes
containers
- bitpit::PiercedVector is a container which allows the cancellation and insertion on the fly of elements.
- bitpit::CollapsedArray2D & bitpit::CollapsedVector2D are 2D linearized vectors which avoid the overhead of the vector infrastructures.
- bitpit::IBinaryStream & bitpit::OBinaryStream allow to copy chunks of memory
communications
The communications module provides methods for parallel communications.
Input Output (IO)
- bitpit::genericIO is a namespace which contains basic routines to read/write in ASCII or BINARY
- bitpit::DGFObj class and bitpit::dgf namespace for reading and writing Dune Grid Format files
- bitpit::STLObj class and bitpit::stl namespace for reading and writing Stereo Litography files
- bitpit::VTK classes and bitpit::vtk namespace for reading and writing Visualization ToolKit files
- bitpit::Log classes and bitpit::log namespace for unified and coordinated output throughout all modules
Linear Algebra (LA)
LA providesi methods for small dense linear systems stored as std::vector<std::vector> or std::array<std::array>
- creation of basic matrices, like identity and diagonal matrices
- basic matrix operations like transpose and matrix multiplication
- solution
Radial Basis Functions manipulator (RBF)
The RBF module handles Radial Basis Function Interpolation/Parameterization with a large set of nodes.
Sort algorithms (SA)
- 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
PArallel Balanced Linear Octree (PABLO)
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
bitpit::PatchKernel is the base mesh container of bitpit. Basic elements like bitpit::Vertex, bitpit::Interface and bitpit::Cell are defined here, together with bitpit::Adaption which is used for dynamic mesh adaptation. It provides a homogenous interface class to all types of meshes and two specialized derived classes, bitpit::SurfaceKernel and bitpit::VolumeKernel, for surface and volume meshes.
Unstructured surface patch
bitpit::SurfUnstructured is the principal container for surface segmentations and has methods in order to read/write surface triangulations.
Cartesian/Octree/Unstructured volume patch
bitpit::VolCartesian, bitpit::VolOctree & bitpit::VolUnstructured are the derived voume meshes ifor 2D and 3D in bitpit. They share the common interface through bitpit::VolumeKernel but each grid provides specific optimized methods.
