current_poisson{ }

Calling sequence

run{ current_poisson{ } }

Properties
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • items: \(\mathrm{maximum\;1}\)

Dependencies
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}}\)

  • 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 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
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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 of current_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}}\)

  • type: \(\mathrm{integer}\)

  • values: \(\{1,2,3,4,\ldots\}\)

  • 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}}\)

  • type: \(\mathrm{integer}\)

  • values: \(\{1,2,3,4,\ldots\}\)

  • 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 (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
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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}}\)

  • type: \(\mathrm{real\;number}\)

  • values: \([0.0, \ldots)\)

  • default: \(10^{5}\,\) (1D) / \(10^{3}\,\) (2D) / \(10^{-3}\,\) (3D)

  • unit: \(\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}}\)

  • type: \(\mathrm{real\;number}\)

  • values: \([0.0, \ldots)\)

  • default: \(10^{-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}}\)

  • type: \(\mathrm{real\;number}\)

  • values: \([10^{-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 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
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{integer}\)

  • values: \(\{1,2,3,4,\ldots\}\)

  • default: \(1000\)

  • unit: \(\mathrm{-}\)

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
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{real\;number}\)

  • values: \([0.1, 1.0]\)

  • default: \(0.998\)

  • unit: \(\mathrm{-}\)

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{}

output_log

Calling sequence

run{ current_poisson{ output_log } }

Properties
  • using: \(\mathrm{\textcolor{ForestGreen}{optional}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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}}\)

  • type: \(\mathrm{choice}\)

  • choices: \(\mathrm{yes\;/\;no}\)

  • default: \(\mathrm{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{}