This section provides an alphabetical overview of libraries and tools utilized for the
implementations introduced in this thesis. Using these packages was vital to the developed
techniques and implementations, ultimately reducing the development time considerably.
The Boost C++ Libraries [47] provide access to a vast set of functionality via individual
libraries. The libraries are based on a peer-review system, aiming to impose quality standards
upon new library members. The Boost License supports non-commercial and commercial use
and cover a plethora of categories, such as data structures, algorithms, and concurrent
programming. Table 2.1 lists certain Boost libraries in closer connection to this
work.
Name | Description |
Graph [48] | A generic graph library similar to the Standard Template Library (STL) |
MPI [49] | |
Serialization [50] | A library for decomposing an arbitrary set of C++ data structures into a sequence of bytes |
Smart Ptr [51] | A library providing automatic and safe pointer classes |
uBLAS [52] | A linear algebra library |
Variant [53] | A safe, generic, stack-based discriminated union container |
Mesh generation tools divide a physical domain into so-called mesh elements [54],
such as triangles or cubes. This generation step is challenging, as usually several
properties have to be met. For instance, a mesh must conform - as good as possible - to
the shape of the simulation object, to enable a proper representation and thus by
extension allow for meaningful simulation results. Also, the elements must be suitable
shaped and sized to reduce discretization errors [55], and the number of mesh
elements in total has to be kept small to minimize the subsequent simulation time.
The challenge of mesh generation holds especially true for the field of CSE, where
meshes are used to discretize equations in finite form via, for instance, finite volume
methods. Several mesh generation tools are available, supporting different dimensions
and meshing algorithms [56], such as advancing front, octree, and incremental
Delaunay. Each meshing approach generates meshes with different properties, for
instance, three-dimensional simplex, i.e., line, triangle, and tetrahedron meshes
which satisfy the conforming Delaunay property [54]. Table 2.2 gives an overview of
FLOSS-based meshing tools, the majority of which is being used by the ViennaMesh
library [6].
ParaView [63] is a data analysis and visualization application supporting a variety of
platforms, such as Windows and Unix-like systems. The application is coded in C++ and is
available under a BSD license. ParaView utilizes the VTK library for the visualization backend
and the Qt framework for the GUI frontend. Due to ParaView’s popularity and modular GUI
approach it acted as a reference for a developed interactive simulation framework
(Section 6.2).
The Qt Framework [64] is a cross-platform application and GUI framework using
primarily C++. Qt extends the standard C++ language features by macros and a code
generator, the so-called meta-object compiler. Qt supports desktops as well as mobile
platforms. Furthermore, interfaces are available to non-gui features, such as SQL databases,
extendible markup language ( XML), threading, and networking support. The Qt framework
was used in this work for developing a modular GUI-based simulation framework
(Chapter 6).
The Vienna*2
Collection [65] is designed in the image of the Boost libraries, aimed to provide researchers
with a rich set of ready-to-use and easily accessible FLOSS-based functionality. In essence,
Vienna* is a set of libraries and applications. The Vienna* project’s primary goal is to
strengthen the open source movement in the field of MNDS. Although a couple of software
packages are considered domain-specific, others are not and can thus be utilized in various
application areas of CSE. For instance, ViennaCL- a general purpose linear algebra library -
is utilized by, for instance, mechanical and electrical engineering applications. Table 2.3 and
Table 2.4 depicts the current set of applications and libraries, respectively. During the
course of research giving rise to this thesis, several of the Vienna* libraries and
applications have been supported, maintained, extended, utilized, and initiated.
Name | Description |
ViennaMini [7] | A classical multi-dimensional device simulator |
ViennaMOS [8] | A GUI-based modular framework tailored to the requirements of MNDS |
ViennaProfiler [66] | A centralized code profiling application |
ViennaSHE [45] | A deterministic Boltzmann solver based on spherical |
ViennaWD [67] | A stochastic device simulator in the classic and quantum |
ViennaX [9] | A high-performance plugin execution framework for scientific computing |
Name | Description |
ViennaCL [1] | A linear algebra library using CUDA, OpenCL, and OpenMP |
ViennaData [69] | A library for attaching application-specific data to arbitrary |
ViennaFEM [70] | A finite element library with a symbolic math kernel |
ViennaFVM [2] | A finite volume library with a symbolic math kernel |
ViennaGrid [3] | A mesh data structure library |
ViennaIPD [4] | A control language library for scientific simulations |
ViennaMaterials [5] | A flexible material library |
ViennaMath [75] | A symbolic math library for compile time and run time |
ViennaMesh [6] | A library for mesh generation, adaption, classification of multi-segmented meshes and geometries |
The visualization toolkit ( VTK) [76] library provides functionality in the field of
computer graphics, image processing, and visualization. VTK is a cross-platform
library and is based on a C++ class library with support for other languages, such
as Python. VTK provides a wide range of visualization algorithms, such as vector
methods, as well as modeling techniques, like Delaunay mesh generation. The library
provides interaction support with GUI frameworks, such as Qt. VTK was used in the
combination with Qt to provide flexible rendering facilities, both for charts as well
as for 3D renderings including scalar and vector field visualization (Chapter 6).