Perform Fermi surfaces calculations using PKKprime code
The computation of Fermi surfaces, or band structures can be easily done
setting the RUNOPTION qdos (see Qdos tutorial). The "qdos approach" is based on the scan of the k-space for a given energy (or different energy values if we are interested on band-structure calculations) by the spectral function
:
\rho(E+i\eta,k) = \frac{\eta}{\pi}\frac{1}{(E-\epsilon_k)^2 + \eta^2}
.
So the density is written as a Lorentzian which
reaches its maximum
\frac{1}{\eta\pi}
at
E=\epsilon_{\vec{k},\sigma}
. All the maximums of this spectral
function constitute the Fermi surface (at
E=E_f
).
Even if this method is straightforward, it has some inconveniences.
First in order to obtain accurate dispersions fine
(\vec{k},E)
meshes must be chosen, which increases computation time. Also a precise
Fermi surface computation requires a small
\eta
which increases as
well the computational effort. Finally because of the spreading around
E=\epsilon_{\vec{k},\sigma}
the exact value of
\vec{k}
is
not known which is a necessary input data for further calculations,
particularly transport ones. However, the 'qdos method' allows to have
a first glance on the Fermi surface, before launching more accurate
computations with the PKKprime code.
Fermi surface calculation
The goal is to solve numerically the secular equation of KKR :
|\underline{\underline{M}}(\vec{k},E)|=0
where
\underline{\underline{M}}(\vec{k},E)=\delta_{\Lambda\Lambda'}-\sum\limits_{\Lambda*} g_{\Lambda\Lambda*}(\vec{k};E) t_{\Lambda''\Lambda'}(E)
and
\Lambda=(L,\sigma)
.
In most cases this equation can't be solved analytically so a "trick"
is done. This trick consists on rather solving:
\underline{\underline{M}}(\vec{k},E) \underline{c_\nu} = \lambda_\nu(\vec{k},E) \underline{c_\nu}
and find the
eigenvalue which satisfies the following condition
\lambda_\nu(\vec{k},E)=0
.
Thus the objective is to scan the
k-space, for a fixed energy
E
, and find
\min\limits_{\vec{k},\nu}(|\lambda_\nu(\vec{k},E)|)
.
Qualitative explanation of the iterative method
The main feature of this method is that the Brillouin zone, will be
divided into cubes and into each cube the secular equation
\underline{\underline{M}}(\vec{k},E) \underline{c_\nu} = \lambda_\nu(\vec{k},E) \underline{c_\nu}
for
\lambda_\nu(\vec{k},E)=0
will be solved numerically. However,
scanning the k-space can be a heavy computational task, especially for
3D Brillouin zones. That's why an iterative method is done in order to
refine the mesh and keep in memory only the zones crossed by a band. So
in a first step the algorithm will quad the Brillouin zone, into
tetrahedras (triangles in 2D), and then evaluate if along the edges we
can find a solution satisfying
|\lambda_\nu(\vec{k},E)|<a_n
,
where
a_n
is a given accuracy.
If a solution is found along a tetrahedra edges, the mesh is refined in
this region. Otherwise, we don't take any more into account this
spatial region. This step is repeated until we reach the final number of
desired cubes in the Brillouin zone (Total cubes number = cubes with
intersect the bands and cubes which doesn't intersect the bands).
Once the mesh is refined to a certain accuracy, the research of
\vec{k}
that minimize
\lambda_\nu(\vec{k},E)
start in the
cubes which are crossed by a band (found in the previous step). For
doing so a dichotomy procedure is employed:
- The spectrum of
\underline{\underline{M}}(\vec{k},E)
is calculated for discrete k-points in the tetrahedra edges.
- The local
\Omega_k
region where the transition \lambda_\nu(\vec{k},E) > 0 \rightarrow \lambda_\nu(\vec{k},E) < 0
is kept in memory. So by the Bijection Theorem, \exists \vec{k}_0 \in \Omega_k, \lambda_\nu(\vec{k}_0,E)=0
.
- The k-mesh in
\Omega_k
is refined.
- The same steps are repeated until the given accuracy is reached, or the maximal number of steps is exhausted.