Welcome to the openbandparams tutorial. This will teach you the basics. If you have not already installed openbandparams, please see Installation. First, start up an interactive python shell:
$ python
Next, import everything from the openbandparams package:
>>> from openbandparams import *
Now you can access the materials and their properties:
>>> GaAs
GaAs
>>> InAs
InAs
>>> InSb
InSb
The lattice constant, in units of Angstroms (Å), is accessed like this:
>>> GaAs.a()
5.65325
The bandgap, in units of electron Volts (eV), is accessed like this:
>>> GaAs.Eg()
1.4224821428571428
Some parameters depend on temperature. If the temperature is not provided, it defaults to 300 Kelvin:
>>> GaAs.Eg(T=300)
1.4224821428571428
>>> GaAs.Eg(T=0)
1.519
There are many parameters available:
>>> GaAs.Eg_Gamma()
1.4224821428571428
>>> GaAs.Eg_X()
1.898857142857143
>>> GaAs.Eg_L()
1.7069642857142857
>>> GaAs.meff_e_Gamma()
0.067
A full list of parameters and functions available for a given material can be printed using the following one-liner:
>>> ', '.join([param for param in dir(GaAs) if not param.startswith('_')])
'Delta_SO, Eg, Eg_Gamma, Eg_Gamma_0, Eg_L, Eg_L_0, Eg_X, Eg_X_0, Ep, F,
LaTeX, Luttinger1, Luttinger2, Luttinger3, VBO, a, a_300K, a_c, a_v,
alpha_Gamma, alpha_L, alpha_X, b, beta_Gamma, beta_L, beta_X, c_11, c_12,
c_44, d, da_dT, elementFraction, elements, meff_SO, meff_e_Gamma,
meff_e_L_DOS, meff_e_L_long, meff_e_L_trans, meff_e_X_DOS, meff_e_X_long,
meff_e_X_trans, name'
For documentation of the parameters, see Supported Parameters.
Ternary alloys are also supported:
>>> AlGaAs(x=.3)
AlGaAs(Al=0.3)
>>> AlGaAs(Al=.3)
AlGaAs(Al=0.3)
>>> AlGaAs(Ga=0.7)
AlGaAs(Al=0.3)
>>> AlGaAs(Al=0.3).Eg()
1.840788343373494
>>> AlGaAs.Eg(Al=0.3)
1.840788343373494
As of version 0.4, you must follow the alloy naming scheme. Group III elements come first, with the lowest atomic number elements first, followed by the Group V elements, also ordered by atomic number:
>>> GaInAs
GaInAs
>>> GaPAs
GaPAs
If you reverse the element order, an error will be raised to let you know:
>>> InGaAs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'InGaAs' is not defined
>>> GaAsP
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'GaAsP' is not defined
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'GaAsP' is not defined
Ternaries can be lattice matched to a desired lattice constant using the following syntax:
>>> GaInP(a=GaAs.a())
GaInP(Ga=0.516340648855)
>>> GaInP(a=GaAs.a()).Eg()
1.9259077529765196
>>> GaInP.Eg(a=GaAs.a())
1.9259077529765196
In the previous example, a lattice matching temperature of 300 K is assumed. To lattice match to a different lattice matching temperature use the following syntax:
>>> GaInP(a=GaAs.a(), T=300)
GaInP(Ga=0.516340648855)
>>> GaInP(a=GaAs.a(), T=400)
GaInP(Ga=0.523158422221)
Instancing can be used to get multiple parameters from an alloy:
>>> GaInP_on_GaAs = GaInP(a=GaAs.a(), T=300)
>>> GaInP_on_GaAs
GaInP(Ga=0.516340648855)
>>> GaInP_on_GaAs.Eg(T=300)
1.9259077529765196
>>> GaInP_on_GaAs.Eg(T=77)
2.010415191481605
>>> GaInP_on_GaAs.a()
5.653250000000166
The same concepts also apply to quaternaries:
>>> GaInPAs(P=0.1, a=InP.a(), T=300)
GaInPAs(Ga=0.4176, P=0.1)
>>> GaInPAs(P=0.1, a=InP.a(), T=300).Eg()
0.8237397670939017
>>> myGaInPAs = GaInPAs(P=0.1, a=InP.a(), T=300)
>>> myGaInPAs.Eg()
0.8237397670939017
>>> myGaInPAs.a()
5.869700012767527
It’s also possible to print a LaTeX representation of the alloy:
>>> print GaInPAs.LaTeX()
Ga_{x}In_{1-x}P_{y}As_{1-y}
>>> print GaInPAs(P=0.1, a=InP.a(), T=300).LaTeX()
Ga_{0.4176}In_{0.5824}P_{0.1}As_{0.9}
Now that you have the basics down, check out the Examples to see what’s possible.