Lightforge KMC device simulation


In this subtutorial we will guide you through each tab of the LightForge WaNo. Respective inputs (outputs from QuantumPatch) are referenced and linked where required.


In the following we provide a detailed description of how to setup the ab-initio simulation in LightForge. You can either follow these steps and set up the simulation from scratch, or load the pre-configured into SimStack (available here shortly) and use the following description as explanation and reference.

General and IO


  • device layout: stack
  • set_PBC: automatic
  • enable connect_electrods
  • check all particle types: holes, electrons and excitons

IO: Check "Use QP output" and use the "+" button to define a total of 11 inputs. Then load the output from all QP runs in this tab. Label them as follows:

  • "DisX" (e.g. load and label it "DisBPhen")
  • "DisX" (e.g. load and label it "EAIPBPhen")
  • "Js"
  • "Lambdas"
  • "Excitonics"

Make sure to use relatively short and significant labels. These labels will automatically appear in dropdown manues in other tabs of LightForge, especially the Materials tab as described in the following.


MaterialDefinitionLF As mentioned before, we need to distinguish between alpha-NPD in the pure phase and alpha-NPD mixed with the emitter in the EML (different energy levels and disorder). Further, we will include dopants on a semi-parametric level, so the definition of an n-dopant and a p-dopant is required in this tab. Finally, due to simulation of excitonics in LightForge, we need to differentiate between BPhen in the transport layer and BPhen in the doped injection layer. Therefore, use the "+"-button to set up a total of 8 materials with the following names: MeoTPD, Anpd_pristine, Anpd_mix, Irpiq, BPhen_ex, BPhen_dop, p-Dop, n-Dop. In general, if a QuantumPatch file containing multiple materials is used as input (e.g. energy levels in mixed systems or electronic couplings computed on a multi-layer morphology). To uniquely assign relevant quantities, supply the pdb-file from the Parametrizer module for each material. For the dopants, we simply use input from the respecitve host material and overwrite energy values. A tutorial on full ab-initio simulation of doped injection layers will follow shortly. MaterialDefinitionLF

In the materials tab, set excitonics to "use QP ab initio input" and check the "manual dopant selection" option. In detail, proceed as follows for the definition of materials:

  • For MeoTPD, Anpd_pristine, Anpd_mix, Irpiq, BPhen_ex, BPhen_dop:
    • set input mode to "QP: eaip, sig, l" to extract all charge transport parameters from QP input.
    • In the molecule-parameters field, load the respective pdb file from the Parametrizer module (download it from the respective workflow and save to your disc) and chose the respective QP outputs. Note that the QP output for Lambdas and Excitonics (QP_output_lambda and QP_output_excitonics) is the same for all materials, whereas there is a unique QP output available for disorder (QP_output_sigma) and absolute transport levels (QP_output_eaip). Make sure to differentiale EA/IP and Disorder input for pure and mixed alpha-NPD.
    • Exciton preset should be set to "doping" for MeoTPD and BPhen_dop, to "fluorescent" for Anpd_pure, Anpd_eml and BPhen_ex, and to "phosphorescent" for Irpiq.
    • keep the "is dopant" checkbox disabled
  • For p-Dop and n-Dop:
    • set input mode to "QP: sig, l PAR: eaip" to use ab-initio input from QP based on the respective host-materials, but overwrite EA and IP to facilitate doping.
    • In the molecule-parameters field, load meotpd.pdb- and bphen.pdb-file for p- and n-Dop respectively from the Parametrizer module (originally named molecule.pdb, please rename accordingly).
    • Load "DisMeoTPD" and "DisBPhen" in the dropdown menue for QP_output_sigma respectively, and "Lambdas" and "Excitonics" for QP_output_lambda and QP_output_excitonics, similar to all other materials.
    • In the table set EA and IP values as follows:
      • p-Dop: EA=2.2, IP=8.0
      • n_dop: EA=0.5, IP=2.2
    • check the "is dopant" checkbox

The pictures to the right illustrate the definition of Irpiq and the p-dopant.


