pynitride.physics.material module¶
- class pynitride.physics.material.AlGaN(spin_splitting=0, polarity='metal')¶
 Bases:
WurtziteSuperclass for Wurtzite materials.
- Parameters:
 spin_splitting – an artificial splitting energy between spin-up and spin-down. If a non-zero splitting energy is provided, the small terms in the k.p Hamiltonian which couple spin-up and spin-down are zeroed so that the spin_splitting will be exactly as specified. This is convenient for scattering problems whenever spin is not important, because thereafter, one can simply ignore one half of the bands.
- class pynitride.physics.material.AlInGaN(spin_splitting=0)¶
 Bases:
WurtziteSuperclass for Wurtzite materials.
- Parameters:
 spin_splitting – an artificial splitting energy between spin-up and spin-down. If a non-zero splitting energy is provided, the small terms in the k.p Hamiltonian which couple spin-up and spin-down are zeroed so that the spin_splitting will be exactly as specified. This is convenient for scattering problems whenever spin is not important, because thereafter, one can simply ignore one half of the bands.
- class pynitride.physics.material.Insulator(name)¶
 Bases:
MaterialSystemRepresents a parameterized material.
- strain_to(m, straincond={})¶
 
- class pynitride.physics.material.MaterialSystem¶
 Bases:
objectRepresents a parameterized material.
- append_dopants(dopants)¶
 
- bulk(**kwargs)¶
 
- get(mesh, item)¶
 
- polarization(mesh, key)¶
 Populates the mesh with the polarization P and potentially other related functions
- Parameters:
 mesh – the mesh
key – the key being sought
- surface_barrier(m)¶
 Returns the surface barrier height based on the top boundary of the mesh.
- Parameters:
 m – the mesh, should be the global mesh so there is a top boundary
- update(destmesh, reason)¶
 
- vergard(lookup)¶
 Interpolates a parameter for the material system.
The material using this function must have a vergard basis defined, eg
self.vergard={ 'x': 'AlN', 'y':'InN', None: 'GaN'}
where ‘x’, ‘y’ are arbitrarily named mole-fraction variables that are defined on the mesh and the dict values are strings indicating the basis material for each mole-fraction variable. The None key indicates the basis material for the x=y=0 limit. Each of the above materials must have the relevant lookup defined in the parameter database.
- Parameters:
 lookup – the string with which to query the parameter database for each material basis
- class pynitride.physics.material.Wurtzite(spin_splitting=0, orientation=1)¶
 Bases:
MaterialSystemSuperclass for Wurtzite materials.
- Parameters:
 spin_splitting – an artificial splitting energy between spin-up and spin-down. If a non-zero splitting energy is provided, the small terms in the k.p Hamiltonian which couple spin-up and spin-down are zeroed so that the spin_splitting will be exactly as specified. This is convenient for scattering problems whenever spin is not important, because thereafter, one can simply ignore one half of the bands.
- bulk_lattice_condition(m)¶
 The natural lattice constant of the bottommost point
- ec_Cmats(m, q)¶
 Elastic continuum matrices.
\[\begin{split}\begin{equation} C_0=\begin{pmatrix} C_{11} & \cdot & \cdot \\ \cdot & (C_{11}-C_{12})/2 & \cdot \\ \cdot & \cdot & C_{44} \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_l=\begin{pmatrix} \cdot & \cdot & C_{13} \\ \cdot & \cdot & \cdot \\ C_{44} & \cdot & \cdot \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_r=\begin{pmatrix} \cdot & \cdot & C_{44} \\ \cdot & \cdot & \cdot \\ C_{13} & \cdot & \cdot \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_2=\begin{pmatrix} C_{44} & \cdot & \cdot \\ \cdot & C_{44} & \cdot \\ \cdot & \cdot & C_{33} \end{pmatrix} \end{equation}\end{split}\]- Parameters:
 m – the mesh
q – the in-plane wavevector
- Returns:
 a tuple of (C0,Cl,Cr,C2), where each is an (3 mesh.Nn) x (3 mesh.Nn) complex matrix
- ec_CmatsXZ(m, q)¶
 Like
Wurtzite.ec_Cmats()but only the 2x2 XZ matrices.
- ec_CmatsY(m, q)¶
 Like
Wurtzite.ec_Cmats()but only the 1x1 Y (center) matrices.
- kp_Cmats(m, kx, ky, carrier, kxl=None, kyl=None)¶
 Returns the kp matrices needed by
