ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
viennashe Namespace Reference

The main ViennaSHE namespace. All functionality resides inside this namespace. More...

Namespaces

namespace  detail
 Namespace for implementation details. Typically not of interest for the library user.
 
namespace  hde
 The namespace for the heat diffusion equation.
 
namespace  io
 Namespace for all (file-)IO specific code

 
namespace  log
 Namespace holding the logging facility.
 
namespace  materials
 Namespace containing a small materials library.
 
namespace  math
 Namespace for all math specific code

 
namespace  models
 Namespace containing everything models related.
 
namespace  physics
 Namespace for physics models used within ViennaSHE.
 
namespace  quantity
 Holds a function per quantity, which returns the name of the respective quantity as std::string.

 
namespace  she
 
namespace  solvers
 Namespace containing a variety of different linear solvers.
 
namespace  testing
 
namespace  util
 A collection of utilities used within ViennaSHE.
 

Classes

class  assembly_not_implemented_exception
 Exception thrown in the case that an equation assembler cannot be found. More...
 
class  boundary_potential_accessor
 Accessor for obtaining the Dirichlet boundary condition for the Poisson equation in the device (contact-potential plus built-in potential) More...
 
struct  box_volume_key
 Internal key for storing the box volume associated with an edge or a vertex. More...
 
class  built_in_potential_accessor
 Accessor for retrieving the built-in potential in the device. More...
 
class  carrier_type_not_supported_exception
 Exception thrown in the case that any code does not support the given carrier type. More...
 
class  config
 The main SHE configuration class. To be adjusted by the user for his/her needs. More...
 
class  const_quantity
 Common representation of any quantity associated with objects of a certain type. More...
 
class  constant_accessor
 An accessor which returns a constant value independent of the object passed. More...
 
struct  contact_carrier_density_accessor
 Returns the carrier density at contacts modelled as thermal baths (used by DD and SHE) More...
 
class  contact_potential_accessor
 Accessor for obtaining the contact potential in the device. More...
 
class  current_density_wrapper
 An accessor to the current density on vertices and edges (drift diffusion only!) More...
 
class  device
 Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and higher dimensions. More...
 
class  diffusivity_accessor
 Accessor to get the diffusivity. Used in the assembly of the heat diffusion equation. More...
 
struct  dispersion_relation_ids
 Provides IDs for the dispersion relations. More...
 
class  doping_accessor
 Accessor for returning the doping (donator/acceptor doping is defined in the CTOR) More...
 
class  doping_setter
 Convenience functor for setting the doping across the device. More...
 
struct  edge_interface_area_key
 Internal key for storing the interface area of a box associated with an edge. More...
 
struct  electric_field_wrapper
 An accessor to the electric field on vertices and edges. Potential requiered. More...
 
struct  electric_flux_wrapper
 An electric flux accessor. Provides the electric flux along edges and on vertices given the electrostatic potential. More...
 
struct  enable_if
 Simple enable-if variant that uses the SFINAE pattern. More...
 
struct  enable_if< false, T >
 
struct  error_indicator
 A helper class to raise compile time errors. More...
 
class  fixed_charge_accessor
 Accessor for fixed charges. More...
 
class  invalid_boundary_condition_exception
 Exception for the case that a segment or a segment that does not belong to a mesh is encountered. More...
 
class  invalid_cell_exception
 Exception for the case that an invalid cell is encountered. More...
 
class  invalid_doping_in_device_exception
 Exception for the case that an invalid doping is encountered. More...
 
class  invalid_lattice_temperature_in_device_exception
 Exception for the case that an invalid lattice temperature is encountered. More...
 
class  invalid_segment_exception
 Exception for the case that a segment or a segment that does not belong to a mesh is encountered. More...
 
class  invalid_trap_density_exception
 Exception for the case that an invalid lattice temperature is encountered. More...
 
class  invalid_trap_energy_exception
 Exception for the case that an invalid lattice temperature is encountered. More...
 
class  invalid_value_exception
 Exception for the case that an invalid value (depends on the method called) is encountered. More...
 
class  lattice_temperature_accessor
 Returns the lattice temperature on the device. More...
 
struct  log_simulator
 Configuration class for logging the SHE simulator. More...
 
class  non_const_quantity
 
class  permittivity_accessor
 Accessor for obtaining the permittivity in the device. More...
 
class  quantity_not_found_exception
 Exception in case a (requested) quantity cannot be found. More...
 
struct  robin_boundary_coefficients
 
class  scharfetter_gummel
 Dispatcher for Scharfetter-Gummel discretization of electron and hold fluxes. More...
 
class  scharfetter_gummel_dVi
 Generic dispatcher for partial derivatives of the Scharfetter-Gummel discretization of electron and hold fluxes. More...
 
class  scharfetter_gummel_dVj
 Generic dispatcher for Scharfetter-Gummel discretization of electron and hold fluxes. More...
 
