mirror of
https://github.com/triqs/dft_tools
synced 2024-11-18 03:53:48 +01:00
Reshuffled doc on SOC and Basisrotations
This commit is contained in:
parent
35584a841c
commit
ad0f2b54b9
@ -33,8 +33,16 @@ DFT+DMFT
|
|||||||
|
|
||||||
guide/dftdmft_singleshot
|
guide/dftdmft_singleshot
|
||||||
guide/dftdmft_selfcons
|
guide/dftdmft_selfcons
|
||||||
guide/Sr2RuO4
|
|
||||||
guide/BasisRotation
|
Advanced Topics
|
||||||
|
---------------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
guide/basisrotation
|
||||||
|
guide/soc
|
||||||
|
guide/removeorbitals
|
||||||
|
|
||||||
Postprocessing
|
Postprocessing
|
||||||
--------------
|
--------------
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
.. _plovasp:
|
.. _basisrotation:
|
||||||
|
|
||||||
Numerical Treatment of the Sign-Problem: Basis Rotations
|
Numerical Treatment of the Sign-Problem: Basis Rotations
|
||||||
=======
|
=======
|
||||||
|
|
||||||
When performing calculations with off-diagonal complex hybridisation or local Hamiltonian, one is
|
When performing calculations with off-diagonal terms in the hybridisation function or in the local Hamiltonian, one is
|
||||||
often limited by the fermionic sign-problem. However, as the sign is no
|
often limited by the fermionic sign-problem slowing down the QMC calculations significantly. This can occur for instance if the crystal shows locally rotated or distorted cages, or when spin-orbit coupling is included. The examples for this are included in the :ref:`tutorials` of this documentation.
|
||||||
physical observable, one can try to improve the calculation by rotating
|
|
||||||
to another basis.
|
|
||||||
|
|
||||||
While the choice of basis to perform the calculation in can be chosen
|
However, as the fermonic sign in the QMC calculation is no
|
||||||
arbitrarily, two choices which have shown good results are the basis
|
physical observable, one can try to improve the calculation by rotating
|
||||||
which diagonalizes the local Hamiltonian or the density matrix of then
|
to another basis. While this basis can in principle be chosen arbitrarily,
|
||||||
|
two choices which have shown good results; name the basis sets that diagonalize the local Hamiltonian or the local density matrix of the
|
||||||
system.
|
system.
|
||||||
|
|
||||||
The transformation matrix can be stored in the :class:`BlockStructure` and the
|
The transformation matrix can be stored in the :class:`BlockStructure` and the
|
||||||
@ -21,7 +20,7 @@ and :meth:`put_Sigma` (see below).
|
|||||||
Finding the Transformation Matrix
|
Finding the Transformation Matrix
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
The :class:`TransBasis` class offers a simple mehod to calculate the transformation
|
The :class:`TransBasis` class offers a simple method to calculate the transformation
|
||||||
matrices to a basis where either the local Hamiltonian or the density matrix
|
matrices to a basis where either the local Hamiltonian or the density matrix
|
||||||
is diagonal::
|
is diagonal::
|
||||||
|
|
||||||
@ -46,9 +45,10 @@ One can transform Green's functions manually using the :meth:`convert_gf` method
|
|||||||
Automatic transformation during the DMFT loop
|
Automatic transformation during the DMFT loop
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
During a DMFT loop one is switching back and forth between Sumk-Space and Solver-Space
|
During a DMFT loop one is often switching back and forth between the unrotated basis (Sumk-Space) and the rotated basis that is used by the QMC Solver. However, this need not be done manually each time. Instead,
|
||||||
in each iteration. Once the block_structure.transformation property is set, this can be
|
once the block_structure.transformation property is set as shown above, this is
|
||||||
done automatically::
|
done automatically, meaning that :class:`SumkDFT`'s :meth:`extract_G_loc`
|
||||||
|
and :meth:`put_Sigma` are doing the transformations by default::
|
||||||
|
|
||||||
for it in range(iteration_offset, iteration_offset + n_iterations):
|
for it in range(iteration_offset, iteration_offset + n_iterations):
|
||||||
# every GF is in solver space here
|
# every GF is in solver space here
|
||||||
|
21
doc/guide/Sr2MgOsO6/Sr2MgOsO6.indmftpr
Normal file
21
doc/guide/Sr2MgOsO6/Sr2MgOsO6.indmftpr
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
5 ! Nsort
|
||||||
|
2 1 1 4 2 ! Mult(Nsort)
|
||||||
|
3 ! lmax
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
cubic ! choice of angular harmonics
|
||||||
|
0 0 2 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
0 ! SO flag
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
complex
|
||||||
|
0 0 0 0
|
||||||
|
0 0 0 0
|
||||||
|
-0.088 0.43 ! 0.40 gives warnings, 0.043 gives occ 1.996
|
||||||
|
0.04301
|
72
doc/guide/Sr2MgOsO6/Sr2MgOsO6.struct
Normal file
72
doc/guide/Sr2MgOsO6/Sr2MgOsO6.struct
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
Sr2MgOsO6 s-o calc. M|| 0.00 0.00 1.00
|
||||||
|
B 5 87
|
||||||
|
RELA
|
||||||
|
10.507954 10.507954 14.968880 90.000000 90.000000 90.000000
|
||||||
|
ATOM -1: X=0.00000000 Y=0.50000000 Z=0.75000000
|
||||||
|
MULT= 2 ISPLIT=-2
|
||||||
|
-1: X=0.50000000 Y=0.00000000 Z=0.75000000
|
||||||
|
Sr 2+ NPT= 781 R0=.000010000 RMT= 2.50000 Z: 38.00000
|
||||||
|
LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
|
||||||
|
0.0000000 1.0000000 0.0000000
|
||||||
|
0.0000000 0.0000000 1.0000000
|
||||||
|
ATOM -2: X=0.00000000 Y=0.00000000 Z=0.00000000
|
||||||
|
MULT= 1 ISPLIT=-2
|
||||||
|
Os 6+ NPT= 781 R0=.000005000 RMT= 1.94 Z: 76.00000
|
||||||
|
LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
|
||||||
|
0.0000000 1.0000000 0.0000000
|
||||||
|
0.0000000 0.0000000 1.0000000
|
||||||
|
ATOM -3: X=0.00000000 Y=0.00000000 Z=0.50000000
|
||||||
|
MULT= 1 ISPLIT=-2
|
||||||
|
Mg 2+ NPT= 781 R0=.000100000 RMT= 1.89 Z: 12.00000
|
||||||
|
LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
|
||||||
|
0.0000000 1.0000000 0.0000000
|
||||||
|
0.0000000 0.0000000 1.0000000
|
||||||
|
ATOM -4: X=0.74270000 Y=0.21790000 Z=0.00000000
|
||||||
|
MULT= 4 ISPLIT= 8
|
||||||
|
-4: X=0.25730000 Y=0.78210000 Z=0.00000000
|
||||||
|
-4: X=0.21790000 Y=0.25730000 Z=0.00000000
|
||||||
|
-4: X=0.78210000 Y=0.74270000 Z=0.00000000
|
||||||
|
O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000
|
||||||
|
LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
|
||||||
|
0.0000000 1.0000000 0.0000000
|
||||||
|
0.0000000 0.0000000 1.0000000
|
||||||
|
ATOM -5: X=0.00000000 Y=0.00000000 Z=0.75390000
|
||||||
|
MULT= 2 ISPLIT=-2
|
||||||
|
-5: X=0.00000000 Y=0.00000000 Z=0.24610000
|
||||||
|
O 2- NPT= 781 R0=.000100000 RMT= 1.58 Z: 8.00000
|
||||||
|
LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000
|
||||||
|
0.0000000 1.0000000 0.0000000
|
||||||
|
0.0000000 0.0000000 1.0000000
|
||||||
|
8 NUMBER OF SYMMETRY OPERATIONS
|
||||||
|
0-1 0 0.00000000
|
||||||
|
1 0 0 0.00000000
|
||||||
|
0 0-1 0.00000000
|
||||||
|
1
|
||||||
|
-1 0 0 0.00000000
|
||||||
|
0-1 0 0.00000000
|
||||||
|
0 0-1 0.00000000
|
||||||
|
2
|
||||||
|
1 0 0 0.00000000
|
||||||
|
0 1 0 0.00000000
|
||||||
|
0 0-1 0.00000000
|
||||||
|
3
|
||||||
|
0-1 0 0.00000000
|
||||||
|
1 0 0 0.00000000
|
||||||
|
0 0 1 0.00000000
|
||||||
|
4
|
||||||
|
0 1 0 0.00000000
|
||||||
|
-1 0 0 0.00000000
|
||||||
|
0 0-1 0.00000000
|
||||||
|
5
|
||||||
|
-1 0 0 0.00000000
|
||||||
|
0-1 0 0.00000000
|
||||||
|
0 0 1 0.00000000
|
||||||
|
6
|
||||||
|
1 0 0 0.00000000
|
||||||
|
0 1 0 0.00000000
|
||||||
|
0 0 1 0.00000000
|
||||||
|
7
|
||||||
|
0 1 0 0.00000000
|
||||||
|
-1 0 0 0.00000000
|
||||||
|
0 0 1 0.00000000
|
||||||
|
8
|
21
doc/guide/Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr
Normal file
21
doc/guide/Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
5 ! Nsort
|
||||||
|
2 1 1 4 2 ! Mult(Nsort)
|
||||||
|
3 ! lmax
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
cubic ! choice of angular harmonics
|
||||||
|
0 0 2 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
1 ! SO flag
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
complex ! choice of angular harmonics
|
||||||
|
0 0 0 0 ! l included for each sort
|
||||||
|
0 0 0 0 ! If split into ireps, gives number of ireps. for a given orbital (otherwise 0)
|
||||||
|
complex
|
||||||
|
0 0 0 0
|
||||||
|
0 0 0 0
|
||||||
|
-0.088 0.43 ! 0.40 gives warnings, 0.043 gives occ 1.996
|
||||||
|
0.04301
|
@ -1,40 +0,0 @@
|
|||||||
.. _Sr2RuO4:
|
|
||||||
|
|
||||||
Spin-orbit coupled calculations (single-shot)
|
|
||||||
=============================================
|
|
||||||
|
|
||||||
There are two main ways of including the spin-orbit coupling (SO) term into
|
|
||||||
DFT+DMFT calculations:
|
|
||||||
|
|
||||||
- by performing a DFT calculation including SO and then doing a DMFT calculation on top, or
|
|
||||||
- by performing a DFT calculation without SO and then adding the SO term on the model level.
|
|
||||||
|
|
||||||
Treatment of SO in DFT
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
For now, TRIQS/DFTTools does only work with Wien2k when performing calculations with SO.
|
|
||||||
Of course, the general Hk framework is also possible.
|
|
||||||
But the way VASP treats SO is fundamentally different to the way Wien2k treats it and the interface does not handle that at the moment.
|
|
||||||
|
|
||||||
Therefore, this guide assumes that Wien2k is being used.
|
|
||||||
|
|
||||||
First, a Wien2k calculation including SO has to be performed.
|
|
||||||
For details, we refer the reader to the documentation of Wien2k.
|
|
||||||
The interface to Wien2k only works when the DFT calculation is done both spin-polarized and with SO (that means that you have to initialize the Wien2k calculation accordingly and then run with ``runsp -sp``).
|
|
||||||
|
|
||||||
Performing the projection
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Note that the final ``x lapw2 -almd -so -up`` and ``x lapw2 -almd -so -dn`` have to be run *on a single core*, which implies that, before, ``x lapw1 -up``, ``x lapw2 -dn``, and ``x lapwso -up`` have to be run in single-core mode (once).
|
|
||||||
|
|
||||||
In the ``case.indmftpr`` file, the spin-orbit flag has to be set to ``1`` for the correlated atoms.
|
|
||||||
For example, for the compound Sr\ :sub:`2`\ RuO\ :sub:`4`, with the struct file :download:`Sr2RuO4.struct <Sr2RuO4/Sr2RuO4.struct>`, we would e.g. use the ``indmftpr`` file :download:`found here <Sr2RuO4/Sr2RuO4.indmftpr>`.
|
|
||||||
Then, ``dmftproj -sp -so`` has to be called.
|
|
||||||
As usual, it is important to check for warnings (e.g., about eigenvalues of the overlap matrix) in the output of ``dmftproj`` and adapt the window until these warnings disappear.
|
|
||||||
|
|
||||||
Note that in presence of SO, it is not possible to project only onto the :math:`t_{2g}` subshell because it is not an irreducible representation.
|
|
||||||
A redesign of the orthonormalization procedure might happen in the long term, which might allow that.
|
|
||||||
|
|
||||||
We strongly suggest using the :py:meth:`.dos_wannier_basis` functionality of the :py:class:`.SumkDFTTools` class (see :download:`calculate_dos_wannier_basis.py <Sr2RuO4/calculate_dos_wannier_basis.py>`) and compare the Wannier-projected orbitals to the original DFT DOS (they should be more or less equal).
|
|
||||||
Note that, with SO, there are usually off-diagonal elements of the spectral function, which can also be imaginary.
|
|
||||||
The imaginary part can be found in the third column of the files ``DOS_wann_...``.
|
|
6
doc/guide/removeorbitals.rst
Normal file
6
doc/guide/removeorbitals.rst
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.. _removeorbitals:
|
||||||
|
|
||||||
|
Reducing the number of orbitals for the Solver
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
To be done...
|
41
doc/guide/soc.rst
Normal file
41
doc/guide/soc.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
.. _soc:
|
||||||
|
|
||||||
|
Spin-orbit coupled calculations (single-shot)
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
There are two main ways of including the spin-orbit coupling (SOC) term into
|
||||||
|
DFT+DMFT calculations:
|
||||||
|
|
||||||
|
- by performing a DFT calculation including SOC and then doing a DMFT calculation on top, or
|
||||||
|
- by performing a DFT calculation without SOC and then adding the SOC term on the model level.
|
||||||
|
|
||||||
|
Treatment of SOC in DFT
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
For now, TRIQS/DFTTools does only work with Wien2k when performing calculations with SO.
|
||||||
|
The treatment of SOC in the VASP package is fundamentally different to the way Wien2k treats it, and the interface does not handle that at the moment.
|
||||||
|
Therefore, this guide describes how to do an AOC calculation using the Wien2k DFT package.
|
||||||
|
|
||||||
|
First, a Wien2k calculation including SOC has to be performed.
|
||||||
|
For details, we refer the reader to the documentation of Wien2k. As a matter of fact, we need the output for the DFT band structure for both spin directions explicitly. That means that one needs to do a spin-polarised DFT calculation with SOC, but, however, with magnetic moment set to zero. In the Wien2k initialisation procedure, one can choose for the option -nom when ``lstart`` is called. This means that the charge densities are initialised without magnetic splitting. The SOC calculation is then performed in a standard way as described in the Wien2k manual.
|
||||||
|
|
||||||
|
Performing the projection
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Note that the final ``x lapw2 -almd -so -up`` and ``x lapw2 -almd -so -dn`` have to be run *on a single core*, which implies that, before, ``x lapw2 -up``, ``x lapw2 -dn``, and ``x lapwso -up`` have to be run in single-core mode (at least once).
|
||||||
|
|
||||||
|
In the ``case.indmftpr`` file, the spin-orbit flag has to be set to ``1`` for the correlated atoms.
|
||||||
|
For example, for the compound Sr\ :sub:`2`\ MgOsO\ :sub:`6`, with the struct file :download:`Sr2MgOsO6.struct <Sr2MgOsO6/Sr2MgOsO6.struct>`, we would, e.g., use the ``indmftpr`` file :download:`found here <Sr2MgOsO6/Sr2MgOsO6_SOC.indmftpr>`.
|
||||||
|
Then, ``dmftproj -sp -so`` has to be called.
|
||||||
|
As usual, it is important to check for warnings (e.g., about eigenvalues of the overlap matrix) in the output of ``dmftproj`` and adapt the window until these warnings disappear.
|
||||||
|
|
||||||
|
Note that in presence of SOC, it is not possible to project only onto the :math:`t_{2g}` subshell because it is not an irreducible representation.
|
||||||
|
|
||||||
|
|
||||||
|
We strongly suggest using the :py:meth:`.dos_wannier_basis` functionality of the :py:class:`.SumkDFTTools` class (see :download:`calculate_dos_wannier_basis.py <Sr2RuO4/calculate_dos_wannier_basis.py>`) and compare the Wannier-projected orbitals to the original DFT DOS (they should be more or less equal).
|
||||||
|
Note that, with SOC, there are usually off-diagonal elements of the spectral function, which can also be imaginary.
|
||||||
|
The imaginary part can be found in the third column of the files ``DOS_wann_...``.
|
||||||
|
|
||||||
|
After the projection, one can proceed with the DMFT calculation. However, two things need to be noted here. First, since the spin is not a good quantum number any more, there are off-diagonal elements in the hybridisation function and the local Hamiltonian coupling the two spin directions. This will eventually lead to a fermonic sign problem when QMC is used as a impurity solver. Second, although the :math:`e_{g}` subshell needs to be included in the projection, it can in many cases be neglected in the solution of the Anderson impurity model, after a transformation to a rotated local basis is done. This basis diagonalising the local Hamiltonian in the presence of SOC, is often called the numerical j-Basis. How rotations are performed is described in :ref:`basisrotation`, and the cutting of the orbitals in :ref:`removeorbitals`.
|
||||||
|
|
||||||
|
A DMFT calculation including SOC for Sr2MgOsO6 is included in the :ref:`tutorials`.
|
Loading…
Reference in New Issue
Block a user