Calculates gain and spontaneous emission for TE and TM modes in multiple quantum well structures using 4x4 k.p electronic band structure method [13]. 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 IIIV 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:
IIIV semiconductors 
Ternary alloys 
Quaternary Alloys 

AlAs 
Al _{ x } Ga _{ 1x } As 
In _{ x } Ga _{ 1x } As _{ y } P _{ 1y } 
GaAs 
Al _{ x } Ga _{ 1x } P 

InAs 
Al _{ x } In _{ 1x } P 

AlP 
GaAs _{ x } P _{ 1x } 

GaP 
In _{ x } Al _{ 1x } As 

InP 
InAs _{ x } P _{ 1x } 

In _{ x } Ga _{ 1x } As 

In _{ x } Ga _{ 1x } P 
When database materials are used, the properties of ternary alloys P(A _{ x } B _{ 1−x } D) are interpolated from the corresponding properties of the base materials (P(AD) and P(BD)) according to the formula
$$ P\left(A_x B_{1x}D\right)=xP\left(AD\right)+\left(1x\right)P\left(BD\right)+x\left(1x\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_{1x}C_yD_{1y}\right)=\frac{x\left(1x\right)\left[\left(1y\right)P\left(A_xB_{1x}D\right)+yP\left(A_xB_{1x}C\right)\right]+y\left(1y\right)\left[xP\left(AC_yD_{1y}\right)+\left(1x\right)P\left(BC_yD_{1y}\right)\right]}{x\left(1x\right)+y\left(1y\right)}, $$
for composition fractions x and y. For example, a combination of the properties of In _{ x } Ga _{ 1−x } P, In _{ x } Ga _{ 1−x } As, InAs _{ y } P _{ 1−y } , and GaAs _{ y } P _{ 1−y } is used to define the properties of In _{ x } Ga _{ 1−x } As _{ y } P _{ 1−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 
(a0a)/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 
Material composition (if ternary or quaternary) 
y 
0 
Material composition (if quaternary) 
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 twocolumn 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 

Matrix 
Matrix of size (number of partitions) x 2, where each row represents the start and end layer index for one partition using 1based 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 
1e10 
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 
[1e2,1e2] 

Matrix 
Threshold ratio (PML probability density)/(MQW probability density), one for conduction and one for valence bands, 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 
[10e9,10e9] 
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 
[5e4,5e4] 
\( A^{3/2} \) 
Matrix 
Threshold wave function slope, one for conduction and one for valence bands, to reject eigenstates that do not decay enough at the left and right hardwall 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 Al _{ 0.41 } Ga _{ 0.59 } As
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 In _{ 0.47 } Al _{ 0.53 } As. 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)
See Also
buildmqwmaterial, mqwindex, edge emitting laser example, MQW product reference manual