ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
forwards.h
Go to the documentation of this file.
1#ifndef VIENNASHE_FORWARDS_H
2#define VIENNASHE_FORWARDS_H
3
4/* ============================================================================
5 Copyright (c) 2011-2022, Institute for Microelectronics,
6 Institute for Analysis and Scientific Computing,
7 TU Wien.
8
9 -----------------
10 ViennaSHE - The Vienna Spherical Harmonics Expansion Boltzmann Solver
11 -----------------
12
13 http://viennashe.sourceforge.net/
14
15 License: MIT (X11), see file LICENSE in the base directory
16=============================================================================== */
17
43#include <stdexcept>
44
45#include <ostream>
46#include <cstddef>
47#include <string>
48#include <map>
49
50#include "viennashe/version.hpp"
51
52#include "viennagrid/forwards.hpp"
53
54
59//
60// Section 1: Set up keys for ViennaData:
61//
62
64namespace viennashe
65{
67 namespace detail
68 {
70 template <typename MeshT, typename CellTag = typename viennagrid::result_of::cell_tag<MeshT>::type>
72 {
73 enum { value = false };
74 };
75
77 template <typename MeshT>
78 struct is_1d_mesh<MeshT, viennagrid::simplex_tag<1> >
79 {
80 enum { value = true };
81 };
82
84 template <typename MeshT>
85 struct is_1d_mesh<MeshT, viennagrid::hypercube_tag<1> >
86 {
87 enum { value = true };
88 };
89 }
90
92 template <typename T>
93 struct error_indicator {};
94
95
96 template <typename MeshT,
97 bool edges_and_cells_different = detail::is_1d_mesh<MeshT>::value >
98 class device;
99
100 template <typename DeviceType>
101 class simulator;
102
103
109 typedef std::map<std::string, std::pair<std::size_t, std::size_t> > map_info_type;
110
111
114 {
121 };
122
125 {
128 BOUNDARY_NEUMANN, // du/dn = beta
129 BOUNDARY_ROBIN, // du/dn = beta - alpha * u
131 };
132
134 {
141 };
142
144 {
147 };
148
150 {
153 };
154
155 namespace math
156 {
159 {
163 };
164 }
165
166 //
167 // Box-integration related. Keys used for storing box integration information on the mesh, cf. ViennaGrid manual.
168 //
170 struct box_volume_key {}; //box volume associated with an edge or vertex
171
173 struct edge_interface_area_key {}; //box volume associated with an edge
174
175
176 // Other ViennaSHE forward declarations:
178 typedef std::vector<double> energy_vector_type;
179
181 typedef std::vector<long> she_index_vector_type;
182
185 {
189 };
190
193 {
197 };
198
199 // Solver tags:
200 namespace solvers
201 {
204
207
210
213
217
218 }
219}
220
221
222#endif
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
Definition: device.hpp:818
Class for self-consistent SHE simulations.
Definition: simulator.hpp:675
Internal tag used for the specification of a dense linear solver (Gauss, single-threaded)
Definition: forwards.h:203
Internal tag used for the specification of a GPU-accelerated linear solver.
Definition: forwards.h:216
Internal tag used for the specification of a CPU-based multi-threaded linear solver.
Definition: forwards.h:209
Internal tag used for the specification of a CPU-based PETSC solver.
Definition: forwards.h:212
Internal tag used for the specification of a single-threaded linear solver.
Definition: forwards.h:206
harmonics_iteration_type
An enumeration of spherical harmonics types (all, even, odd) ViennaSHE supports.
Definition: forwards.h:159
@ ALL_HARMONICS_ITERATION_ID
Definition: forwards.h:160
@ EVEN_HARMONICS_ITERATION_ID
Definition: forwards.h:161
@ ODD_HARMONICS_ITERATION_ID
Definition: forwards.h:162
The main ViennaSHE namespace. All functionality resides inside this namespace.
Definition: accessors.hpp:40
std::map< std::string, std::pair< std::size_t, std::size_t > > map_info_type
Information on the number of unknowns per quantity.
Definition: forwards.h:101
she_discretization_type_id
Definition: forwards.h:144
@ SHE_DISCRETIZATION_EVEN_ODD_ORDER_GENERALIZED_DF
Definition: forwards.h:146
@ SHE_DISCRETIZATION_EVEN_ODD_ORDER_DF
Definition: forwards.h:145
carrier_type_id
Enumeration type for selecting the carrier type.
Definition: forwards.h:185
@ INVALID_TYPE
Definition: forwards.h:186
@ HOLE_TYPE_ID
Definition: forwards.h:188
@ ELECTRON_TYPE_ID
Definition: forwards.h:187
equation_id
An enumeration of all equation types ViennaSHE supports.
Definition: forwards.h:114
@ EQUATION_SHE
Definition: forwards.h:118
@ EQUATION_DENSITY_GRADIENT
Definition: forwards.h:119
@ EQUATION_POISSON_HEAT
Definition: forwards.h:120
@ EQUATION_POISSON_DD
Definition: forwards.h:116
@ EQUATION_CONTINUITY
Definition: forwards.h:117
@ EQUATION_INVALID
Definition: forwards.h:115
boundary_type_id
An enumeration of all boundary conditions ViennaSHE supports.
Definition: forwards.h:125
@ BOUNDARY_DIRICHLET
Definition: forwards.h:127
@ BOUNDARY_NEUMANN
Definition: forwards.h:128
@ BOUNDARY_ROBIN
Definition: forwards.h:129
@ BOUNDARY_GENERATION_RECOMBINATION
Definition: forwards.h:130
@ BOUNDARY_NONE
Definition: forwards.h:126
material_category_id
Definition: forwards.h:134
@ MATERIAL_NO_SEMICONDUCTOR_ID
Definition: forwards.h:138
@ MATERIAL_SEMICONDUCTOR_ID
Definition: forwards.h:137
@ MATERIAL_NO_CONDUCTOR_ID
Definition: forwards.h:136
@ MATERIAL_CONDUCTOR_ID
Definition: forwards.h:135
@ MATERIAL_INSULATOR_ID
Definition: forwards.h:139
@ MATERIAL_NO_INSULATOR_ID
Definition: forwards.h:140
std::vector< double > energy_vector_type
Type for storing the discrete energies.
Definition: forwards.h:178
doping_type_id
Enumeration type for selecting the doping type.
Definition: forwards.h:193
@ ACCEPTOR_DOPING_TYPE_ID
Definition: forwards.h:196
@ DONATOR_DOPING_TYPE_ID
Definition: forwards.h:195
@ INVALID_DOPING_TYPE
Definition: forwards.h:194
std::vector< long > she_index_vector_type
Type for storing the unknown indices at each point in the (x, H)-space.
Definition: forwards.h:181
she_scaling_type_id
Definition: forwards.h:150
@ SHE_SCALING_KINETIC_ENERGY
Definition: forwards.h:151
@ SHE_SCALING_TOTAL_ENERGY
Definition: forwards.h:152
Internal key for storing the box volume associated with an edge or a vertex.
Definition: forwards.h:170
Metafunction for the determination of whether a mesh is 1d.
Definition: forwards.h:72
Internal key for storing the interface area of a box associated with an edge.
Definition: forwards.h:173
A helper class to raise compile time errors.
Definition: forwards.h:93
Convenience functions for returning the current version of ViennaSHE.