class  she_boundary_conditions_config
 The boundary condition configuration for SHE
More...
 
class  simulator
 Class for self-consistent SHE simulations. More...
 
class  solver_failed_exception
 Exception thrown in the case that an equation solver failed. More...
 
class  thermal_potential_accessor
 Returns the thermal potential in the device. More...
 
class  trap_level
 Describes a SRH trap. More...
 
class  unavailable_feature_exception
 Exception for the case that a requested feature is not available (due to configuration or due to not having an implementation yet) More...
 
class  unknown_quantity
 

Typedefs

typedef std::map< std::string, std::pair< std::size_t, std::size_t > > map_info_type
 Information on the number of unknowns per quantity. More...
 
typedef std::vector< double > energy_vector_type
 Type for storing the discrete energies. More...
 
typedef std::vector< long > she_index_vector_type
 Type for storing the unknown indices at each point in the (x, H)-space. More...
 

Enumerations

enum  equation_id {
  EQUATION_INVALID = 0 , EQUATION_POISSON_DD , EQUATION_CONTINUITY , EQUATION_SHE ,
  EQUATION_DENSITY_GRADIENT , EQUATION_POISSON_HEAT
}
 An enumeration of all equation types ViennaSHE supports. More...
 
enum  boundary_type_id {
  BOUNDARY_NONE = 0 , BOUNDARY_DIRICHLET , BOUNDARY_NEUMANN , BOUNDARY_ROBIN ,
  BOUNDARY_GENERATION_RECOMBINATION
}
 An enumeration of all boundary conditions ViennaSHE supports. More...
 
enum  material_category_id {
  MATERIAL_CONDUCTOR_ID , MATERIAL_NO_CONDUCTOR_ID , MATERIAL_SEMICONDUCTOR_ID , MATERIAL_NO_SEMICONDUCTOR_ID ,
  MATERIAL_INSULATOR_ID , MATERIAL_NO_INSULATOR_ID
}
 
enum  she_discretization_type_id { SHE_DISCRETIZATION_EVEN_ODD_ORDER_DF , SHE_DISCRETIZATION_EVEN_ODD_ORDER_GENERALIZED_DF }
 
enum  she_scaling_type_id { SHE_SCALING_KINETIC_ENERGY , SHE_SCALING_TOTAL_ENERGY }
 
enum  carrier_type_id { INVALID_TYPE = 0 , ELECTRON_TYPE_ID , HOLE_TYPE_ID }
 Enumeration type for selecting the carrier type. More...
 
enum  doping_type_id { INVALID_DOPING_TYPE = 0 , DONATOR_DOPING_TYPE_ID , ACCEPTOR_DOPING_TYPE_ID }
 Enumeration type for selecting the doping type. More...
 

Functions

template<typename DeviceType , typename MatrixType , typename VectorType >
void assemble_poisson (DeviceType const &device, viennashe::she::timestep_quantities< DeviceType > const &quantities, viennashe::config const &conf, MatrixType &A, VectorType &b)
 Assembles the potential block (i.e. the linear equations obtained from the discretization of the Poisson equation) in the Jacobian matrix. More...
 
template<typename DeviceType , typename MatrixType , typename VectorType >
void assemble_dd (DeviceType const &device, viennashe::she::timestep_quantities< DeviceType > const &quantities, viennashe::config const &conf, carrier_type_id ctype, MatrixType &A, VectorType &b)
 
template<typename DeviceType , typename MatrixType , typename VectorType >
void assemble_density_gradient (DeviceType const &device, viennashe::she::timestep_quantities< DeviceType > const &quantities, viennashe::config const &conf, carrier_type_id ctype, MatrixType &A, VectorType &b)
 Assembles the density gradient equation set for the given carrier type. More...
 
template<typename DeviceType , typename MatrixType , typename VectorType >
void assemble_heat (DeviceType const &device, viennashe::she::timestep_quantities< DeviceType > const &quantities, viennashe::config const &conf, MatrixType &A, VectorType &b)
 Assembles the heat diffusion equation (HDE) More...
 
template<typename DeviceType , typename TimeStepQuantitiesT , typename VertexT , typename MatrixType , typename VectorType >
void assemble (DeviceType const &device, TimeStepQuantitiesT &quantities, viennashe::config const &conf, viennashe::unknown_quantity< VertexT > const &quan, MatrixType &A, VectorType &b)
 Assemble a spatial quantity, where the equation is deduced from 'quan'. More...
 
template<typename DeviceType , typename VertexT >
long create_mapping (DeviceType const &device, viennashe::unknown_quantity< VertexT > &quantity, long start_index=0)
 Maps unkown indices in the system matrix to the given unknown spatial quantity. More...
 
template<typename DeviceType , typename SHEQuantity >
long create_even_mapping (DeviceType const &device, SHEQuantity &quan, viennashe::config const &conf, long unknown_offset=0)
 Distributes SHE unknown indices (dofs) over the device. More...
 
