17  #pragma warning(disable:4503) 
   28#include "viennagrid/config/default_configs.hpp" 
   67template <
typename DeviceType>
 
   70  typedef typename DeviceType::segment_type          SegmentType;
 
   73  SegmentType 
const & gate_contact   = device.segment(1);
 
   74  SegmentType 
const & source_contact = device.segment(2);
 
   75  SegmentType 
const & gate_oxide     = device.segment(3);
 
   76  SegmentType 
const & drain_contact  = device.segment(4);
 
   77  SegmentType 
const & source         = device.segment(5);
 
   78  SegmentType 
const & drain          = device.segment(6);
 
   79  SegmentType 
const & body           = device.segment(7);
 
   80  SegmentType 
const & body_contact   = device.segment(8);
 
   83  std::cout << 
"* init_device(): Setting materials..." << std::endl;
 
  101  std::cout << 
"* init_device(): Setting doping..." << std::endl;
 
  102  device.set_doping_n(1e24, source);
 
  103  device.set_doping_p(1e8,  source);
 
  105  device.set_doping_n(1e24, drain);
 
  106  device.set_doping_p(1e8,  drain);
 
  108  device.set_doping_n(1e17, body);
 
  109  device.set_doping_p(1e15, body);
 
  115  device.set_contact_potential(0.8, gate_contact);
 
  116  device.set_contact_potential(0.0, source_contact);
 
  117  device.set_contact_potential(1.0, drain_contact);
 
  118  device.set_contact_potential(0.0, body_contact);
 
  138  typedef DeviceType::segment_type                                SegmentType;
 
  148  std::cout << 
"* main(): Creating and scaling device..." << std::endl;
 
  150  device.load_mesh(
"../examples/data/mosfet840.mesh");
 
  157  std::cout << 
"* main(): Initializing device..." << std::endl;
 
  169  std::cout << 
"* main(): Creating DD simulator..." << std::endl;
 
  198  std::cout << 
"* main(): Launching DD simulator..." << std::endl;
 
  214  SegmentType 
const & drain_contact  = device.segment(4);
 
  215  SegmentType 
const & body           = device.segment(6);
 
  218      dd_simulator.potential(), dd_simulator.electron_density(),
 
  220      body, drain_contact ) * 1e-6 << std::endl;
 
  222      dd_simulator.potential(), dd_simulator.hole_density(),
 
  224      body, drain_contact ) * 1e-6 << std::endl;
 
  241  std::cout << 
"* main(): Setting up first-order SHE (semi-self-consistent using 40 Gummel iterations)..." << std::endl;
 
  276  std::cout << 
"* main(): Computing first-order SHE..." << std::endl;
 
  292  std::cout << 
"* main(): Writing energy distribution function from first-order SHE result..." << std::endl;
 
  294                                              she_simulator.config(),
 
  295                                              she_simulator.quantities().electron_distribution_function(),
 
  311      device, config, she_simulator.quantities().electron_distribution_function(), body, drain_contact ) * 1e-6
 
  318  std::cout << 
"* main(): Results can now be viewed with your favorite VTK viewer (e.g. ParaView)." << std::endl;
 
  319  std::cout << 
"* main(): Don't forget to scale the z-axis by about a factor of 1e12 when examining the distribution function." << std::endl;
 
  320  std::cout << std::endl;
 
  321  std::cout << 
"*********************************************************" << std::endl;
 
  322  std::cout << 
"*           ViennaSHE finished successfully             *" << std::endl;
 
  323  std::cout << 
"*********************************************************" << std::endl;
 
The main SHE configuration class. To be adjusted by the user for his/her needs.
 
long max_expansion_order() const
Returns the current maximum expansion order.
 
bool with_holes() const
Returns true if holes are considered in the simulation.
 
nonlinear_solver_config_type & nonlinear_solver()
Returns the configuration object for the nonlinear solver.
 
void set_electron_equation(equation_id equ_id)
 
linear_solver_config_type & linear_solver()
Returns the configuration object for the linear solver.
 
double energy_spacing() const
Returns the uniform energy spacing of discrete energies.
 
void set_hole_equation(equation_id equ_id)
 
bool with_electrons() const
Returns true if electrons are considered in the simulation.
 
viennashe::she::scatter_config & scattering()
Returns the configuration object for scattering.
 
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
 
ionized_impurity_scattering_parameters const & ionized_impurity() const
Returns the parameters for ionized impurity scattering. Const-version.
 
acoustic_phonon_scattering_parameters const & acoustic_phonon() const
Returns the parameters for acoustic phonon scattering. Const-version.
 
optical_phonon_scattering_parameters const & optical_phonon() const
Returns the parameters for optical phonon scattering. Const-version.
 
Class for self-consistent SHE simulations.
 
std::size_t max_iters() const
Returns the maximum number of iterative linear solver iterations.
 
std::size_t max_iters() const
Returns the maximum number of nonlinear solver iterations.
 
double damping() const
Returns the damping for the nonlinear solver.
 
Convenience header, which includes all core functionality available in ViennaSHE.
 
void init_device(DeviceType &device, double Vg_init, double Nd, double Na)
Initalizes the MOS 1D device for testing.
 
void write_quantities_to_VTK_file(viennashe::simulator< DeviceType > const &simulator_obj, std::string filename, bool include_debug_information=false)
Generic interface function for writing simulated quantities to a VTK file.
 
void write_quantity_to_VTK_file(QuantityType const &quantity, DeviceType const &device, std::string filename, std::string name_in_file="viennashe_quantity")
Generic interface function for writing a quantity to a VTK file. Automatically dispatches between ver...
 
viennashe::models::dd::mobility< DeviceType > create_constant_mobility_model(DeviceType const &device, double mu)
Returns a mobility model, which always yields the same mobility.
 
std::string hole_density()
 
std::string electron_density()
 
double get_terminal_current(DeviceT const &device, CurrentAccessorT const ¤t_accessor, SegmentT const &semiconductor, SegmentT const &terminal)
Returns the terminal current for a number of given vertices. Considers carrier flux and displacement ...
 
std::string preamble()
Prints the ViennaSHE preamble (header). Used in all the examples as well as the standalone-applicatio...
 
A class referring to hafnium dioxide.
 
A class referring to silicon and providing certain material parameters Note that this is the default ...
 
static const double q
Elementary charge.