Device simulation provides a flexible means for prototyping models such as a
mobility model.
As simulations of this kind are of a rather intricate nature, they rely on
a multitude of key functionalities, like solving a system of linear equations or
adapting the discretized simulation domain.
Due to the high complexity of the simulation process, it is crucial to separate
individual steps into modules.
From a software point of view, these modules are implemented
as libraries, whereas the control of the simulation itself is governed by
a separate simulation application. This approach avoids
monolithic software design and consequently supports extendibility,
exchangeability, and maintainability.
In this regard, extendibility refers to the ability to conveniently add
modules or libraries to the environment.
Exchangeability denotes the ability to replace a module with another one,
whereas maintainability allows for easy access to a specific implementation part.
Aside from the general planning of the simulator environment, the required
libraries have been identified. The process chain, which reflects the whole
device simulation process from the input geometry to the visualization of the
simulation result, has been setup and is currently under development.
The figure depicts an exemplary setup for a simulation process based on modules
developed as part of the simulation environment. The
input geometry is discretized by a meshing library, namely ViennaMesh.
The governing simulation application, ViennaMOS, processes the input mesh
and interacts with a material library, ViennaMaterials, to retrieve material parameters.
Moreover ViennaMOS sets up
an equation system based on the Finite Volume discretization method, provided
by the respective spatial discretization library, ViennaFVM.
The equation system can for example be solved by our OpenCL driven solver library, ViennaCL.
The implementations are based on the C++ programming language.
Modern programming techniques are applied, such as generic and meta-programming.
Furthermore, a major focus is on Library-Centric Software Design.
This design concept not only upholds the separation of functionality into libraries with
a high degree of orthogonality but also
refers to reusage of existing code. Therefore several publicly available
programming libraries are used for the development of the simulation environment,
like the Boost libraries or additional solver packages, like Trilinos.
|