template<typename DeviceType , typename SHEQuantity >
long create_odd_mapping (DeviceType const &device, SHEQuantity &quan, viennashe::config const &conf, long unknown_offset=0)
 Distributes SHE unknown indices (dofs) over the device. More...
 
template<typename DeviceT >
map_info_type create_mapping (DeviceT const &device, viennashe::she::timestep_quantities< DeviceT > &quantities, viennashe::config const &conf)
 Creates an unkown mapping for spatial quantities. More...
 
template<typename DeviceType , typename PotentialQuantityType , typename CarrierQuantityType , typename MobilityModel , typename ContainerType >
void write_current_density_to_container (DeviceType const &device, PotentialQuantityType const &potential, CarrierQuantityType const &carrier, viennashe::carrier_type_id ctype, MobilityModel const &mobility_model, ContainerType &container)
 Convenience function for writing the electric field to a container. More...
 
template<typename DeviceT , typename CurrentDensityT >
void check_current_conservation (DeviceT const &device, CurrentDensityT const &current_on_facet)
 Checks current conservation for SHE. Writes information using log::info(). More...
 
template<typename DeviceType , typename PotentialQuantityType , typename CarrierQuantityType , typename MobilityModel >
void check_current_conservation (DeviceType const &device, viennashe::carrier_type_id ctype, PotentialQuantityType const &potential, CarrierQuantityType const &carrier, MobilityModel const &mobility_model)
 
template<typename DeviceType , typename PotentialAccessor , typename ContainerType >
void write_electric_field_to_container (DeviceType const &device, PotentialAccessor const &potential, ContainerType &container)
 Convenience function for writing the electric field to a container. More...
 
template<typename DeviceType , typename PotentialAccessor , typename ContainerType >
void write_potential_to_container (DeviceType const &device, PotentialAccessor const &pot, ContainerType &container)
 Writes the provided potential to the container provided. More...
 
template<typename DeviceT , typename CurrentAccessorT , typename SegmentT >
double get_terminal_current (DeviceT const &device, CurrentAccessorT const &current_accessor, SegmentT const &semiconductor, SegmentT const &terminal)
 Returns the terminal current for a number of given vertices. Considers carrier flux and displacement currents. More...
 
template<typename DeviceT , typename T1 , typename T2 , typename SegmentT >
double get_terminal_current (DeviceT const &device, viennashe::config const &conf, viennashe::she::unknown_she_quantity< T1, T2 > const &quan, SegmentT const &semiconductor, SegmentT const &terminal)
 Returns the the terminal current for a given contact segment. Considers carrier flux and displacement currents. More...
 
template<typename DeviceType , typename PotentialAccessor , typename AccessorTypeCarrier , typename MobilityModel , typename SegmentType >
double get_terminal_current (DeviceType const &device, viennashe::carrier_type_id ctype, PotentialAccessor const &potential, AccessorTypeCarrier const &carrier, MobilityModel const &mobility_model, SegmentType const &semi, SegmentType const &conductor)
 Returns the current (drift diffusion) from a semiconductor into a conductor segment. More...
 
template<typename DeviceType , typename MacroscopicQuantityAccessor , typename ContainerType >
void write_macroscopic_quantity_to_container (DeviceType const &device, MacroscopicQuantityAccessor const &quantity, ContainerType &quantity_container)
 Writes the provided macroscopic quantity to the container provided. More...
 
template<typename DeviceT , typename UnknownQuantityListT >
void transfer_quantity_to_device (DeviceT &device, UnknownQuantityListT const &quantities, viennashe::config const &conf)
 
template<typename UnknownQuantityT , typename VectorType >
double get_relative_update_norm (UnknownQuantityT const &spatial_quan, VectorType const &x)
 Returns the relative update norm (L_2 ; realtive to the current value). Except for the potential. More...
 
template<typename DeviceT , typename CellT , typename FacetT >
double get_relative_update_norm (DeviceT const &device, viennashe::she::unknown_she_quantity< CellT, FacetT > const &quan, viennashe::unknown_quantity< CellT > const &spatial_quan, viennashe::config const &conf)
 Returns the relative update norm for SHE based carrier concentrations (L_2 norm). More...
 
template<typename DeviceT , typename TimeStepQuantitiesT , typename VectorT >
double get_potential_update_norm_newton (DeviceT const &device, TimeStepQuantitiesT const &unknown_quantities, VectorT const &x)
 Potential update calculator for Newton. More...
 
template<typename DeviceT , typename UnknownQuantityT , typename VectorT >
double get_total_update_norm_newton (DeviceT const &device, UnknownQuantityT const &unknown_quantities_, VectorT const &x)
 Total update calculator for Newton. Needs to be called before update_quantities! More...
 
