|
| |
Nonlinear Poisson equation
The subroutine
non_linear_poisson calculates for given Fermi levels (MODULE
fermi_level) the new
potential. The value in phiV in MODULE potentials
is taken as starting value and is finally overwritten with the calculated value.
The subroutine
non_linear_poisson may only be called after call
of subroutine define_poisson_clusters. On return, no additional arrays are
allocated, so the allocation status is left unchanged.
The input variable caseC may be 'class' or 'fully',
i.e. a classical or a quantum mechanical calculation.
- If
caseC is 'class',
the Poisson equation is solved
with Thomas-Fermi densities throughout the whole device, i.e. quantum
clusters
are ignored. The nonlinear Poisson equation is solved with a
Newton method, which is capable of finding
the roots of an n-dimensional functional. Three subroutines must be provided:
-
calc_fct_newt_non_lin_pois
-
calc_grad_newt_non_lin_pois
-
newton_corr_non_lin_pois
- If
caseC is 'fully',
the Schrödinger-Poisson
equation is solved self-consistently for the given Fermi levels.
This is done
using a predictor-corrector approach (A. Trellakis et al., J. Appl.
Phys. 81, 7880 (1997)):
The eigenvalues are calculated for the given
potential (calculate_eigenstates). With the calculated eigenstates a
perturbative expression for the density (predictor density) exists, which only depends
on the potential (and the fixed Fermi levels). With this density the
nonlinear Poisson equation is calculated. This cycle is repeated until
convergence of the potential is achieved. The subroutines used by the
Newton method are:
-
calc_fct_newt_sg_pois
-
calc_grad_newt_sg_pois
-
newton_corr_sg_pois
For the
evaluation of the predictor density a potential shift is needed. So the
potential of the preceeding step is stored in potV_old in MODULE
pass_over_mod.
The actual precision in the predictor-corrector loop is delta (relative
deviation of the actual potential from the preceeding potential).
The variable
stage says how many orders of magnitude the actual precision differs from the
required precision (stored in precision_sg_poisson_pece in
MODULE
numeric_control.
The precision for
the eigensolvers Arnoldi is chosen to be
epsilon_ev_rel_to_precision (MODULE
numeric_control)
orders of
magnitude smaller than the actual precision delta.
The parameters for the
conjugate gradient method for extreme eigenvalues are chosen according to a
fixed scheme in dependence of the variable stage.
The options for the eigenvalue solvers (including convergence parameters) can
be adjusted with the keyword
$numeric_control.
|