|
|
###### Perform Fermi surfaces calculations using pkkr code
|
|
|
###### 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](jumu/qdos "wikilink")). 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\$).
|
|
|
setting the *RUNOPTION* *qdos* (see [Qdos tutorial](jumu/qdos "wikilink")). 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)\$
|
|
|
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
|
|
|
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
|
|
|
$`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 pkkr code.
|
|
|
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)\$.
|
|
|
The goal is to solve numerically the secular equation of KKR :
|
|
|
|
|
|
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
|
|
|
$`\|\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)\|)\$.
|
|
|
$`\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,
|
|
|
$`\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.
|
|
|
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
|
... | ... | @@ -61,13 +61,13 @@ 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
|
|
|
$`\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$ -> $\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 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`$ -> $`\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.`
|
|
|
|
|
|
```{=mediawiki}
|
... | ... | |