MultibandKPThe matrices are in the bases used by Birner. The naming convention for the C matrices is given in Finite Element Method.
If kxl, kyl are not specified, then kx, ky is used for both the left ket wavevector and the right ket wavevector. This is almost always the correct thing to do. There are some times when one cares about the matrix element of the kp Hamiltonian between two different wavevectors (such as in surface roughness scattering). In that case, the left ket wavevector can be specified separately via kxl, kyl. The resulting matrices may, of course, be non-Hermitian.
If the artificial spin-splitting (see
Wurtzite) is zero, the matrices are\[C_{0}=C_{0L}+C_{0D}+C_{0S}\]\[\begin{split}\begin{equation} C_{l}= I_2 \otimes \begin{pmatrix} \cdot & \cdot & k_x^lN_2^+ \\ \cdot & \cdot & k_y^lN_2^+ \\ k_x^lN_2^- & k_y^lN_2^- & \cdot \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_{r}= I_2 \otimes \begin{pmatrix} \cdot & \cdot & N_2^-k_x^r \\ \cdot & \cdot & N_2^-k_y^r \\ N_2^+k_x^r & N_2^+k_y^r & \cdot \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_{2}= I_2 \otimes \begin{pmatrix} M_2^u & \cdot & \cdot \\ \cdot & M_2^u & \cdot \\ \cdot & \cdot & L_2^u \\ \end{pmatrix} \end{equation}\end{split}\]where \(C_{0S}\) is the strain matrix from
Wurtzite.kp_strain_mat()and\[\begin{split}\begin{equation} C_{0L}= I_2 \otimes \begin{pmatrix} k_x^lL_1^uk_x^r+k_y^lM_1^uk_y^r & k_x^lN_1^+k_y^r+k_y^lN_1^-k_x^r& \cdot\\ k_y^lN_1^+k_x^r+k_x^lN_1^-k_y^r & k_x^lM_1^uk_x^r+k_y^lL_1^uk_y^r& \cdot\\ \cdot & \cdot & k_x^lM_3^uk_x^r+k_y^lM_3^uk_y^r \end{pmatrix} \end{equation}\end{split}\]\[\begin{split}\begin{equation} C_{0D}=\begin{pmatrix} \Delta_1 & - i\Delta_2 & \cdot & \cdot & \cdot & \Delta_3 \\ i\Delta_2 & \Delta_1 & \cdot & \cdot & \cdot & - i\Delta_3 \\ \cdot & \cdot & \cdot & -\Delta_3 & i\Delta_3 & \cdot \\ \cdot & \cdot & -\Delta_3 & \Delta_1 & i\Delta_2 & \cdot \\ \cdot & \cdot & - i\Delta_3 & - i\Delta_2 & \Delta_1 & \cdot \\ \Delta_3 & i\Delta_3 & \cdot & \cdot & \cdot & \cdot \end{pmatrix} \end{equation}\end{split}\]If the artificial spin-splitting is provided, then the off-diagonal 3x3 blocks of C_0 are zeroed out, and an additional matrix
\[\begin{split}\begin{equation} SS=\begin{pmatrix} ss/2 & \cdot & \cdot & \cdot & \cdot & \cdot \\ \cdot & ss/2 & \cdot & \cdot & \cdot & \cdot \\ \cdot & \cdot & ss/2 & \cdot & \cdot & \cdot \\ \cdot & \cdot & \cdot & -ss/2 & \cdot & \cdot \\ \cdot & \cdot & \cdot & \cdot & -ss/2 & \cdot \\ \cdot & \cdot & \cdot & \cdot & \cdot & -ss/2 \end{pmatrix} \end{equation}\end{split}\]is added to \(C_0\)
- Parameters:
 m – the mesh
kx – the wavevector
ky – the wavevector
carrier – ‘electron’ or ‘hole’
kxl – the wavevector of the left ket
kyl – the wavevector of the left ket
- Returns:
 a tuple of (C0,Cl,Cr,C2), where each is an (n mesh.Nn) x (n mesh.Nn) complex matrix, n=2,6 for electrons,holes
- kp_dim = {'electron': 2, 'hole': 6}¶
 Dimension of the kp problem, 6 for holes, 2 for electrons.
- kp_strain_mat(m, carrier, **strains)¶
 Returns the strain deformation matrix by the means noted on pg 2496 of CC96.
See examples/wzstrainterms.ipynb to show that this is consistent.
For conduction band
\[\begin{split}\begin{pmatrix} a_{c2} e_{xx} + a_{c2} e_{yy} + a_{c1} e_{zz} & 0 \\ 0 & a_{c2} e_{xx} + a_{c2} e_{yy} + a_{c1} e_{zz} \\ \end{pmatrix}\end{split}\]\[\begin{gather} a_{c1}=a_1+D_1,\quad a_{c2}=a_2+D_2 \end{gather}\]For valence band, the 6x6 strain matrix is a block diagonal of two 3x3 blocks
\[\begin{split}\begin{pmatrix} l_1 e_{xx} +m_1 e_{yy} +m_2 e_{zz} & n_1 e_{xy} & n_2 e_{xz}\\ n_1 e_{xy} & m_1 e_{xx} +l_1 e_{yy} +m_2 e_{zz} & n_2 e_{yz}\\ n_2 e_{xz} & n_2 e_{yz} & m_3 e_{xx} +m_3 e_{yy} +l_2 e_{zz}\\ \end{pmatrix}\end{split}\]\[\begin{split}\begin{gather} l_1=D_2+D_4+D_5, \quad l_2=D_1\\ m_1=D_2+D_4-D_5, \quad m_2=D_1+D_3 \quad m_3=D_2\\ n_1=2 D_5 \quad n_2=\sqrt{2} D_6 \end{gather}\end{split}\]- Parameters:
 m – the mesh
strains – optional dictionary of strain fuctions (‘exx’, ‘exy’ etc). If not provided, these will be taken from the mesh
- Returns:
 a (n mesh.Nn) x (n mesh.Nn) complex matrix, n=2,6 for electrons,holes
- polarization(m, key)¶
 Populates the mesh with the polarization P and potentially other related functions
- Parameters:
 mesh – the mesh
key – the key being sought
- strain_to(m, straincond={})¶
 Strains the material to the specified condition.
The straincond dict can contain a key ‘a’, in which case this will be the in-plane lattice constant. Or the straincond dict can contain separate keys ax, ay for two lattice constants.
In addition to the above choice, a zcond entry can indicate how the stress/strain in the z-direction should be handled: ‘free’ is the typical pseudomorphic condition (for wurtzite, \(e_{zz}=-C_{13}/C_{33}(e_{xx}+e_{yy})\)).
This function populates all the eij variables onto the mesh, setting zero for the shear components.
- Parameters:
 m – the mesh
straincond – see above