template<typename DeviceT , typename TimeStepQuantitiesT , typename VectorType >
void update_quantities (DeviceT const &device, viennashe::config const &conf, TimeStepQuantitiesT &unknown_quantities, VectorType const &x)
 Updater for Newton. More...
 
template<typename DeviceT , typename CellT , typename FacetT , typename VectorType >
void update_quantity (DeviceT const &device, viennashe::she::unknown_she_quantity< CellT, FacetT > &quan, viennashe::unknown_quantity< CellT > &spatial_quan, viennashe::config const &conf, VectorType const &x, bool force_no_damping=false)
 Updater for SHE quantities when using Gummel iteration. More...
 
template<typename DeviceT , typename VertexT , typename VectorType >
void update_quantity (DeviceT const &device, viennashe::unknown_quantity< VertexT > &unknown_quantity, double alpha, VectorType const &x)
 Updater for spatial unknowns (i.e. defined in x-space) when using Gummel iteration. More...
 
template<typename DeviceT , typename VertexT , typename VectorType >
void update_quantity (DeviceT const &device, viennashe::unknown_quantity< VertexT > &unknown_quantity, viennashe::config const &conf, VectorType const &x, bool force_no_damping=false)
 Updater for spatial unknowns (i.e. defined in x-space) when using Gummel iteration. More...
 
template<typename DeviceType >
void setup_doping_on_vertices (DeviceType &device, viennashe::carrier_type_id ctype)
 Sets up donator or acceptor doping on vertices. If doping is provided on cells, it is interpolated accordingly. More...
 
template<typename DeviceType >
void setup_doping_on_vertices (DeviceType &device)
 Sets up donator and acceptor doping on vertices. If doping is provided on cells, it is interpolated accordingly. More...
 
std::ostream & operator<< (std::ostream &os, viennashe::trap_level const &rhs)
 Convenience function for outputting a trap level. More...
 
std::size_t major_version ()
 Returns the current ViennaSHE major version as std::size_t
More...
 
std::size_t minor_version ()
 Returns the current ViennaSHE minor version as std::size_t
More...
 
std::size_t revision_number ()
 Returns the current ViennaSHE revision number as std::size_t
More...
 
bool calibrated ()
 Specifies whether the simulator is calibrated for some particular purpose. More...
 
std::string version ()
 Returns the current ViennaSHE version string
More...
 
std::string preamble ()
 Prints the ViennaSHE preamble (header). Used in all the examples as well as the standalone-application. More...
 

Detailed Description

The main ViennaSHE namespace. All functionality resides inside this namespace.

Typedef Documentation

◆ energy_vector_type

typedef std::vector<double> viennashe::energy_vector_type

Type for storing the discrete energies.

Definition at line 178 of file forwards.h.

◆ map_info_type

typedef std::map<std::string, std::pair<std::size_t, std::size_t> > viennashe::map_info_type

Information on the number of unknowns per quantity.

First member of pair denotes the number of unknowns defined on vertices Second member of pair denotes the number of unknowns defined on edges

Definition at line 109 of file forwards.h.

◆ she_index_vector_type

typedef std::vector<long> viennashe::she_index_vector_type

Type for storing the unknown indices at each point in the (x, H)-space.

Definition at line 181 of file forwards.h.

Enumeration Type Documentation

◆ boundary_type_id

An enumeration of all boundary conditions ViennaSHE supports.

Enumerator
BOUNDARY_NONE 
BOUNDARY_DIRICHLET 
BOUNDARY_NEUMANN 
BOUNDARY_ROBIN 
BOUNDARY_GENERATION_RECOMBINATION 

Definition at line 124 of file forwards.h.

◆ carrier_type_id

Enumeration type for selecting the carrier type.

Enumerator
INVALID_TYPE 
ELECTRON_TYPE_ID 
HOLE_TYPE_ID 

Definition at line 184 of file forwards.h.

◆ doping_type_id

Enumeration type for selecting the doping type.

Enumerator
INVALID_DOPING_TYPE 
DONATOR_DOPING_TYPE_ID 
ACCEPTOR_DOPING_TYPE_ID 

Definition at line 192 of file forwards.h.

◆ equation_id

An enumeration of all equation types ViennaSHE supports.

Enumerator
EQUATION_INVALID 
EQUATION_POISSON_DD 
EQUATION_CONTINUITY 
EQUATION_SHE 
EQUATION_DENSITY_GRADIENT 
EQUATION_POISSON_HEAT 

Definition at line 113 of file forwards.h.

◆ material_category_id

Enumerator
MATERIAL_CONDUCTOR_ID 
MATERIAL_NO_CONDUCTOR_ID 
MATERIAL_SEMICONDUCTOR_ID 
MATERIAL_NO_SEMICONDUCTOR_ID 
MATERIAL_INSULATOR_ID 
MATERIAL_NO_INSULATOR_ID 

Definition at line 133 of file forwards.h.

◆ she_discretization_type_id

