4.3 The ViennaMini Project

ViennaMini is a FLOSS-based device simulation framework [7], specifically tackling the previously introduced requirements and challenges for a device simulation framework (Section 4.2). The implementation makes extensive use of the Vienna* collection (Section 2.3), thus uses synergy effects introduced by LCSD (Section 3.4). Therefore, the actual device simulation tool, named ViennaMini, merely interfaces with these libraries and can thus focus on higher-level issues, such as orchestrating the simulations. This fact represents the major motivation for applying LCSD in the first place, and thus ViennaMini can be seen as a beneficiary of such an approach.

Figure 4.9 depicts the library dependencies of ViennaMini. Note that the previously identified key components of a device simulator (Figure 4.2) map directly to the utilized Vienna* libraries. The mesh-related functionality is provided by ViennaGrid and ViennaMesh, respectively. ViennaGrid implements the mesh data structure and related traversal methods. ViennaMesh enables to generate and to adapt meshes via several meshing kernels. The material data is accessed via ViennaMaterials, providing flexible access to material parameters via different database backends. The symbolic math functionality is provided by ViennaMath, allowing to setup and manipulate mathematical expressions of the PDEs. The finite volume discretization scheme is implemented via ViennaFVM, performing the discretization of the PDEs. Also ViennaFVM assembles the system of equations Ax  = b , and solves it via nonlinear solvers, in turn powered by exchangeable linear solver backends.


pict


Figure 4.9: The dependencies of the device simulator ViennaMini are shown. The majority of functionality, such as finite volume-based discretization and assembly routines, is provided by the Vienna* collection and the Boost libraries. ViennaMesh additionally depends on external meshing tools, such as Triangle, Tetgen, and Netgen.


Section 4.3.1 gives an overview of the general simulator design. Section 4.3.2 discusses an approach to handle material parameters. Section 4.3.3 introduces a device object, holding the mesh data structure and additional meta information. Section 4.3.4 investigates the configuration object used to tune the simulation. Section 4.3.5 shows the ability to perform a series of simulations according to a contact parameter sweep, required for computing, for instance, the current-voltage characteristics. Section 4.3.6 discusses an approach for defining a flexible set of simulation setups. Section 4.3.7 deals with mesh-related tasks. Section 4.3.8 introduces the device template mechanism. Section 4.3.10 depicts several examples, underlining the capabilities of ViennaMini.

  4.3.1 Design
  4.3.2 Material Database
  4.3.3 Device
  4.3.4 Configuration
  4.3.5 Stepper
  4.3.6 Problem Classes
   The Laplace Problem
   The Drift-Diffusion Problem
  4.3.7 Mesh Generation
  4.3.8 Device Templates
  4.3.9 Simulator
  4.3.10 Examples
   One-Dimensional Capacitor
   Two-Dimensional PN Diode
   Three-Dimensional FinFET