From 5fd74f73b71477102d90f2c10eb438eb45c4f487 Mon Sep 17 00:00:00 2001 From: "Gernot J. Kraberger" <16017581+gkraberger@users.noreply.github.com> Date: Tue, 4 Sep 2018 19:02:10 +0200 Subject: [PATCH] start with Sr2RuO4 guide --- doc/documentation.rst | 1 + doc/guide/Sr2RuO4.rst | 40 ++++++++ doc/guide/Sr2RuO4/Sr2RuO4.indmftpr | 17 ++++ doc/guide/Sr2RuO4/Sr2RuO4.struct | 96 +++++++++++++++++++ .../Sr2RuO4/calculate_dos_wannier_basis.py | 15 +++ 5 files changed, 169 insertions(+) create mode 100644 doc/guide/Sr2RuO4.rst create mode 100644 doc/guide/Sr2RuO4/Sr2RuO4.indmftpr create mode 100644 doc/guide/Sr2RuO4/Sr2RuO4.struct create mode 100644 doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py diff --git a/doc/documentation.rst b/doc/documentation.rst index b000a6c8..45f071d6 100644 --- a/doc/documentation.rst +++ b/doc/documentation.rst @@ -26,6 +26,7 @@ User guide guide/dftdmft_singleshot guide/SrVO3 guide/dftdmft_selfcons + guide/Sr2RuO4 guide/analysis guide/full_tutorial guide/transport diff --git a/doc/guide/Sr2RuO4.rst b/doc/guide/Sr2RuO4.rst new file mode 100644 index 00000000..a1e3c8b9 --- /dev/null +++ b/doc/guide/Sr2RuO4.rst @@ -0,0 +1,40 @@ +.. _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 `, we would e.g. use the ``indmftpr`` file :download:`found here `. +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 `) 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_...``. diff --git a/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr b/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr new file mode 100644 index 00000000..fa8e6be5 --- /dev/null +++ b/doc/guide/Sr2RuO4/Sr2RuO4.indmftpr @@ -0,0 +1,17 @@ +4 ! Nsort +2 1 2 2 ! Multiplicities +3 ! lmax +complex ! Sr +0 0 0 0 +0 0 0 0 +cubic ! Ru +0 0 2 0 ! include d-shell as correlated +0 0 0 0 ! there are no irreps with SO +1 ! SO-flag +complex ! O1 +0 0 0 0 +0 0 0 0 +complex ! O2 +0 0 0 0 +0 0 0 0 +-0.7 1.4 ! energy window (Ry) diff --git a/doc/guide/Sr2RuO4/Sr2RuO4.struct b/doc/guide/Sr2RuO4/Sr2RuO4.struct new file mode 100644 index 00000000..5cfd9a0d --- /dev/null +++ b/doc/guide/Sr2RuO4/Sr2RuO4.struct @@ -0,0 +1,96 @@ +Sr2RuO4 s-o calc. M|| 0.00 0.00 1.00 +B 4 39_I + RELA + 7.300012 7.300012 24.044875 90.000000 90.000000 90.000000 +ATOM -1: X=0.00000000 Y=0.00000000 Z=0.35240000 + MULT= 2 ISPLIT=-2 + -1: X=0.00000000 Y=0.00000000 Z=0.64760000 +Sr2+ NPT= 781 R0=.000010000 RMT= 2.26000 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 +Ru4+ NPT= 781 R0=.000010000 RMT= 1.95000 Z: 44.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.50000000 Y=0.00000000 Z=0.00000000 + MULT= 2 ISPLIT= 8 + -3: X=0.00000000 Y=0.50000000 Z=0.00000000 +O 2- NPT= 781 R0=.000100000 RMT= 1.68000 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 -4: X=0.00000000 Y=0.00000000 Z=0.16350000 + MULT= 2 ISPLIT=-2 + -4: X=0.00000000 Y=0.00000000 Z=0.83650000 +O 2- NPT= 781 R0=.000100000 RMT= 1.68000 Z: 8.00000 +LOCAL ROT MATRIX: 1.0000000 0.0000000 0.0000000 + 0.0000000 1.0000000 0.0000000 + 0.0000000 0.0000000 1.0000000 + 16 NUMBER OF SYMMETRY OPERATIONS + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0-1 0.00000000 + 1 A 2 so. oper. type orig. index +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0-1 0.00000000 + 2 A 3 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0-1 0.00000000 + 3 A 6 + 0-1 0 0.00000000 + 1 0 0 0.00000000 + 0 0 1 0.00000000 + 4 A 8 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0-1 0.00000000 + 5 A 9 +-1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0 1 0.00000000 + 6 A 11 + 1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0 1 0.00000000 + 7 A 14 + 0 1 0 0.00000000 +-1 0 0 0.00000000 + 0 0 1 0.00000000 + 8 A 15 + 1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0-1 0.00000000 + 9 B 1 + 0 1 0 0.00000000 + 1 0 0 0.00000000 + 0 0-1 0.00000000 + 10 B 4 + 0-1 0 0.00000000 +-1 0 0 0.00000000 + 0 0-1 0.00000000 + 11 B 5 + 1 0 0 0.00000000 + 0-1 0 0.00000000 + 0 0 1 0.00000000 + 12 B 7 +-1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0-1 0.00000000 + 13 B 10 + 0 1 0 0.00000000 + 1 0 0 0.00000000 + 0 0 1 0.00000000 + 14 B 12 + 0-1 0 0.00000000 +-1 0 0 0.00000000 + 0 0 1 0.00000000 + 15 B 13 +-1 0 0 0.00000000 + 0 1 0 0.00000000 + 0 0 1 0.00000000 + 16 B 16 diff --git a/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py b/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py new file mode 100644 index 00000000..7cb8462a --- /dev/null +++ b/doc/guide/Sr2RuO4/calculate_dos_wannier_basis.py @@ -0,0 +1,15 @@ +from triqs_dft_tools.converters.wien2k_converter import Wien2kConverter +from triqs_dft_tools import SumkDFTTools + +filename = 'Sr2RuO4' + +conv = Wien2kConverter(filename = filename,hdf_filename=filename+'.h5') +conv.convert_dft_input() + +SK = SumkDFTTools(filename+'.h5') +mesh = (-10.0,10.0,500) +SK.dos_wannier_basis(broadening=(mesh[1]-mesh[0])/float(mesh[2]), + mesh=mesh, + save_to_file=True, + with_Sigma=False, + with_dc=False)