Enumerator
SHE_DISCRETIZATION_EVEN_ODD_ORDER_DF 
SHE_DISCRETIZATION_EVEN_ODD_ORDER_GENERALIZED_DF 

Definition at line 143 of file forwards.h.

◆ she_scaling_type_id

Enumerator
SHE_SCALING_KINETIC_ENERGY 
SHE_SCALING_TOTAL_ENERGY 

Definition at line 149 of file forwards.h.

Function Documentation

◆ assemble()

template<typename DeviceType , typename TimeStepQuantitiesT , typename VertexT , typename MatrixType , typename VectorType >
void viennashe::assemble ( DeviceType const &  device,
TimeStepQuantitiesT &  quantities,
viennashe::config const &  conf,
viennashe::unknown_quantity< VertexT > const &  quan,
MatrixType &  A,
VectorType &  b 
)

Assemble a spatial quantity, where the equation is deduced from 'quan'.

Parameters
deviceThe device ...
quantitiesA list of required and known quantities
confThe simulator configuration
quanThe unkown quantity
AThe system matrix
bThe right hand side
Exceptions
Throwsan assembly_not_implemented_exception if no assembly routine for quan can be found.

Definition at line 830 of file assemble.hpp.

◆ assemble_dd()

template<typename DeviceType , typename MatrixType , typename VectorType >
void viennashe::assemble_dd ( DeviceType const &  device,
viennashe::she::timestep_quantities< DeviceType > const &  quantities,
viennashe::config const &  conf,
carrier_type_id  ctype,
MatrixType &  A,
VectorType &  b 
)

Assembles the Drift Diffusion (DD) equation set (div J = +-q R) for the given carrier type

Parameters
deviceThe device
quantitiesThe unkown quantities
confThe simulator configuration
ctypeThe carrier type (normally electrons or holes)
AThe system matrix
bThe right hand side (RHS)

Definition at line 353 of file assemble.hpp.

◆ assemble_density_gradient()

template<typename DeviceType , typename MatrixType , typename VectorType >
void viennashe::assemble_density_gradient ( DeviceType const &  device,
viennashe::she::timestep_quantities< DeviceType > const &  quantities,
viennashe::config const &  conf,
carrier_type_id  ctype,
MatrixType &  A,
VectorType &  b 
)

Assembles the density gradient equation set for the given carrier type.

Parameters
deviceThe device
quantitiesThe unkown quantities and required known ones
confThe simulator configruation
ctypeThe carrier type for which to assemble
AThe system matrix
bThe right hand side (RHS)

Definition at line 559 of file assemble.hpp.

◆ assemble_heat()

template<typename DeviceType , typename MatrixType , typename VectorType >
void viennashe::assemble_heat ( DeviceType const &  device,
viennashe::she::timestep_quantities< DeviceType > const &  quantities,
viennashe::config const &  conf,
MatrixType &  A,
VectorType &  b 
)

Assembles the heat diffusion equation (HDE)

Parameters
deviceThe device
quantitiesThe unknown (lattice temperature) and required known quantities
confThe simulator configuration
AThe system matrix
bThe right hand side

Definition at line 705 of file assemble.hpp.

◆ assemble_poisson()

template<typename DeviceType , typename MatrixType , typename VectorType >
void viennashe::assemble_poisson ( DeviceType const &  device,
viennashe::she::timestep_quantities< DeviceType > const &  quantities,
viennashe::config const &  conf,
MatrixType &  A,
VectorType &  b 
)

Assembles the potential block (i.e. the linear equations obtained from the discretization of the Poisson equation) in the Jacobian matrix.

Note that this routine is used both for a Newton method and for a Gummel/Picard-iteration method for the solution of the nonlinear system of drift-diffusion equations.

Template Parameters
DeviceTypeThe ViennaSHE device type
MatrixTypeThe matrix type
VectorTypeThe vector type
Parameters
deviceThe device to be simulated
quantitiesQuantity descriptors and accessors
confThe simulator configuration
AThe system matrix
bThe right hand side

Definition at line 165 of file assemble.hpp.

◆ calibrated()

bool viennashe::calibrated ( )
inline

Specifies whether the simulator is calibrated for some particular purpose.

Note that a simulator requires calibration in order to yield predictive results!

Definition at line 50 of file version.hpp.

◆ check_current_conservation() [1/2]

template<typename DeviceT , typename CurrentDensityT >
void viennashe::check_current_conservation ( DeviceT const &  device,
CurrentDensityT const &  current_on_facet 
)

Checks current conservation for SHE. Writes information using log::info().

Parameters
deviceThe device
current_on_facetA function object returning the normal components of the current on each facet

Definition at line 255 of file current_density.hpp.

◆ check_current_conservation() [2/2]

