# Knowledge Base

 Navigation: Scripting Language > Functions mqwgain

Calculates gain and spontaneous emission for TE and TM modes in multiple quantum well structures using 4x4 k.p electronic band structure method [1-3]. The conduction band is parabolic, while heavy and light hole valence bands are mixed according to 4x4 k.p method and they are nonparabolic.

The solver includes a material database of common III-V semiconductors, ternary alloys, and quaternary alloys. Material properties may be generated automatically for arbitrary alloy compositions or may be input manually. The supported materials are listed in the table below:

 III-V semiconductors Ternary alloys Quaternary Alloys AlAs AlxGa1-xAs InxGa1-xAsyP1-y GaAs AlxGa1-xP InAs AlxIn1-xP AlP GaAsxP1-x GaP InxAl1-xAs InP InAsxP1-x InxGa1-xAs InxGa1-xP

When database materials are used, the properties of ternary alloys P(AxB1−xD) are interpolated from the corresponding properties of the base materials (P(AD) and P(BD)) according to the formula

$$P\left(A_x B_{1-x}D\right)=xP\left(AD\right)+\left(1-x\right)P\left(BD\right)+x\left(1-x\right)C$$,

where x is the composition fraction and C is the bowing parameter (quadratic coefficient). Quaternary alloys are composed from the interpolation of ternary alloy constituents [4]:

$$P\left(A_xB_{1-x}C_yD_{1-y}\right)=\frac{x\left(1-x\right)\left[\left(1-y\right)P\left(A_xB_{1-x}D\right)+yP\left(A_xB_{1-x}C\right)\right]+y\left(1-y\right)\left[xP\left(AC_yD_{1-y}\right)+\left(1-x\right)P\left(BC_yD_{1-y}\right)\right]}{x\left(1-x\right)+y\left(1-y\right)}$$,

for composition fractions x and y. For example, a combination of the properties of InxGa1−xP, InxGa1−xAs, InAsyP1−y, and GaAsyP1−y is used to define the properties of InxGa1−xAsyP1−y.

 Syntax Description result = mqwgain(stack_properties, simulation_parameters, config); stack_properties: struct with fields that define MQW stack geometry and material properties.   simulation_parameters: struct with fields that define simulation parameters for which the output will be calculated.   config: struct with fields that configure the behaviour of the simulation.   result: struct or a cell of structs in case of multiple partitions, where each struct contains 4 datasets: spatial band diagram, band structure in (E,k) space, spatial wave functions for each (E,k) state, and emission coefficients. result = mqwgain(stack_properties, simulation_parameters); same as above, but using all default values for the fields in config struct.

stack_properties is a struct with the following fields:

Field

Default

Units

Type

Description

gamma

eV

Scalar

Linewidth broadening due to intraband relaxation rate. Represents full with at half maximum of a Lorentzian.

neff

Matrix

Effective index vs. frequency. Two column matrix: first column is frequency (Hz), second column is effective index. Effective index values will be linearly interpolated on to the photon frequency grid for the simulation.

length

m

Matrix

Thickness of each layer, Nx1 array (N layers)

material

Cell

Material definitions, length N cell array. See below for a description of options to specify material properties.

strain

0

(a0-a)/a

Matrix

Strain in each layer as a fraction, negative values for compressive strain. Nx1 array (N layers).

vb

Not included

Struct

Specification for valence band absolute energy. If not defined than material.vb field is used by default.

stack_properties.material is a cell array (one element per layer) where each element is a struct. The struct can be defined in 2 ways. First way (can be generated automatically by calling buildmqwmaterial script command):

 Coefficient Units Description eg eV Band gap ep eV Energy parameter for the optical matrix element me 1/m0 Electron effective mass gamma1 Luttinger parameter gamma2 Luttinger parameter gamma3 Luttinger parameter ac eV Conduction band deformation potential av eV Valence band deformation potential b eV Valence band deformation potential c11 N/m2 Elastic stiffness coefficient c12 N/m2 Elastic stiffness coefficient lc m Lattice constant vb eV Valence band absolute energy (all layers should have common reference)

stack_properties.material second way:

 Coefficient Type Description database_material String Name of the material x 0

stack_properties.vb is a struct with the following fields:

Field

Default

Units

Type

Description

method

palankovski

String

Method for calculating valence band offsets. If “direct” is specified, the offsets must be provided (see offsets).

offsets

eV

Matrix

Directly specified valence band offsets, Nx1 array (N layers).

simulation_parameters is a struct with the following fields:

Field

Default

Units

Type

Description

T

K

Scalar

Simulation temperature.

V

V

Matrix

Electrostatic potential vs. position. A two-column matrix, with position (m) specified in the first column and potential (eV) specified in the second column. Potential values will be linearly interpolated on to the simulation grid. The first layer is assumed to start at z=0.

kt

linspace(0,2*pi/a*0.1,51)

1/m

Matrix

Transverse k values used in the band structure calculation.

stackpartitions

empty matrix (no partitioning)

Matrix

Matrix of size (number of partitions) x 2, where each row represents the start and end layer index for one partition using 1-based indexing. Start and end layers should be barriers. For example, [1,3;3,5] represents two partitions where the first partition contains layers (1,2,3) and the second partition contains layers (3,4,5), where layers 1, 3, and 5 represent barriers.

cden

1/m3

Matrix

Carrier density array. Matrix of size (number of partitions) x (number of different density profiles). If there is more than one partition this enables defining spatially dependent density, where each partition has different density. If there is no partitioning, each density profile is a scalar representing average density over the entire stack.

phfreq

Hz

Matrix

Photon frequency array.

config is a struct with the following fields:

Field

Default

Units

Type

Description

bcs

See below

See below

Struct

Boundary conditions struct.

