2.3 Software Libraries and Tools

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]

A convenience C++ layer for the C-based MPI API

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




Table 2.1: An alphabetical selection of Boost libraries utilized in this work.

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].









Name

Geometrical dimension Topological dimension Hypercube Simplex Incremental Delaunay Advancing Front







CGAL [58]

2,32,3 ∙ ∙







Gmsh [59]

2,32,3∙ ∙ ∙ ∙







Netgen [60]

2,32,3 ∙ ∙







Tetgen [61]

3 3 ∙ ∙







Triangle [62]

2 2 ∙ ∙








Table 2.2: Alphabetical list of popular FLOSS-based mesh generation tools and their properties. Simplex denotes triangular and tetrahedral mesh elements, which are usually implemented via an unstructured data structure. Hypercube relates to quardilateral and hexahedral mesh elements, typically implemented via structured meshes.

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
harmonics expansions for semiconductor devices



ViennaWD [67]

A stochastic device simulator in the classic and quantum
domain



ViennaX [9]

A high-performance plugin execution framework for scientific computing




Table 2.3: Alphabetical list of Vienna* applications.




Name

Description



ViennaCL [1]

A linear algebra library using CUDA, OpenCL, and OpenMP



ViennaData [69]

A library for attaching application-specific data to arbitrary
objects



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
operations



ViennaMesh [6]

A library for mesh generation, adaption, classification of multi-segmented meshes and geometries




Table 2.4: Alphabetical list of Vienna* libraries.

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).