Set morphology width to e.g. 18nm (14nm is sufficient for an initial test, but >= 18nm is recommended). Then use the "+" button to define a total of five layers. For all layers, set morphology_input_mode to "select QP_output" and use the respecitve "DisX" QP output in the morphology_QP_output field, for layers in the following order:

  1. Doped injection layer with MeoTPD at 90% and p-Dop at 10% concentration (use the "+" button of the molecule_species field to add a second species), morphology_QP_output: DisMeoTPD, thickness 5nm
  2. pristine layer of alpha-NPD (make sure to set material to Anpd_pristine, not Anpd_mixed), morphology_QP_output: DisAnpd, thickness 10nm
  3. Emission layer with 85% alpha-NPD and 15% Irpiq (make sure to set the host material to Anpd_mix, not Anpd_pristine), morphology_QP_output: DisAnpdirpiq, thickness 20nm
  4. ETL with pure BPhen (material: BPhen_ex), morphology_QP_output: DisBPhen, thickness 10nm
  5. Doped EIL with BPhen (material: BPhen_dop) at 90% concentration doped with n-Dop at 10% concentration, morphology_QP_output: DisBPhen, thickness 5nm

In the bottom of this tab define two electrodes with work functions -4.6eV (first electrode) and -4.3eV (second electrode). For both electrodes, set coupling_model to "parametrized" and keep the standard parameters. As morphology expansion scheme, set "edcm".


Topology_FulLStack At the top of the topology tab, set *max_neighbours* to 120 and *transfer_integral_source* to QP_output. Additionally, pair parameters need to be defined for each pair of connected molecular species. The figure above illustrates the topology of the OLED stack. Here each solid arrow defines materials that are connected (for reasons of excitonics, connections between dopants and transport material in connecting layers, transparent arrows, are ommitted). For each connection, set pair-parameters using the "+" button. For each pair, simply use "JsLambdas" in the *QP_output* field. While this QP output does not contain dopants or Anpd_pristine, this works out nicely nevertheless, as these materials are defined in lightforge using pdb-files of materials present in the stack for which Js were computed and Js are assigned correspondingly. While these are not quite the correct electronic couplings, the error is negligible.

Physics and Operation

In the physics-tab use the following settings:

  • rates: mixed-marcus
  • epsilon_material: 3.5
  • superexchange: enabed
  • advanced settings (leave parameters not mentioned as is):
    • tta_rate: marcus
    • n_injection_layers: 2.5

The operation-tab basically defines the virtual experiments you wish to conduct on this OLED.

  • restart: False
  • To generate sufficient statistics, multiple "virtual experiments" can be done in parallel using the simulations field. We recommend to use at least 10 simulations, automatically done for each field.
  • measurement: DC
  • temperature: 300K
  • field strangth: 0.08, 0.095, 0.11 (corresponding to 6, 5 and 4V respectively). Remember to adapt values in case you modify layer thickness to achieve a certain voltage.
  • Set initial holes / electrons to 0.
  • Computational: IV_fluctuation: 0.00001, max_iterations: 2 000 000, max_time: 1.0e5
  • activate bond damping and keep standard parameters

Speeding up simulations with doped injection layers

We developed a novel scheme to speed up simulations with doped injection layers, as most of the KMC moves are spent on the many charge carriers present in the doped injection layers, instead of interesting processes in the EML. This feature is still in the experimental phase and therefore not yet exposed in the WaNo. In the meantime, you can use this scheme using the "override settings" options in the IO-tab. Open a simple text file, insert the lines below, save it as "slicing_settings.yml" and load it into the field "Override File":

mesh_scale: [0.3,0.6,0.6]
coulomb_correction: True
coulomb_correction_mode: cutoff
coulomb_binding_energy: 0.6
ME_slicing: True
buffer_update_iter: 149980
max_buffer_states: 20000
ME_effective_layers: [[0,6],[6,42],[42,50]]
ME_switch_order: [[2],[0],[1]]
ME_require_interfaces: [[1],[1],[2]]
ME_switch_iter: [150000,150000,5000000]
ME_min_inj_charges: 5
ME_q_convergence: 0.1
ME_max_slice_iter_mult: 0.9
p_slice_mode: 1000.0
ME_tracking_mode: new
coulomb_reset: 10001
ME_cut_dimers: pconf
ME_max_dimers: 15000


Lightforge requires one master thread. Simulations can be done in parallel and the total number of simulation is the value entered in the simulations field in the operation tab times the number of fields. So for 10 simulations and three fields, we recommend to allocate 31 cores with respective memory (64GB).


Coming soon...


The results of the search are