dz

1e-10

m

Scalar

Grid spacing ≥ 1Å.

numeigenvalues

30

Scalar

Maximum number of bands to calculate by the eignesolver at each kt.

materialdb

String or struct

String specifying the path to the material database or empty struct for the default database.

cbvalley

Gamma

String

Choose the conduction band valley for interpolation of material properties: “Gamma”, “X”, “L”, or “All” (default is “Gamma”; option “All” uses the lowest band gap to select).

reusebandstructure

false

Boolean

If there is partitioning and this option is true, the MQW band structure calculated in the first partition will be reused in all other partitions, reducing simulation time. This is a good approximation whenever partitions have similar band diagram (up to a constant shift).

config.bcs is a struct with the following fields:

Field

Default

Units

Type

Description

pmlactive

false

Boolean

Enable perfectly matched layer at boundaries.

pmlcutoff

[1e-2,1e-2]

Matrix

Threshold ratio (PML probability density)/(MQW probability density) to reject eigenstates with excess conduction and valence band probability densities located in the PMLs, 2x1 array. The QW bound states are those below this threshold.

pmllength

[10e-9,10e-9]

m

Matrix

PML thickness for left and right boundaries, 2x1 array.

pmlcoefficient

[0.5+1i*0.5,0.5+1i*0.5,-1+1i*1.4,-1+1i*1.4]

Matrix

PML complex coordinate stretching coefficients. First 2 elements for left and right PML for the conduction band and the other two for the valence band.

hwcutoff

[5e-4,5e-4]

$$A^{-3/2}$$

Matrix

Threshold wave function slope to reject eigenstates that do not decay enough at the left and right hard-wall boundaries, 2x1 array. The QW bound states are those below this threshold.

result is cell of structs for each partition if there is partitioning, or a struct if there is no partitioning, where structs contain the following fields:

 Syntax Type Description banddiagram dataset Conduction and valence band edge including strain, but not including quantum confinement effects. bandstructure dataset (E,kt) band diagram for conduction and valence bands. Attributes are: conduction_band, valence_band_lo, valence_band_up. See below for the meaning of lo and up. Parameters are kt and subband. wavefunction dataset Spatial wavefunction for each (E,kt) point. Attributes are conduction_band_1, valence_band_lo_1, valence_band_lo_2, valence_band_up_1, valence_band_up_2, where the 4x4 k.p basis in the valence band is split into two (lo for lower and up for upper) 2x2 bases (vectors in each 2x2 basis designated with 1 and 2). For more information look at references [1] and [2]. Parameters are coordinate, kt, and subband. emission dataset Gain and spontaneous emission coefficients. Attributes are: spontaneous_TE, spontaneous_TM, stimulated_TE, stimulated_TM, where TE and TM stand for electromagnetic modes. Parameters are: frequency/energy/wavelength and ndensity (charge density).   Emission coefficients are calculated for the total stack thickness, including barriers. If only quantum well thickness is of interest, excluding barriers, these coefficients should be scaled by multiplying with (total length)/(total qw length). It is important to ensure that emission coefficients apply only to the thickness used for the calculation of the mode overlap with the gain region. When using partitioning,  there will be overlapping barriers between different partitions, e.g. simulation_parameters.stackpartitions = [1,3;3,5], where 1, 3, and 5 are barriers. In that case emission coefficients for each partition again apply to the total thickness of that partition, meaning there may be some double counting with respect to the mode overlap region thickness. To avoid this, emission coefficients can be scaled to apply to quantum wells only, or to apply to a portion of partition that does not overlap with adjacent partitions.

Material Definitions

Material parameters are important for the accurate calculation of the MQW band structure and emission characteristics. Many parameters are used to model the optical and electronic material behavior. Some parameters for alloys of compound semiconductors are not available from experiment and must be generated from interpolation of known values. Experimental results may depend on growth conditions and layer thickness, and adjustment of some material parameters may be necessary to obtain agreement with measurements.

Lumerical provides a default material database with the MQW gain solver. These parameters are used automatically when the layer materials are defined by a name and composition fraction. The following code sets the material in layer 2 as Al0.41Ga0.59As

materials = cell(3);

#...

materials{2} = struct;

materials{2}.database_material = "AlGaAs";

materials{2}.x = 0.41;

You can also choose to use your own material database (in the same format) instead of the default material database supplied by Lumerical. By specifying the path of that database in the simulation configuration struct, you can instruct the solver to use those material definitions, e.g.

config.materialdb = "/home/auser/myfolder/my_material_db.json";

Using this approach, the material parameters of the compound semiconductors can be modified, but the default interpolation used by the solver will still be applied to generate parameters for ternary and quaternary semiconductors. The assignment of materials to layers does not change.

Alternately, a material definition can be read directly from a material database (default or custom) and loaded as a struct into the script workspace using the buildmqwmaterial command. For example,

mymat = buildmqwmaterial("/home/auser/myfolder/my_material_db.json", 300, "InAlAs", 0.47);

will read the necessary properties from the material database and build a material definition at T=300K with composition fraction x=0.47 for In0.47Al0.53As. The result is a structure with the coefficients required by the MQW solver. A struct with these fields can be assigned to a material layer and used directly by the solver, e.g.

materials = cell(3);

#...

materials{2} = buildmqwmaterial("/home/auser/myfolder/my_material_db.json", 300, "InAlAs", 0.47);

References

[1] D. Ahn et al., J. Appl. Phys. 64, 4056 (1988)

[2] S. L. Chuang, Physics of Optoelectronic Devices

[3] Chuang, Phys. Rev. B, 43, 9649 (1991)

[4] Vurgaftman et al., J. Appl. Phys., 89, 5815 (2001)

Example

See mqw category on our knowledge exchange web site.