template<typename DeviceType , typename PotentialQuantityType , typename CarrierQuantityType , typename MobilityModel >
void viennashe::check_current_conservation ( DeviceType const &  device,
viennashe::carrier_type_id  ctype,
PotentialQuantityType const &  potential,
CarrierQuantityType const &  carrier,
MobilityModel const &  mobility_model 
)

Definition at line 323 of file current_density.hpp.

◆ create_even_mapping()

template<typename DeviceType , typename SHEQuantity >
long viennashe::create_even_mapping ( DeviceType const &  device,
SHEQuantity &  quan,
viennashe::config const &  conf,
long  unknown_offset = 0 
)

Distributes SHE unknown indices (dofs) over the device.

Parameters
deviceThe device (including a ViennaGrid mesh) on which simulation is carried out
quanThe quantity for which to create the mapping
confThe simulator configuration
unknown_offsetThe first index to be assigned (allows for offsets); Nonzero value if e.g. the potential is also considered within Newton iteration

Definition at line 204 of file mapping.hpp.

◆ create_mapping() [1/2]

template<typename DeviceT >
map_info_type viennashe::create_mapping ( DeviceT const &  device,
viennashe::she::timestep_quantities< DeviceT > &  quantities,
viennashe::config const &  conf 
)

Creates an unkown mapping for spatial quantities.

Parameters
deviceThe device on which the quantities are defined
quantitiesA list of quantities
confThe simulator configuration
Returns
Information on the number of unknowns per quantity

Definition at line 338 of file mapping.hpp.

◆ create_mapping() [2/2]

template<typename DeviceType , typename VertexT >
long viennashe::create_mapping ( DeviceType const &  device,
viennashe::unknown_quantity< VertexT > &  quantity,
long  start_index = 0 
)

Maps unkown indices in the system matrix to the given unknown spatial quantity.

Parameters
deviceThe device on which the quantity is defined
quantityThe unkown quantity
start_indexThe index offset, usefull if you have more than one unkown quantity
Returns
The first mapping index

Definition at line 53 of file mapping.hpp.

◆ create_odd_mapping()

template<typename DeviceType , typename SHEQuantity >
long viennashe::create_odd_mapping ( DeviceType const &  device,
SHEQuantity &  quan,
viennashe::config const &  conf,
long  unknown_offset = 0 
)

Distributes SHE unknown indices (dofs) over the device.

Parameters
deviceThe device (including a ViennaGrid mesh) on which simulation is carried out
quanThe quantity for which to create the mapping
confThe simulator configuration
unknown_offsetThe first index to be assigned (allows for offsets)

Definition at line 284 of file mapping.hpp.

◆ get_potential_update_norm_newton()

template<typename DeviceT , typename TimeStepQuantitiesT , typename VectorT >
double viennashe::get_potential_update_norm_newton ( DeviceT const &  device,
TimeStepQuantitiesT const &  unknown_quantities,
VectorT const &  x 
)

Potential update calculator for Newton.

Parameters
deviceThe device
unknown_quantitiesThe unkown quantity to be processed
xThe update vector for all quantities

Definition at line 331 of file simulator.hpp.

◆ get_relative_update_norm() [1/2]

template<typename DeviceT , typename CellT , typename FacetT >
double viennashe::get_relative_update_norm ( DeviceT const &  device,
viennashe::she::unknown_she_quantity< CellT, FacetT > const &  quan,
viennashe::unknown_quantity< CellT > const &  spatial_quan,
viennashe::config const &  conf 
)

Returns the relative update norm for SHE based carrier concentrations (L_2 norm).

Parameters
deviceThe device
quanThe unknown SHE quantity
spatial_quanThe spatial quantity to update (e.g. n or p)
confThe simulator configuration
Returns
An relative update norm for SHE based spatial quantities

Definition at line 286 of file simulator.hpp.

◆ get_relative_update_norm() [2/2]

template<typename UnknownQuantityT , typename VectorType >
double viennashe::get_relative_update_norm ( UnknownQuantityT const &  spatial_quan,
VectorType const &  x 
)

Returns the relative update norm (L_2 ; realtive to the current value). Except for the potential.

Parameters
spatial_quanThe spatial quantity
xThe solution vector
Returns
The relative update norm (L_2)

Definition at line 257 of file simulator.hpp.

◆ get_terminal_current() [1/3]

template<typename DeviceT , typename CurrentAccessorT , typename SegmentT >
double viennashe::get_terminal_current ( DeviceT const &  device,
CurrentAccessorT const &  current_accessor,
SegmentT const &  semiconductor,
SegmentT const &  terminal 
)

Returns the terminal current for a number of given vertices. Considers carrier flux and displacement currents.

Parameters
deviceThe device
current_accessorAn accessor for the carrier current density
terminalThe terminal segment from which the current should be extracted
semiconductorThe semiconductor segment to which the current is flowing
Returns
The current in Ampere

Definition at line 48 of file terminal_current.hpp.

◆ get_terminal_current() [2/3]

