Hello,
QTCAD's Schrödinger solver is capable of including strain in a calculation (see https://docs.nanoacademic.com/qtcad/theory/schrodinger/#strain) under the Bir-Pikus formalism. Because QTCAD solves for nanostructure eigenstates using k.p or effective-mass theory under the envelope function approximation, we are typically only interested in band edges of parabolic bands, and not entire band structures. Therefore, while QTCAD can account for strain when solving Schrödinger's equation under the envelope function approximation, it does not compute band structures.
If you are interested in including strain in a QTCAD simulation, below is a brief overview of how to proceed (with relevant references):
The material parameters that parametrize the effect of strain under the Bir-Pikus formalism are the deformation potentials which are set via the material attributes (see qtcad/device/materials.py) "cond_band_def_pot"
(for electron/conduction-band calculations) and "vlnce_band_def_pot"
(for hole/valence-band calculations). The default QTCAD values can be adjusted for your purposes via the set_param
method of Material
objects (https://docs.nanoacademic.com/qtcad/API_reference/qtcad.device.materials/#qtcad.device.materials.Material.set_param).
The strain tensor itself can be set throughout the device using the set_strain
method of the device class (https://docs.nanoacademic.com/qtcad/API_reference/qtcad.device.device/#qtcad.device.device.Device.set_strain). This method can be used to set the a uniform strain tensor throughout the device by passing a 3 x 3 numpy
array as an argument, or can be used to set a non-uniform strain throughout the device by passing a function of space which outputs a 3 x 3 numpy
array as an argument (see https://docs.nanoacademic.com/qtcad/tutorials/device/holes_strain/ for an example).
I hope this helps. Please let us know if you have any other concerns/questions.