by Benedikt Maurer for exciting neon
(Jupyter notebook by Mara Voiculescu & Martin Kuban)
Purpose: In this tutorial you will learn how to calculate the spin texture with exciting
for GaAs.
Read the following paragraphs before starting with the rest of this tutorial!
Before running any Jupyter tutorials, please refer to the 00_before_starting.md
document on how to correctly set up the environment. This only needs to be done once. After which, the venv can be (re)activated from exciting
's root directory:
source tools/excitingjupyter/venv/excitingvenv/bin/activate
As a first step, you may create a running directory for the notebook.
%%bash
mkdir -p run_tutorial_spin_texture
An interesting property of the electronic structure with spin-orbit coupling (SOC) is the so-called spin texture. It can be used, e.g., to differentiate between the Rashba and the Dresselhaus effect (see Kepenekian2015).
The spin texture $\boldsymbol s(n,\boldsymbol k)$ is defined as the expectation value of a vector of Pauli matrices on a two dimensional k-grid. At k for the state n it is defined as:
\begin{equation} \tag{1} \boldsymbol s(n,\boldsymbol k) = \langle n,\boldsymbol k|\boldsymbol \sigma | n,\boldsymbol k \rangle \end{equation}To calculate the spin texture for GaAs, create the file input.xml and save the following lines into it:
<input>
<title>GaAs spin texture</title>
<structure speciespath="$EXCITINGROOT/species">
<crystal scale="10.683" >
<basevect> 0.0 0.5 0.5 </basevect>
<basevect> 0.5 0.0 0.5 </basevect>
<basevect> 0.5 0.5 0.0 </basevect>
</crystal>
<species speciesfile='Ga.xml' rmt='2.0'>
<atom coord="0.00 0.00 0.00"/>
</species>
<species speciesfile='As.xml' rmt='2.0'>
<atom coord="0.25 0.25 0.25"/>
</species>
</structure>
<groundstate
do="fromscratch"
xctype="GGA_PBE"
rgkmax="6"
gmaxvr="15"
ngridk="4 4 4"
swidth="1d-6"
epsengy="1d-6"
maxscl="40"
nempty="15">
<spin spinorb="true"/>
</groundstate>
<properties>
<spintext bands="23 30">
<plot2d>
<parallelogram grid = "12 12">
<origin coord = "-0.042506 -0.042506 -0.085013"/>
<point coord = "-0.042506 0.050235 0.007728"/>
<point coord = " 0.050235 -0.042506 0.007728"/>
</parallelogram>
</plot2d>
</spintext>
</properties>
</input>
from excitingjupyter.utilities import get_input_xml_from_notebook
# Extract input file content from this notebook:
input_str = get_input_xml_from_notebook("03_tutorial_spin_texture_calculation", "SPIN_TEXTURE")
# Write out the input as an XML file:
with open('./run_tutorial_spin_texture/input.xml', "w") as fid:
fid.write(input_str)
Then, set up the correct species path and run exciting
to perform the groundstate calculation:
%%bash
cd run_tutorial_spin_texture
python3 -m excitingscripts.setup.excitingroot
time $EXCITINGROOT/bin/exciting_smp input.xml
cd ..
Note that spin-orbit coupling (SOC) is enabled spinorb="true"
. Spin texture calculations are only allowed for ground states with enabled SOC.
Note also the spintext
element in the properties
element:
bands
attribute defines the band range that is considered. In this case we are interested in the bands around the band gap. You can extract the band numbers from the EIGVAL.OUT.parallelogram
element defines the k-grid for the spin texture calculation. The k-points are homogeneously distributed on a parallelogram in the reciprocal space. In the example of this tutorial, we consider a square with sidelength 0.1 [a.u.] (a.u. = Bohr-1) in the (kx, ky) plane. The centre of this square is the Γ point and the borders are parallel to the Cartesian kx and ky axes.grid
defines the number of k-points per direction.origin
and the points defined by point
.Be aware of that coord
is given in reciprocal coordinates.
When the calculation is done, you can plot the spin texture for the first conduction band using the script excitingscripts.plot.spintext
(for a detailed description of the script arguments see The python script "plot.spintext") as follows:
%%bash
cd run_tutorial_spin_texture
python3 -m excitingscripts.plot.spintext -b 29 -c energy
cd ..
-b
defines the band that is considered for the plot which is in this case the first conduction band. You can extract the numbers of the states from EIGVAL.OUT.-c
specifies if the energy or the z component of the spin orientation is considered for the contour plot. The choices are "energy" or "spin_z".Note that the script is designed for rectangular spin textures!
The resulting PNG file PLOT-spintext.png can be should look like the following:
In the plot, k1 and k2 correspond to the k-vectors (k1,0,0)T and (0,k2,0)T, respectively. The color map represents the energy of the chosen state. Note that the unit of k1 and k2 are given in atomic units (Bohr-1).