template<typename DeviceT , typename T1 , typename T2 , typename SegmentT >
double viennashe::get_terminal_current ( DeviceT const &  device,
viennashe::config const &  conf,
viennashe::she::unknown_she_quantity< T1, T2 > const &  quan,
SegmentT const &  semiconductor,
SegmentT const &  terminal 
)

Returns the the terminal current for a given contact segment. Considers carrier flux and displacement currents.

Parameters
deviceThe device
confThe simulator configuration
quanThe quantity from which the current should be extracted (here: electron or hole distribution function)
terminalThe terminal segment from which the current should be extracted
semiconductorThe semiconductor segment to which the current is flowing
Returns
The current in Ampere

Definition at line 117 of file terminal_current.hpp.

◆ get_terminal_current() [3/3]

template<typename DeviceType , typename PotentialAccessor , typename AccessorTypeCarrier , typename MobilityModel , typename SegmentType >
double viennashe::get_terminal_current ( DeviceType const &  device,
viennashe::carrier_type_id  ctype,
PotentialAccessor const &  potential,
AccessorTypeCarrier const &  carrier,
MobilityModel const &  mobility_model,
SegmentType const &  semi,
SegmentType const &  conductor 
)

Returns the current (drift diffusion) from a semiconductor into a conductor segment.

Parameters
deviceThe device
ctypeElectron current or hole current
potentialAn accessor to the elec. potential
carrierAn accessor to the carrier density (must match with ctype!)
mobility_modelThe mobility model (just an accessor to the mobility)
semiThe semiconductor segment
conductorThe conductor segment adjacent to the semiconductor
Returns
The current in Ampere

Definition at line 147 of file terminal_current.hpp.

◆ get_total_update_norm_newton()

template<typename DeviceT , typename UnknownQuantityT , typename VectorT >
double viennashe::get_total_update_norm_newton ( DeviceT const &  device,
UnknownQuantityT const &  unknown_quantities_,
VectorT const &  x 
)

Total update calculator for Newton. Needs to be called before update_quantities!

Parameters
deviceThe device
unknown_quantities_The unkown quantity to be processed
xThe update to the quantity

Definition at line 374 of file simulator.hpp.

◆ major_version()

std::size_t viennashe::major_version ( )
inline

Returns the current ViennaSHE major version as std::size_t

Definition at line 29 of file version.hpp.

◆ minor_version()

std::size_t viennashe::minor_version ( )
inline

Returns the current ViennaSHE minor version as std::size_t

Definition at line 35 of file version.hpp.

◆ operator<<()

std::ostream & viennashe::operator<< ( std::ostream &  os,
viennashe::trap_level const &  rhs 
)
inline

Convenience function for outputting a trap level.

Definition at line 91 of file trap_level.hpp.

◆ preamble()

std::string viennashe::preamble ( )
inline

Prints the ViennaSHE preamble (header). Used in all the examples as well as the standalone-application.

Definition at line 63 of file version.hpp.

◆ revision_number()

std::size_t viennashe::revision_number ( )
inline

Returns the current ViennaSHE revision number as std::size_t

Definition at line 41 of file version.hpp.

◆ setup_doping_on_vertices() [1/2]

template<typename DeviceType >
void viennashe::setup_doping_on_vertices ( DeviceType &  device)

Sets up donator and acceptor doping on vertices. If doping is provided on cells, it is interpolated accordingly.

Template Parameters
DeviceTypeThe device type (cf. device.hpp)
Parameters
deviceA non-const reference to the device

Definition at line 206 of file simulator_setup.hpp.

◆ setup_doping_on_vertices() [2/2]

template<typename DeviceType >
void viennashe::setup_doping_on_vertices ( DeviceType &  device,
viennashe::carrier_type_id  ctype 
)

Sets up donator or acceptor doping on vertices. If doping is provided on cells, it is interpolated accordingly.

Template Parameters
DeviceTypeThe device type (cf. device.hpp)
Parameters
deviceA non-const reference to the device
ctypeThe carrier type identifier (cf. forwards.h)

Definition at line 169 of file simulator_setup.hpp.

◆ transfer_quantity_to_device()

template<typename DeviceT , typename UnknownQuantityListT >
void viennashe::transfer_quantity_to_device ( DeviceT &  device,
UnknownQuantityListT const &  quantities,
viennashe::config const &  conf 
)

Definition at line 223 of file simulator.hpp.

◆ update_quantities()

template<typename DeviceT , typename TimeStepQuantitiesT , typename VectorType >
void viennashe::update_quantities ( DeviceT const &  device,
viennashe::config const &  conf,
TimeStepQuantitiesT &  unknown_quantities,
VectorType const &  x 
)

Updater for Newton.

Parameters
deviceThe device
confThe simulator configuration (cf. config.hpp)
unknown_quantitiesThe unkown quantity to be updated
xThe vector containing the updates to the quantity

Definition at line 395 of file simulator.hpp.

