Materials with wurtzite crystal structure exhibit built-in polarization due to the lack of symmetry in their crystal structure. Practical materials with wurtzite crystal structure of interest in light source devices are binary/ternary/quaternary compounds based on nitrides, such as GaN/InN/AlN. This material polarization manifests itself in the form of fixed charge density in device layers. Fixed charge density can significantly alter the optoelectronic properties of devices. For example, it may cause strong electric fields in quantum wells, which produces a shift of the emission frequency and magnitude due to the quantum confined Stark effect.
In this article we provide a Lumerical script that can be used to add material polarization effects in CHARGE and CHARGE/MQW coupled simulations and give instructions for its use along with a simple example.
Types of polarization
Spontaneous polarization: Spontaneous polarization occurs without strain, so it is always present between layers of wurtzite crystal structure, such as nitrides.
Piezo polarization: Piezo polarization occurs due to strain (piezo effect). The resulting polarization vector is a linear or nonlinear function of strain.
Assumptions in the material polarization script
Wurtzite crystal orientation: It is assumed that c crystal axis is in the growth direction. This is the most common case.
Strain: Strain is assumed to be constant within each layer. This means that the material polarization results in fixed surface charge density at interfaces between layers.
Material composition: For ternary and quaternary materials, it is assumed that their composition fraction x for ternaries and x and y for quaternaries is constant in space. This has the same consequences as for constant strain. To ensure constant composition fraction, materials should be added to the simulation as Semiconductor types from the material database.
Temperature: Temperature is assumed to be 300 K for calculating polarization and surface charge density. This is a reasonable approximation and it is only important if the users want the material polarization script to calculate strain instead of setting the strain value as an input option. In that case strain is calculated as a relative difference in lattice constants between the layer material and the reference material. The dependence of lattice constant on temperature is relatively weak. For example, a temperature increase of even 100 K in GaAs will change the lattice constant such that the strain value will be only around 0.0007. This value of strain is typically much smaller than the value resulting from lattice constant mismatch between layers. The users can check this by looking at the temperature dependent lattice constant parameters for GaAs in our electrical material database (under kdotp tab).
Input options in the material polarization script
The scripted solution for adding material polarization to CHARGE and CHARGE/MQW coupled simulations consists of two script files: build_polarized_interfaces.lsf and build_polarized_interfaces_functions.lsfx. The former is the main script file that the users will run, while the latter is an encrypted file that contains a library of functions and should be uploaded to the same folder. Below, we explain input options in build_polarized_interfaces.lsf.
layers: Cell array of layers ordered from bottom to top in the growth direction. For each layer in the array define options:
domain: Domain ID after partitioning. Tip: Partition simulation domain in CHARGE ldev project file to obtain IDs.
material_name: Name of the domain material in the object tree. Tip: Right click on material, select Rename, then copy/paste name.
formula: Chemical formula of the material. Supported materials: "GaN", "InN", "AlN", "Al(x)Ga(1-x)N", "In(x)Ga(1-x)N", "Al(x)In(1-x)N", "Al(x)Ga(y)In(1-x-y)N".
mole_x: Composition fraction x for ternary and quaternary materials.
mole_y: Composition fraction y for quaternaries.
strain: Value of domain strain: negative for compressive strain, positive for tensile strain. Neglected if sim_config.calculate_strain = true.
The options above are descriptions of each layer. Additional simulation configuration options are given by the struct with the following fields:
growth_direction: Vector [x,y,z] designating growth direction from bottom to top.
calculate_strain: True or false. If true then calculate strain as (reference lattice constant - layer lattice constant) / layer lattice constant and ignore strain options in layers cell array.
piezo_polarization: Can be linear or quadratic. It refers to the response formula for piezo polarization vector as a function of strain.
linear_interpolate: Can be linear or quadratic. It refers to the interpolation formula for spontaneous polarization for ternary materials. Quadratic formula uses nonzero bowing parameter.
reference_material: Reference material whose lattice constant will be used for strain calculation when calculate_strain = true. The reference material must be added to the simulation and this option is the material name in the object tree.
screen_factor: Array of values between 0 and 1 for each interface. The number of interfaces is one less than the number of layers (only counting internal shared interfaces) and the interfaces are ordered from bottom to top. The values represent the ratios of remaining interface charges after being screened by defects. The calculated surface charges at layer interfaces are typically screened by various defects, so that only a portion of them should be included in the simulation. The calculated surface charges will be multiplied by these factors before adding them to the simulation.
Before running build_polarized_interfaces.lsf open the project file with device model (file with extension .ldev). This file should already contain a complete device model except for the surface charges due to material polarization.
In this example we provide project file build_polarized_interfaces_test.ldev, which consists of 5 nitride layers resembling an MQW layer with 2 quantum wells and no doping, placed between two unbiased contacts. The input options in the material polarization script are already set to work with this project file. The goal is to add surface charges at 4 internal layer interfaces to take into account total polarization (spontaneous + piezo).
In file build_polarized_interfaces_test.ldev we added the band diagram monitor to be able to visualize the conduction and valence bands before and after adding polarization effects.
We also use the mesh constraint to make sure the finite element mesh is refined enough in thin layers to provide accurate value of current. This can be checked by refining the mesh constraint (i.e. using smaller mesh edge size) until the current value converges.
The plot below shows the band diagram without polarization:
After adding material polarization as can be seen in the image below, which contains 4 surface charge objects:
the band diagram looks as follows, showing the effects of polarization and the resulting internal electric field on the band edges:
Note: In this example we set screen_factor = [0.5,0.5,0.5,0.5] to include only 50% of the calculated polarization charge, while the rest is considered screened out by defects. This is a reasonable value, but screen_factor is typically fitted to reproduce measurements . The screen factor may be as low as zero for interfaces between thicker layers (e.g. outside of multiple quantum well layers).
1. J. Piprek, Semiconductor optoelectronic devices: introduction to physics and simulation, Ch. 9, 2003, Academic Press.