current_poisson{ }
Calling sequence
run{ current_poisson{ } }
Properties
usage:
items: maximum 1
Dependencies
Global groups poisson{ } and 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
usage:
type: real number
values:
default:
unit:
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 the fermi_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
usage:
type: choice
values:
yes
orno
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
usage:
type: choice
values:
yes
orno
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 for alpha_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
usage:
type: choice
values:
yes
orno
default:
no
Dependencies
Defining this attribute requires presence of current_repetitions.
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 of current_repetitions
into account.
Example
run{
current_poisson{
system_solve = yes
}
}
poisson{}
currents{}
iterations
Calling sequence
run{ current_poisson{ iterations } }
Properties
usage:
type: integer
values:
default:
unit:
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
usage:
type: integer
values:
default:
unit:
Dependencies
This attribute is required if system_solve or limit_repetitions is defined.
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 (larger alpha_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
usage:
type: choice
values:
yes
orno
default:
no
Dependencies
Defining this attribute requires presence of current_repetitions.
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
usage:
type: real number
values:
[0.0, ...)
default:
for 1D; for 2D; for 3Dunit:
for 1D; for 2D; for 3D
Functionality
Residual occupation changes.
Example
run{
current_poisson{
residual = 1e4
}
}
poisson{}
currents{}
residual_fermi
Calling sequence
run{ current_poisson{ residual_fermi } }
Properties
usage:
type: real number
values:
[0.0, ...)
default:
unit:
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
usage:
type: real number
values:
default:
unit:
Functionality
Dimensionless under-relaxation parameter for Fermi level. The final quasi-Fermi level for electrons after each iteration is calculated as follows:
alpha_fermi
) + ( alpha_fermi
This Fermi level is then input to the next iteration.
The same holds for the Fermi level alpha_fermi
will change due to alpha_scale
during the iterations.
The actually used alpha_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
usage:
type: integer
values:
default:
unit:
Functionality
Iteration at which alpha_fermi
begins to be rescaled by alpha_scale
at each following iteration.
Example
run{
current_poisson{
alpha_iterations = 200
}
}
poisson{}
currents{}
alpha_scale
Calling sequence
run{ current_poisson{ alpha_scale } }
Properties
usage:
type: real number
values:
default:
unit:
Functionality
A factor rescaling alpha_fermi
starting at the iteration alpha_iterations
, both for classical and quantum stages of simulation.
The alpha_fermi
is overwritten by:
max( alpha_fermi * alpha_scale , 1e-5)
at each iteration step once the number of iterations exceeds alpha_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{}
mindensity_factor_electrons
Calling sequence
run{ current_poisson{ mindensity_factor_electrons } }
Properties
usage:
type: real number
values:
default:
unit:
Functionality
—
Example
run{
current_poisson{
mindensity_factor_electrons = 1e5
}
}
poisson{}
currents{}
mindensity_factor_holes
Calling sequence
run{ current_poisson{ mindensity_factor_holes } }
Properties
usage:
type: real number
values:
default:
unit:
Functionality
—
Example
run{
current_poisson{
mindensity_factor_holes = 1e5
}
}
poisson{}
currents{}
output_log
Calling sequence
run{ current_poisson{ output_log } }
Properties
usage:
type: choice
values:
yes
orno
default:
yes
Functionality
—
Example
run{
current_poisson{
output_log = no
}
}
poisson{}
currents{}
output_local_residuals
Calling sequence
run{ current_poisson{ output_local_residuals } }
Properties
usage:
type: choice
values:
yes
orno
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
and residual_fermi
must hold in order to consider a calculation as converged.
Example
run{
current_poisson{
output_local_residuals = yes
}
}
poisson{}
currents{}
Last update: 02/04/2025