Skip to content

Allow Specification of Custom Mobility Functions

Simon Spannagel requested to merge custom_mobility into master

This MR enables custom mobility models to be added directly via the configuration file. From the manual:

Allpix Squared provides the possibility to use fully custom mobility models. In order to use a custom model, the parameter mobility_model = "custom" needs to be set in the configuration file. Additionally, the following configuration keys have to be provided:

  • mobility_function_electrons: the formula describing the electron mobility
  • mobility_function_holes: the formula describing the hole mobility

The functions defined via these parameters can depend on the local electric field and the local doping concentration. In order to use the electric field magnitude in the formula, an x has to be placed at the respective position, for the doping concentration a y is used as placeholder.

Parameters of the functions can either be placed directly in the formulas in framework-internal units, or provided separately as arrays via the mobility_parameters_electrons and mobility_parameters_electrons. Placeholders for parameters in the formula are denoted with squared brackets and a parameter number, for example [0] for the first parameter provided. Parameters specified separately from the formula can contain units which will be interpreted automatically.

Parameters directly placed in the mobility formula have to be supplied in framework-internal units since the function will be evaluated with both electric field strength and doping concentration in internal units. It is recommended to use the possibility of separately configuring the parameters and to make use of units to avoid conversion mistakes.

The following set of parameters re-implements the Jacoboni mobility model using a custom mobility model. The mobility is calculated at a fixed temperature of 293K.

# Replicating the Jacoboni-Canali mobility model at T = 293K
mobility_model = "custom"

mobility_function_electrons = "[0]/[1]/pow(1.0+pow(x/[1],[2]),1.0/[2])"
mobility_parameters_electrons = 1.0927393e7cm/s, 6729.24V/cm, 1.0916

mobility_function_holes = "[0]/[1]/pow(1.0+pow(x/[1],[2]),1.0/[2])"
mobility_parameters_holes = 8.447804e6cm/s, 17288.57V/cm, 1.2081

It should be noted that the temperature passed via the module configuration is not evaluated for the custom mobility model, but the model parameters need to be manually adjusted to the required temperature.

The interpretation of the custom mobility functions is based on the ROOT::TFormula and supports all corresponding features, mathematical expressions and constants.

Merge request reports