mirror of
https://github.com/triqs/dft_tools
synced 2024-09-11 21:28:31 +02: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_selfcons
|
||||
guide/Sr2RuO4
|
||||
guide/BasisRotation
|
||||
|
||||
Advanced Topics
|
||||
---------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
guide/basisrotation
|
||||
guide/soc
|
||||
guide/removeorbitals
|
||||
|
||||
Postprocessing
|
||||
--------------
|
||||
|
@ -1,16 +1,15 @@
|
||||
.. _plovasp:
|
||||
.. _basisrotation:
|
||||
|
||||
Numerical Treatment of the Sign-Problem: Basis Rotations
|
||||
=======
|
||||
|
||||
When performing calculations with off-diagonal complex hybridisation or local Hamiltonian, one is
|
||||
often limited by the fermionic sign-problem. However, as the sign is no
|
||||
physical observable, one can try to improve the calculation by rotating
|
||||
to another basis.
|
||||
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 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.
|
||||
|
||||
While the choice of basis to perform the calculation in can be chosen
|
||||
arbitrarily, two choices which have shown good results are the basis
|
||||
which diagonalizes the local Hamiltonian or the density matrix of then
|
||||
However, as the fermonic sign in the QMC calculation is no
|
||||
physical observable, one can try to improve the calculation by rotating
|
||||
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.
|
||||
|
||||
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
|
||||
-----------------
|
||||
|
||||
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
|
||||
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
|
||||
-----------------
|
||||
|
||||
During a DMFT loop one is switching back and forth between Sumk-Space and Solver-Space
|
||||
in each iteration. Once the block_structure.transformation property is set, this can be
|
||||
done automatically::
|
||||
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,
|
||||
once the block_structure.transformation property is set as shown above, this is
|
||||
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):
|
||||
# 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