current_poisson{ }¶
- Calling sequence
run{ current_poisson{ } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
items: \(\mathrm{maximum\;1}\)
- Dependencies
The poisson{ } must be defined.
The currents{ } must be defined.
- Functionality
When this group is defined, the system of coupled current and Poisson equations is solved self-consistently using semiclassical (bulk-material) densities of sates. The major results here are the electrostatic potential and quasi-Fermi levels.
- Example
run{ current_poisson{} } poisson{} currents{}
Nested keywords
fermi_limit¶
- Calling sequence
run{ current_poisson{ fermi_limit } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{real\;number}\)
values:
[0.0, 10.0]
default:
2.0
unit: \(\mathrm{eV}\)
- Example
run{ current_poisson{ fermi_limit = 0.5 } } poisson{} currents{}
- Functionality
This keyword defines the energy range within which the quasi-Fermi levels are allowed in the simulation, and during the runtime of related algorithms. The maximum is defined as the highest Fermi level at contacts plus the
fermi_limit
while the minimum is defined as the lowest Fermi level at contacts minus thefermi_limit
.Note
Except in case of huge band gaps and extreme photogeneration, the default value should not require any change.
At the same time, in the absence of any externally induced photogeneration, this value can be set to zero in order to stabilize the solver.
multi_stage_solve¶
- Calling sequence
run{ current_poisson{ multi_stage_solve } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
no
- Functionality
When
multi_stage_solve = yes
, then the current equation is solved in two stages. First, without recombination and generation processes. Second, with the recombination and generation processes included using the solutions from the first run as initial conditions, if any recombination or generation models are turned on.Hint
This keyword can be used to improve convergence in some cases, but may also increase the simulation runtime.
- Example
run{ current_poisson{ multi_stage_solve = yes } } poisson{} currents{}
fast_poisson¶
- Calling sequence
run{ current_poisson{ fast_poisson } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
no
- Functionality
If
fast_poisson = yes
, then Newton iterations of the Poisson solver in the within the classical current-Poisson iteration will be limited to 1. Note that enabling this setting may also influence stability of convergence or change the optimal value foralpha_fermi
. Typically,fast_poisson = yes
increases the number of iterations but significantly reduces the overall execution time.- Example
run{ current_poisson{ fast_poisson = yes } } poisson{} currents{}
system_solve¶
- Calling sequence
run{ current_poisson{ system_solve } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
no
- Functionality
Alternative new iteration method for classical current-Poisson. This Newton method may provide better convergence for some systems (but may require different values of convergence parameters). Setting
system_solve = yes
results in Fermi levels and potential being simultaneously updated as a system of unknowns during the iteration. Irrespective of its value,system_solve
always takes the value ofcurrent_repetitions
into account.- Example
run{ current_poisson{ system_solve = yes } } poisson{} currents{}
iterations¶
- Calling sequence
run{ current_poisson{ iterations } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{integer}\)
values:
{1, 2, 3, 4, ...}
default:
100
unit: \(\mathrm{-}\)
- Functionality
Maximum number of iterations for current-Poisson solver
- Example
run{ current_poisson{ iterations = 200 } } poisson{} currents{}
current_repetitions¶
- Calling sequence
run{ current_poisson{ current_repetitions } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{integer}\)
values:
{1, 2, 3, 4, ...}
default:
1
unit: \(\mathrm{-}\)
- Functionality
Number of current-density iterations. The current equations are repeatedly solved for the quasi-Fermi levels with the densities fixed. The current equation for the electrons and for the holes are solved independently with a common and fixed recombination term. For each iteration, the densities are adjusted according to the new quasi-Fermi levels of the previous iteration.
current_repetitions
defines number of these repetitions. If generation/recombination is present, using a value > 1 (e.g. 5) may stabilize the iteration and sometimes enable faster convergence (largeralpha_fermi
may also be possible then).- Example
run{ current_poisson{ current_repetitions = 5 } } poisson{} currents{}
limit_repetitions¶
- Calling sequence
run{ current_poisson{ limit_repetitions } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
no
- Functionality
If enabled, the current-density loop is exited early as soon as
residual_fermi
is reached by the quasi-Fermi levels.- Example
run{ current_poisson{ current_repetitions = yes } } poisson{} currents{}
residual¶
- Calling sequence
run{ current_poisson{ residual } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{real\;number}\)
values:
[0.0, ...)
default:
1e5
for 1D;1e3
for 2D;1e-3
for 3Dunit: \(\mathrm{cm^{-2}\,}\) (1D) / \(\mathrm{cm^{-1}\,}\) (2D) / \(\mathrm{none\,}\) (3D)
- Functionality
Residual occupation changes.
- Example
run{ current_poisson{ residual = 1e4 } } poisson{} currents{}
residual_fermi¶
- Calling sequence
run{ current_poisson{ residual_fermi } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{real\;number}\)
values:
[0.0, ...)
default:
1e-5
unit: \(\mathrm{eV}\)
- Functionality
Residual Fermi level changes, see Residuals for more details. This value is also used during
quantum_current_poisson{ }
- Example
run{ current_poisson{ residual_fermi = 1e-6 } } poisson{} currents{}
alpha_fermi¶
- Calling sequence
run{ current_poisson{ alpha_fermi } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{real\;number}\)
values:
[1e-5, 1.0]
default:
1.0
unit: \(\mathrm{-}\)
- Functionality
Dimensionless under-relaxation parameter for Fermi level. The final quasi-Fermi level for electrons after each iteration is calculated as follows:
\(E_{F,n}\) = ( \(E_{F,n}\) of previous iteration ) * ( 1 -
alpha_fermi
) + ( \(E_{F,n}\) of actual iteration ) *alpha_fermi
This Fermi level is then input to the next iteration. The same holds for the Fermi level \(E_{F,p}\) for holes. The value of
alpha_fermi
will change due toalpha_scale
during the iterations. The actually usedalpha_fermi
is now included in iteration_current_poisson.dat and iteration_quantum_current_poisson_details.dat.- Example
run{ current_poisson{ alpha_fermi = 0.5 } } poisson{} currents{}
alpha_iterations¶
- Calling sequence
run{ current_poisson{ alpha_iterations } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{integer}\)
values:
{1, 2, 3, 4, ...}
default:
1000
unit: \(\mathrm{-}\)
- Functionality
Iteration at which
alpha_fermi
begins to be rescaled byalpha_scale
at each following iteration.- Example
run{ current_poisson{ alpha_iterations = 200 } } poisson{} currents{}
alpha_scale¶
- Calling sequence
run{ current_poisson{ alpha_scale } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{real\;number}\)
values:
[0.1, 1.0]
default:
0.998
unit: \(\mathrm{-}\)
- Functionality
A factor rescaling
alpha_fermi
starting at the iterationalpha_iterations
, both for classical and quantum stages of simulation. Thealpha_fermi
is overwritten by:max( alpha_fermi * alpha_scale , 1e-5)
at each iteration step once the number of iterations exceedsalpha_iterations
.Use this feature to improve convergence (particularly convergence of Fermi levels) towards the end of the iteration.
Warning
Decreasing
alpha_fermi
too fast (a problem with older versions) will result in the iteration stalling, (only the residuals of the densities but none of the Fermi levels decrease). The total current equation may then not be properly conserved.- Example
run{ current_poisson{ alpha_scale = 0.995 } } poisson{} currents{}
output_log¶
- Calling sequence
run{ current_poisson{ output_log } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
yes
- Functionality
—
- Example
run{ current_poisson{ output_log = no } } poisson{} currents{}
output_local_residuals¶
- Calling sequence
run{ current_poisson{ output_local_residuals } }
- Properties
using: \(\mathrm{\textcolor{ForestGreen}{optional\;within\;the\;scope}}\)
type: \(\mathrm{choice}\)
choices:
yes
;no
default:
no
- Functionality
Outputs residuals as functions of position when
output_local_residuals = yes
. In case the attribute is enabled for both classical and quantum iterations, the quantum iteration overwrites the respective files of the classical iteration.Attention
Both conditions specified by
residual
andresidual_fermi
must hold in order to consider a calculation as converged.- Example
run{ current_poisson{ output_local_residuals = yes } } poisson{} currents{}