ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
assemble_common.hpp File Reference

Common routines for the assembly of SHE equations. More...

#include "viennagrid/mesh/mesh.hpp"
#include "viennagrid/algorithm/norm.hpp"
#include "viennagrid/algorithm/volume.hpp"
#include "viennagrid/algorithm/voronoi.hpp"
#include "viennashe/config.hpp"
#include "viennashe/math/spherical_harmonics.hpp"
#include "viennashe/math/integrator.hpp"
#include "viennashe/physics/constants.hpp"
#include "viennashe/physics/dispersion.hpp"
#include "viennashe/physics/physics.hpp"
#include "viennashe/she/harmonics_coupling.hpp"
#include "viennashe/util/block_matrix_writer.hpp"
#include "viennashe/util/misc.hpp"
#include "viennashe/she/exception.hpp"
#include "viennashe/log/log.hpp"
#include "viennashe/she/log_keys.h"

Go to the source code of this file.

Classes

class  viennashe::she::force_on_facet_accessor
 

Namespaces

namespace  viennashe
 The main ViennaSHE namespace. All functionality resides inside this namespace.
 
namespace  viennashe::she
 
namespace  viennashe::she::detail
 

Functions

template<typename PotentialAccessorType , typename ConfigType , typename TagType >
std::vector< long > viennashe::she::detail::get_potential_indices (PotentialAccessorType const &potential_index, viennagrid::element< TagType, ConfigType > const &elem)
 
template<typename PotentialAccessorType , typename ConfigType >
std::vector< long > viennashe::she::detail::get_potential_indices (PotentialAccessorType const &potential_index, viennagrid::element< viennagrid::vertex_tag, ConfigType > const &elem)
 
template<typename T >
bool viennashe::she::detail::is_odd_assembly (T const &, T const &)
 
template<typename T , typename U >
bool viennashe::she::detail::is_odd_assembly (T const &, U const &)
 
template<typename MeshT , typename CellT >
double viennashe::she::detail::cell_connection_length (MeshT const &, CellT const &, CellT const &)
 Static dispatcher for computing the connection between two cells adjacent to a facet. Argument is not a facet, so return an arbitrary value. More...
 
template<typename MeshT , typename FacetT , typename CellT >
double viennashe::she::detail::cell_connection_length (MeshT const &mesh, FacetT const &facet, CellT const &)
 Static dispatcher for computing the connection between two cells adjacent to a facet. More...
 
template<typename DeviceType >
bool viennashe::she::detail::has_contact_potential (DeviceType const &device, typename viennagrid::result_of::cell< typename DeviceType::mesh_type >::type const &c)
 
template<typename DeviceType , typename ElementType >
bool viennashe::she::detail::has_contact_potential (DeviceType const &, ElementType const &)
 
template<typename DispersionRelation >
double viennashe::she::integral_Z_over_hk (double energy_minus, double energy_plus, DispersionRelation const &dispersion)
 Computes \int_a^b Z/(hbar * k) dE, where a and b are the energy boundaries, Z is the density of states and hbar * k is the momentum. More...
 
template<typename MatrixType , typename CellType , typename PolarityTag >
MatrixType viennashe::she::coupling_matrix_in_direction_impl (MatrixType const &m1, MatrixType const &m2, MatrixType const &m3, CellType const &c1, CellType const &c2, PolarityTag const &polarity, viennagrid::cartesian_cs< 1 >)
 Returns dot(M, n), where M=(m1, m2, m3) is the vector of coupling matrices, and n = v2 - v1 is the directional vector (i.e. normal vector on box). One spatial dimension. More...
 
template<typename MatrixType , typename CellType , typename PolarityTag >
MatrixType viennashe::she::coupling_matrix_in_direction_impl (MatrixType const &m1, MatrixType const &m2, MatrixType const &m3, CellType const &c1, CellType const &c2, PolarityTag const &polarity, viennagrid::cartesian_cs< 2 >)
 Returns dot(M, n), where M=(m1, m2, m3) is the vector of coupling matrices, and n = v2 - v1 is the directional vector (i.e. normal vector on box). Two spatial dimensions. More...
 
template<typename MatrixType , typename CellType , typename PolarityTag >
MatrixType viennashe::she::coupling_matrix_in_direction_impl (MatrixType const &m1, MatrixType const &m2, MatrixType const &m3, CellType const &c1, CellType const &c2, PolarityTag const &polarity, viennagrid::cartesian_cs< 3 >)
 Returns dot(M, n), where M=(m1, m2, m3) is the vector of coupling matrices, and n = v2 - v1 is the directional vector (i.e. normal vector on box). Three spatial dimensions. More...
 
template<typename MatrixType , typename VertexType , typename PolarityTag >
MatrixType viennashe::she::coupling_matrix_in_direction (MatrixType const &m1, MatrixType const &m2, MatrixType const &m3, VertexType const &v1, VertexType const &v2, PolarityTag const &polarity)
 Returns dot(M, n), where M=(m1, m2, m3) is the vector of coupling matrices, and n = v2 - v1 is the directional vector (i.e. normal vector on box) More...
 
template<typename MatrixType , typename VectorType , typename IteratorType >
void viennashe::she::write_boundary (VectorType &rhs, std::size_t row_start, double prefactor, MatrixType const &coupling_matrix, IteratorType row_iter)
 Write Dirichlet boundary conditions to right hand side. More...
 
template<typename DeviceType , typename SHEQuantity , typename FacetType >
double viennashe::she::lower_kinetic_energy_at_facet (DeviceType const &device, SHEQuantity const &quan, FacetType const &facet, std::size_t index_H)
 Returns the lower kinetic energy for the discretization box associated with the edge 'edge'. More...
 
template<typename DeviceType , typename SHEQuantity , typename FacetType >
double viennashe::she::upper_kinetic_energy_at_facet (DeviceType const &device, SHEQuantity const &quan, FacetType const &facet, std::size_t index_H)
 Returns the upper kinetic energy of the discretization box for the edge 'edge'. More...
 
template<typename SHEQuantity , typename ElementType >
double viennashe::she::box_height (SHEQuantity const &quan, ElementType const &elem, std::size_t index_H)
 Returns the height of the control box with respect to energy at the provided element (vertex or edge) and energy. More...
 
template<typename SHEQuantity , typename CellFacetType >
double viennashe::she::averaged_density_of_states (SHEQuantity const &quan, viennashe::config::dispersion_relation_type const &dispersion, CellFacetType const &cell_facet, std::size_t index_H)
 Returns the density of states around a vertex or an edge at total energy specified by index_H. Some averaging is applied near the band edge. More...
 
template<typename SHEQuantity , typename CellFacetType >
double viennashe::she::integral_v (SHEQuantity const &quan, viennashe::config::dispersion_relation_type const &dispersion, CellFacetType const &cell_facet, std::size_t index_H)
 Computes \int v dH using a Simpson rule, where v is velocity. More...
 
template<typename SHEQuantity , typename CellFacetType >
double viennashe::she::integral_vZ (SHEQuantity const &quan, viennashe::config::dispersion_relation_type const &dispersion, CellFacetType const &cell_facet, std::size_t index_H)
 Computes \int v Z dH using a Simpson rule, where v is velocity and Z is the density of states. More...
 
template<typename SHEQuantity , typename CellType >
double viennashe::she::averaged_kinetic_energy (SHEQuantity const &quan, CellType const &c, std::size_t index_H)
 Returns the averaged kinetic energy in the box centered at a vertex v with total energy index index_H. More...
 

Detailed Description

Common routines for the assembly of SHE equations.

Definition in file assemble_common.hpp.