◆ update_quantity() [1/3]

template<typename DeviceT , typename CellT , typename FacetT , typename VectorType >
void viennashe::update_quantity ( DeviceT const &  device,
viennashe::she::unknown_she_quantity< CellT, FacetT > &  quan,
viennashe::unknown_quantity< CellT > &  spatial_quan,
viennashe::config const &  conf,
VectorType const &  x,
bool  force_no_damping = false 
)

Updater for SHE quantities when using Gummel iteration.

Parameters
deviceThe device
quanThe SHE unkown quantity to be updated
spatial_quanThe spatial, eg. n or p or potential, unkown quantity
confThe simulator configuration (cf. config.hpp)
xThe update to the SHE quantity
force_no_dampingIf true no damping will be applied, that is d = 1.0

Definition at line 524 of file simulator.hpp.

◆ update_quantity() [2/3]

template<typename DeviceT , typename VertexT , typename VectorType >
void viennashe::update_quantity ( DeviceT const &  device,
viennashe::unknown_quantity< VertexT > &  unknown_quantity,
double  alpha,
VectorType const &  x 
)

Updater for spatial unknowns (i.e. defined in x-space) when using Gummel iteration.

Parameters
deviceThe device
unknown_quantityThe unkown quantity to be updated
alphaThe damping, bounded by (0;1]
xThe update to the quantity

Definition at line 607 of file simulator.hpp.

◆ update_quantity() [3/3]

template<typename DeviceT , typename VertexT , typename VectorType >
void viennashe::update_quantity ( DeviceT const &  device,
viennashe::unknown_quantity< VertexT > &  unknown_quantity,
viennashe::config const &  conf,
VectorType const &  x,
bool  force_no_damping = false 
)

Updater for spatial unknowns (i.e. defined in x-space) when using Gummel iteration.

Parameters
deviceThe device
unknown_quantityThe unkown quantity to be updated
confThe simulator configuration (cf. config.hpp)
xThe update to the quantity
force_no_dampingIf true no damping will be applied, that is d = 1.0

Definition at line 660 of file simulator.hpp.

◆ version()

std::string viennashe::version ( )
inline

Returns the current ViennaSHE version string

Definition at line 53 of file version.hpp.

◆ write_current_density_to_container()

template<typename DeviceType , typename PotentialQuantityType , typename CarrierQuantityType , typename MobilityModel , typename ContainerType >
void viennashe::write_current_density_to_container ( DeviceType const &  device,
PotentialQuantityType const &  potential,
CarrierQuantityType const &  carrier,
viennashe::carrier_type_id  ctype,
MobilityModel const &  mobility_model,
ContainerType &  container 
)

Convenience function for writing the electric field to a container.

Parameters
deviceThe device (includes a ViennaGrid mesh) on which simulation is carried out
potentialAn accessor to the electrostatic potential
carrierThe carrier quantity (n or p)
ctypeThe carrier type identifier
mobility_modelThe mobility model functor
containerA reference to the container, which is going to be filled with values, ie. std::vector

Definition at line 236 of file current_density.hpp.

◆ write_electric_field_to_container()

template<typename DeviceType , typename PotentialAccessor , typename ContainerType >
void viennashe::write_electric_field_to_container ( DeviceType const &  device,
PotentialAccessor const &  potential,
ContainerType &  container 
)

Convenience function for writing the electric field to a container.

Parameters
deviceThe device (includes a ViennaGrid mesh) on which simulation is carried out
potentialA quantity accessor to the potential
containerThe container to be filled with values
Template Parameters
ContainerTypeA container type, for example: std::vector or std::deque

Definition at line 162 of file electric_field.hpp.

◆ write_macroscopic_quantity_to_container()

template<typename DeviceType , typename MacroscopicQuantityAccessor , typename ContainerType >
void viennashe::write_macroscopic_quantity_to_container ( DeviceType const &  device,
MacroscopicQuantityAccessor const &  quantity,
ContainerType &  quantity_container 
)

Writes the provided macroscopic quantity to the container provided.

Parameters
deviceThe device (includes a ViennaGrid mesh) on which simulation is carried out
quantityAn accessor for the macroscopic quantity
quantity_containerThe container to be filled with values
Template Parameters
ContainerTypeA container type, for example: std::vector or std::deque

Definition at line 46 of file macroscopic.hpp.

◆ write_potential_to_container()

template<typename DeviceType , typename PotentialAccessor , typename ContainerType >
void viennashe::write_potential_to_container ( DeviceType const &  device,
PotentialAccessor const &  pot,
ContainerType &  container 
)

Writes the provided potential to the container provided.

Parameters
deviceThe device (includes a ViennaGrid mesh) on which simulation is carried out
potAn accessor for the potential
containerThe container to be filled with values
Template Parameters
ContainerTypeA container type, for example: std::vector or std::deque

Definition at line 40 of file potential.hpp.