mirror of
https://github.com/triqs/dft_tools
synced 2025-01-03 10:05:49 +01:00
SVO tutorial finalized, added remarks on VASP version in VASP interface guide, added CSC guide, small typo corrections in other files
This commit is contained in:
parent
e26444201a
commit
18abc77e33
@ -35,6 +35,9 @@ Limitations of the interface
|
|||||||
* The interface currently supports only collinear-magnetism calculation
|
* The interface currently supports only collinear-magnetism calculation
|
||||||
(this implies no spin-orbit coupling) and spin-polarized projectors have not
|
(this implies no spin-orbit coupling) and spin-polarized projectors have not
|
||||||
been tested.
|
been tested.
|
||||||
|
* The converter needs the correct Fermi energy from VASP, which is read from
|
||||||
|
the LOCPROJ file. However, VASP by default does not output this information.
|
||||||
|
Please see `Remarks on the VASP version`_.
|
||||||
|
|
||||||
VASP: generating raw projectors
|
VASP: generating raw projectors
|
||||||
===============================
|
===============================
|
||||||
@ -58,7 +61,7 @@ for more information. The formalism for this type of projectors is presented in
|
|||||||
<https://cms.mpi.univie.ac.at/wiki/index.php/LOCPROJ>`_.
|
<https://cms.mpi.univie.ac.at/wiki/index.php/LOCPROJ>`_.
|
||||||
|
|
||||||
The allowed labels of the local states defined in terms of cubic
|
The allowed labels of the local states defined in terms of cubic
|
||||||
harmonics are:
|
harmonics are (mind the order):
|
||||||
|
|
||||||
* Entire shells: `s`, `p`, `d`, `f`
|
* Entire shells: `s`, `p`, `d`, `f`
|
||||||
|
|
||||||
@ -373,3 +376,40 @@ For two correlated sites, one can define the file as follows:
|
|||||||
1.0 0.0 0.0 0.0 0.0
|
1.0 0.0 0.0 0.0 0.0
|
||||||
0.0 1.0 0.0 0.0 0.0
|
0.0 1.0 0.0 0.0 0.0
|
||||||
0.0 0.0 0.0 1.0 0.0
|
0.0 0.0 0.0 1.0 0.0
|
||||||
|
|
||||||
|
Remarks on the VASP version
|
||||||
|
===============================
|
||||||
|
|
||||||
|
In the current version of the interface the Fermi energy is extracted from the
|
||||||
|
`LOCPROJ` file. The file should contain the Fermi energy in the header. One can
|
||||||
|
either copy the Fermi energy manually there after a successful VASP run, or
|
||||||
|
modify the VASP source code slightly, by replacing the following line in
|
||||||
|
`locproj.F` (around line 695):
|
||||||
|
::
|
||||||
|
WRITE(99,'(4I6," # of spin, # of k-points, # of bands, # of proj" )') NS,NK,NB,NF
|
||||||
|
|
||||||
|
with:
|
||||||
|
::
|
||||||
|
WRITE(99,'(4I6,F12.7," # of spin, # of k-points, # of bands, # of proj, Efermi" )') W%WDES%NCDIJ,NK,NB,NF,EFERMI
|
||||||
|
|
||||||
|
Please make sure that mixing in VASP is turned of IMIX=0 for CSC calculations. Otherwise VASP mixes the charge density, which in the worst case removes the effect of CSC completely.
|
||||||
|
|
||||||
|
Another critical point for CSC calculations is the function call of
|
||||||
|
`LPRJ_LDApU` in VASP. This function is not needed, and was left there for debug
|
||||||
|
purposes, but is called every iteration. Removing the call to this function in `electron.F` in line 644 speeds up the calculation significantly in the `ICHARG=5` mode. Moreover, this prevents VASP from generating the `GAMMA` file, which should ideally only be done by the DMFT code after a successful DMFT step, and then be read by VASP.
|
||||||
|
|
||||||
|
|
||||||
|
Furthermore, there is an bug in `fileio.F` around line 1710 where the code tries
|
||||||
|
print out "reading the density matrix from Gamma", but this should be done only
|
||||||
|
by the master node, and VASP gets stuck sometimes. So I added a `IF (IO%IU0>=0)
|
||||||
|
THEN ... ENDIF` statement. Also, VASP gets sometimes stuck and does not write
|
||||||
|
the `OSZICAR` file correctly due to a stuck buffer. I added a flush to the
|
||||||
|
buffer to have a correctly written `OSZICAR` to extract the DFT energy. To do
|
||||||
|
so, one can add in `electron.F` around line 580 after
|
||||||
|
::
|
||||||
|
CALL STOP_TIMING("G",IO%IU6,"DOS")
|
||||||
|
|
||||||
|
two lines:
|
||||||
|
::
|
||||||
|
flush(17)
|
||||||
|
print *, ' '
|
||||||
|
@ -124,28 +124,55 @@ example how such a self-consistent calculation is performed from scratch.
|
|||||||
VASP + PLOVasp
|
VASP + PLOVasp
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
.. warning::
|
Unlike Wien2k implementation the charge self-consistent DMFT cycle in the
|
||||||
This is a preliminary documentation valid for the alpha-version of the interface.
|
framework of PLOVasp interface is controlled by an external script. Because of
|
||||||
Modifications to the implementation might be introduced before the final release.
|
the specific way the DFT self-consistency is implemented in VASP the latter has
|
||||||
|
to run parallel to the DMFT script, with the synchronisation being ensured by a
|
||||||
|
lock file.
|
||||||
|
|
||||||
Unlike Wien2k implementation the charge self-consistent DMFT cycle
|
Once VASP reaches the point where the projectors are generated
|
||||||
in the framework of PLOVasp interface is controlled by an external script.
|
it creates a lock file `vasp.lock` and waits until the lock file is
|
||||||
Because of the specific way the DFT self-consistency is implemented in VASP
|
removed. The shell script, in turn, waits for the VASP process and once
|
||||||
the latter has to run parallel to the DMFT script, with the synchronisation being
|
the lock file is created it starts a DMFT iteration. The DMFT iteration
|
||||||
ensured by a lock file. PLOVasp interface provides a shell-script :program:`vasp_dmft.sh`
|
must finish by generating a Kohn-Sham (KS) density matrix (file `GAMMA`)
|
||||||
which takes care of the process management. The user must, however, specify a path
|
and removing the lock file. The VASP process then reads in `GAMMA`
|
||||||
to VASP code and provide the DMFT Python-script.
|
and proceeds with the next iteration. PLOVasp interface provides a shell-script :program:`vasp_dmft` (in the triqs bin directory):
|
||||||
|
::
|
||||||
|
vasp_dmft [-n <number of cores>] -i <number of iterations> -j <number of VASP iterations with fixed charge density> [-v <VASP version>] [-p <path to VASP directory>] [<dmft_script.py>]
|
||||||
|
|
||||||
|
If the number of cores is not specified it is set to 1 by default.
|
||||||
|
|
||||||
|
<dmft_script.py> must provide an importable function 'dmft_cycle()'
|
||||||
|
which is invoked once per DFT+DMFT iteration. If the script name is
|
||||||
|
omitted the default name 'csc_dmft.py' is used.
|
||||||
|
|
||||||
|
If the path to VASP directory is not specified it must be provided by a
|
||||||
|
variable VASP_DIR.
|
||||||
|
|
||||||
|
Set the version of VASP by -v standard(default)/no_gamma_write to
|
||||||
|
specify if VASP writes the GAMMA file or not.
|
||||||
|
|
||||||
|
|
||||||
|
which takes care of the process management. The user must, however, specify a path to VASP code and provide the DMFT Python-script. See for an example :ref:`NiO CSC tutorial<nio_csc>`.
|
||||||
|
|
||||||
The user-provided script is almost the same as for Wien2k charge self-consistent
|
The user-provided script is almost the same as for Wien2k charge self-consistent
|
||||||
calculations with the main difference that its functionality (apart from
|
calculations with the main difference that its functionality (apart from the
|
||||||
the lines importing other modules) should be placed inside a function `dmft_cycle()`
|
lines importing other modules) should be placed inside a function `dmft_cycle()`
|
||||||
which will be called every DMFT cycle. Another difference is the way
|
which will be called every DMFT cycle.
|
||||||
function `calc_density_correction()` works.
|
|
||||||
|
VASP has a special INCAR `ICHARG=5` mode, that has to be switched on to make VASP wait for the `vasp.lock` file, and read the updated charge density after each step. One should add the following lines to the `INCAR` file::
|
||||||
|
|
||||||
|
ICHARG = 5
|
||||||
|
NELM = 1000
|
||||||
|
NELMIN = 1000
|
||||||
|
IMIX=0
|
||||||
|
|
||||||
|
Here, the flag `IMIX=0` ensures that VASP does not mix the new charge density with previous iterations. Technically, VASP runs with `ICHARG=5` in a NSCF mode. Therefore, one needs to make sure to start with a converged `WAVECAR` file! To understand the difference please make sure to read `ISTART flag VASP wiki <https://www.vasp.at/wiki/index.php/ISTART>`_. Furthermore, the flags `NELM` and `NELMIN` ensure that VASP does not terminate after the default number of iterations of 60.
|
||||||
|
|
||||||
Other DFT codes
|
Other DFT codes
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The extension to other DFT codes is straight forward. As described
|
The extension to other DFT codes is straightforward. As described
|
||||||
here, one needs to implement the correlated density matrix to be used
|
here, one needs to implement the correlated density matrix to be used
|
||||||
for the calculation of the charge density. This implementation will of
|
for the calculation of the charge density. This implementation will of
|
||||||
course depend on the DFT package, and might be easy to do or a quite
|
course depend on the DFT package, and might be easy to do or a quite
|
||||||
|
@ -26,8 +26,8 @@ Full charge self consistency with Wien2k: :math:`\gamma`-Ce
|
|||||||
VASP interface examples
|
VASP interface examples
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
Simple example: SrVO3
|
Simple Converter example: SrVO3
|
||||||
"""""""""""""""""""""
|
"""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
@ -9,10 +9,10 @@ We will perform DFT+DMFT calcluations for the charge-transfer insulator NiO. We
|
|||||||
VASP setup
|
VASP setup
|
||||||
-------------------------------
|
-------------------------------
|
||||||
We start by running a simple VASP calculation to converge the charge density initially.
|
We start by running a simple VASP calculation to converge the charge density initially.
|
||||||
Use the :ref:`INCAR`, :ref:`POSCAR`, and :ref:`KPOINTS` provided and use your
|
Use the :ref:`INCAR`, :ref:`POSCAR`, and :ref:`KPOINTS` provided and use your
|
||||||
own :file:`POTCAR` file.
|
own :file:`POTCAR` file.
|
||||||
|
|
||||||
Let us take a look in the :file:`INCAR`, where we have to specify local orbitals as basis
|
Let us take a look in the :file:`INCAR`, where we have to specify local orbitals as basis
|
||||||
for our many-body calculation.
|
for our many-body calculation.
|
||||||
|
|
||||||
.. literalinclude:: images_scripts/INCAR
|
.. literalinclude:: images_scripts/INCAR
|
||||||
@ -83,6 +83,7 @@ In this part we will perform charge self-consistent DMFT calculations. To do so
|
|||||||
ICHARG = 5
|
ICHARG = 5
|
||||||
NELM = 1000
|
NELM = 1000
|
||||||
NELMIN = 1000
|
NELMIN = 1000
|
||||||
|
IMIX=0
|
||||||
|
|
||||||
which makes VASP wait after each step of its iterative diagonalization until the file vasp.lock is created. It then reads the update of the charge density in the file `GAMMA`. It is terminated by an external script after a desired amount of steps, such that we deactivate all automatic stoping criterion by setting the number of steps to a very high number.
|
which makes VASP wait after each step of its iterative diagonalization until the file vasp.lock is created. It then reads the update of the charge density in the file `GAMMA`. It is terminated by an external script after a desired amount of steps, such that we deactivate all automatic stoping criterion by setting the number of steps to a very high number.
|
||||||
|
|
||||||
|
@ -1,30 +1,23 @@
|
|||||||
SYSTEM = SrVO3
|
SYSTEM = SrVO3
|
||||||
ENCUT = 450
|
NCORE = 4
|
||||||
|
LMAXMIX=6
|
||||||
|
EDIFF = 1.E-10
|
||||||
|
|
||||||
ICHARG=2 ! 5 for fcsc calculations (communication with python)
|
# DOS energy window
|
||||||
|
NEDOS = 2001
|
||||||
|
|
||||||
! switch off symmetries
|
! switch off symmetries
|
||||||
ISYM=-1
|
ISYM=-1
|
||||||
|
|
||||||
EDIFF = 1.E-10
|
# Smearing procedure
|
||||||
!! DOS energy window
|
|
||||||
NEDOS = 2001
|
|
||||||
!! Smearing procedure
|
|
||||||
ISMEAR = -5
|
ISMEAR = -5
|
||||||
|
|
||||||
|
# the energy window to optimize projector channels
|
||||||
!! real/reci projection scheme
|
|
||||||
LREAL = .FALSE.
|
|
||||||
|
|
||||||
|
|
||||||
NCORE = 4
|
|
||||||
|
|
||||||
LMAXMIX=6
|
|
||||||
LORBIT=14
|
|
||||||
EMIN = 3.9
|
EMIN = 3.9
|
||||||
EMAX = 7.1
|
EMAX = 7.1
|
||||||
LOCPROJ = 2 : d : Pr
|
|
||||||
|
|
||||||
!! write WAVECAR, CHGCAR
|
# use the PAW channel optimization
|
||||||
LWAVE = .FALSE.
|
LORBIT=14
|
||||||
LCHARG = .FALSE.
|
|
||||||
|
# project to V d
|
||||||
|
LOCPROJ = 2 : d : Pr
|
6
doc/tutorials/svo_vasp/KPOINTS
Normal file
6
doc/tutorials/svo_vasp/KPOINTS
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Automatic Mesh
|
||||||
|
0
|
||||||
|
Gamma
|
||||||
|
9 9 9
|
||||||
|
0 0 0
|
||||||
|
|
13
doc/tutorials/svo_vasp/POSCAR
Normal file
13
doc/tutorials/svo_vasp/POSCAR
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
SrVO3
|
||||||
|
1.0
|
||||||
|
3.8420900000 0.0000000000 0.0000000000
|
||||||
|
0.0000000000 3.8420900000 0.0000000000
|
||||||
|
0.0000000000 0.0000000000 3.8420900000
|
||||||
|
Sr V O
|
||||||
|
1 1 3
|
||||||
|
Direct
|
||||||
|
0.000000000 0.000000000 0.000000000
|
||||||
|
0.500000000 0.500000000 0.500000000
|
||||||
|
0.500000000 0.500000000 0.000000000
|
||||||
|
0.000000000 0.500000000 0.500000000
|
||||||
|
0.500000000 0.000000000 0.500000000
|
1248
doc/tutorials/svo_vasp/svo_dos.svg
Normal file
1248
doc/tutorials/svo_vasp/svo_dos.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 56 KiB |
@ -2,7 +2,7 @@
|
|||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 14,
|
"execution_count": 1,
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"nbsphinx": "hidden"
|
"nbsphinx": "hidden"
|
||||||
},
|
},
|
||||||
@ -31,44 +31,107 @@
|
|||||||
"warnings.filterwarnings(\"ignore\") #ignore some matplotlib warnings\n",
|
"warnings.filterwarnings(\"ignore\") #ignore some matplotlib warnings\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# numpy\n",
|
"# numpy\n",
|
||||||
"import numpy as np\n",
|
"import numpy as np"
|
||||||
"\n",
|
|
||||||
"# .. _svonotebook:"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"# DFT and projections"
|
"In this basic example we will perform a VASP calculation for SrVO$_3$, build PLOs for the Vanadium t$_{2g}$ orbitals, and load them as SumK object, which can be then used to perform a DMFT calculation.\n",
|
||||||
|
"\n",
|
||||||
|
"## VASP setup\n",
|
||||||
|
"\n",
|
||||||
|
"First we setup the VASP [INCAR link](INCAR) file by specifing the LOCPROJ, EMIN, EMAX and LORBIT flags:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "markdown",
|
||||||
"execution_count": 1,
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
"source": [
|
||||||
"from pytriqs.archive import HDFArchive"
|
"```\n",
|
||||||
|
"SYSTEM = SrVO3\n",
|
||||||
|
"NCORE = 4\n",
|
||||||
|
"LMAXMIX=6\n",
|
||||||
|
"EDIFF = 1.E-10\n",
|
||||||
|
"\n",
|
||||||
|
"# DOS energy window\n",
|
||||||
|
"NEDOS = 2001\n",
|
||||||
|
"\n",
|
||||||
|
"! switch off symmetries\n",
|
||||||
|
"ISYM=-1\n",
|
||||||
|
"\n",
|
||||||
|
"# Smearing procedure\n",
|
||||||
|
"ISMEAR = -5\n",
|
||||||
|
"\n",
|
||||||
|
"# the energy window to optimize projector channels\n",
|
||||||
|
"EMIN = 3.9\n",
|
||||||
|
"EMAX = 7.1\n",
|
||||||
|
"\n",
|
||||||
|
"# use the PAW channel optimization\n",
|
||||||
|
"LORBIT=14\n",
|
||||||
|
"\n",
|
||||||
|
"# project to V d\n",
|
||||||
|
"LOCPROJ = 2 : d : Pr\n",
|
||||||
|
"```\n",
|
||||||
|
"Moreover we prepare a [KPOINTS link](KPOINTS), [POSCAR link](POSCAR), and a POTCAR file. For the POTCAR file please use the VASP provided PBE pseudopotentials: `Sr_sv`, `V`, and `O`. \n",
|
||||||
|
"\n",
|
||||||
|
"Now VASP is executed, which should converge in roughly 27 iterations. Afterwards you should find the files LOCPROJ and PROJCAR in you directory. \n",
|
||||||
|
"\n",
|
||||||
|
"## PLOVASP\n",
|
||||||
|
"\n",
|
||||||
|
"First import the PLOVASP module of DFTTools:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 11,
|
"execution_count": 2,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stderr",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Starting run with 1 MPI rank(s) at : 2019-12-04 22:26:08.145620\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"# import plovasp converter\n",
|
"# import plovasp converter\n",
|
||||||
"import triqs_dft_tools.converters.plovasp.converter as plo_converter\n",
|
"import triqs_dft_tools.converters.plovasp.converter as plo_converter"
|
||||||
"# import VASPconverter\n",
|
]
|
||||||
"from triqs_dft_tools.converters.vasp_converter import *\n",
|
},
|
||||||
"# SumK\n",
|
{
|
||||||
"from triqs_dft_tools.sumk_dft_tools import SumkDFTTools"
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Next, create a configuration file for plovasp [plo.cfg link](plo.cfg):\n",
|
||||||
|
"\n",
|
||||||
|
"```\n",
|
||||||
|
"[General]\n",
|
||||||
|
"DOSMESH = -3.0 3.0 2001\n",
|
||||||
|
"\n",
|
||||||
|
"[Shell 1]\n",
|
||||||
|
"LSHELL = 2\n",
|
||||||
|
"IONS = 2\n",
|
||||||
|
"EWINDOW = -1.4 2.0\n",
|
||||||
|
"\n",
|
||||||
|
"TRANSFORM = 1.0 0.0 0.0 0.0 0.0\n",
|
||||||
|
" 0.0 1.0 0.0 0.0 0.0\n",
|
||||||
|
" 0.0 0.0 0.0 1.0 0.0\n",
|
||||||
|
"\n",
|
||||||
|
"```\n",
|
||||||
|
"where the energy window of the t$_{2g}$ bands is specified by `EWINDOW` and the `TRANSFORM` flag picks the correct three orbitals out of the five Vanadium $d$ orbitals [see the guide for the ordering of orbitals](../../guide/conv_vasp.html). Before running PLOVASP, make sure that the Fermi energy is written in the first line of the `LOCPROJ` file, or copy it there (see the VASP [interface guide](../../guide/conv_vasp.html) for more information). The first line should look like\n",
|
||||||
|
"```\n",
|
||||||
|
"1 729 21 5 5.3834262 # of spin, # of k-points, # of bands, # of proj, Efermi\n",
|
||||||
|
"```\n",
|
||||||
|
"\n",
|
||||||
|
"Now run PLOVASP:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 7,
|
"execution_count": 28,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -90,14 +153,15 @@
|
|||||||
" Total number of tetrahedra: 4374\n",
|
" Total number of tetrahedra: 4374\n",
|
||||||
"eigvals from LOCPROJ\n",
|
"eigvals from LOCPROJ\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
" Unorthonormalized density matrices and overlaps:\n",
|
||||||
" Spin: 1\n",
|
" Spin: 1\n",
|
||||||
" Site: 2\n",
|
" Site: 2\n",
|
||||||
" Density matrix Overlap\n",
|
" Density matrix Overlap\n",
|
||||||
" 0.5878638 0.0015655 -0.0003729 0.0016028 -0.0000013 0.9294189 -0.0000079 -0.0000080 -0.0000079 0.0000001\n",
|
" 0.5875772 0.0015679 -0.0003707 0.0015674 0.0000000 0.9294791 -0.0000080 -0.0000078 -0.0000080 -0.0000001\n",
|
||||||
" 0.0015655 0.5878216 -0.0001853 -0.0015606 0.0003205 -0.0000079 0.9294189 -0.0000041 0.0000080 0.0000068\n",
|
" 0.0015679 0.5876177 -0.0001854 -0.0016078 0.0003240 -0.0000080 0.9294790 -0.0000042 0.0000080 0.0000070\n",
|
||||||
" -0.0003729 -0.0001853 0.5820729 -0.0001876 0.0000001 -0.0000080 -0.0000041 0.9715784 -0.0000036 -0.0000002\n",
|
" -0.0003707 -0.0001854 0.5815486 -0.0001854 -0.0000000 -0.0000078 -0.0000042 0.9715751 -0.0000038 0.0000003\n",
|
||||||
" 0.0016028 -0.0015606 -0.0001876 0.5878590 -0.0003219 -0.0000079 0.0000080 -0.0000036 0.9294189 -0.0000070\n",
|
" 0.0015674 -0.0016078 -0.0001854 0.5876172 -0.0003240 -0.0000080 0.0000080 -0.0000038 0.9294791 -0.0000066\n",
|
||||||
" -0.0000013 0.0003205 0.0000001 -0.0003219 0.5820728 0.0000001 0.0000068 -0.0000002 -0.0000070 0.9715787\n",
|
" 0.0000000 0.0003240 -0.0000000 -0.0003240 0.5815487 -0.0000001 0.0000070 0.0000003 -0.0000066 0.9715748\n",
|
||||||
"\n",
|
"\n",
|
||||||
" Generating 1 shell...\n",
|
" Generating 1 shell...\n",
|
||||||
"\n",
|
"\n",
|
||||||
@ -105,32 +169,37 @@
|
|||||||
" Orbital l : 2\n",
|
" Orbital l : 2\n",
|
||||||
" Number of ions: 1\n",
|
" Number of ions: 1\n",
|
||||||
" Dimension : 3\n",
|
" Dimension : 3\n",
|
||||||
|
" Correlated : True\n",
|
||||||
|
" Ion sort : [1]\n",
|
||||||
"Density matrix:\n",
|
"Density matrix:\n",
|
||||||
" Site 1\n",
|
" Shell 1\n",
|
||||||
" 0.3333155 0.0021688 0.0022148\n",
|
" Site 1\n",
|
||||||
" 0.0021688 0.3332635 -0.0021629\n",
|
" 0.3332630 0.0021719 0.0021714\n",
|
||||||
" 0.0022148 -0.0021629 0.3333096\n",
|
" 0.0021719 0.3333128 -0.0022211\n",
|
||||||
" trace: 0.999888560089083\n",
|
" 0.0021714 -0.0022211 0.3333123\n",
|
||||||
|
" trace: 0.9998880790966638\n",
|
||||||
"\n",
|
"\n",
|
||||||
" Impurity density: 0.999888560089083\n",
|
" Impurity density: 0.9998880790966638\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Overlap:\n",
|
"Overlap:\n",
|
||||||
" Site 1\n",
|
" Site 1\n",
|
||||||
"[[ 1. 0. -0.]\n",
|
"[[ 1. -0. 0.]\n",
|
||||||
" [ 0. 1. 0.]\n",
|
" [-0. 1. 0.]\n",
|
||||||
" [-0. 0. 1.]]\n",
|
" [ 0. 0. 1.]]\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Local Hamiltonian:\n",
|
"Local Hamiltonian:\n",
|
||||||
" Site 1\n",
|
" Shell 1\n",
|
||||||
" 0.5635031 0.0007530 0.0007528\n",
|
" Site 1\n",
|
||||||
" 0.0007530 0.5635034 -0.0007530\n",
|
" 0.5633806 0.0007563 0.0007563\n",
|
||||||
" 0.0007528 -0.0007530 0.5635032\n",
|
" 0.0007563 0.5633801 -0.0007559\n",
|
||||||
|
" 0.0007563 -0.0007559 0.5633801\n",
|
||||||
"\n",
|
"\n",
|
||||||
"Evaluating DOS...\n",
|
"Evaluating DOS...\n",
|
||||||
" Total number of states: [[[1.99711439 1.99526935 1.99688248]]]\n",
|
" Shell 1\n",
|
||||||
|
" Total number of states: [[[1.99490462 0.21151785 0.00581811]]]\n",
|
||||||
" Storing ctrl-file...\n",
|
" Storing ctrl-file...\n",
|
||||||
" Storing PLO-group file 'vasp.pg1'...\n",
|
" Storing PLO-group file 'vasp.pg1'...\n",
|
||||||
" Density within window: 0.9999735861893001\n"
|
" Density within window: 0.9999741659673522\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -139,9 +208,25 @@
|
|||||||
"plo_converter.generate_and_output_as_text('plo.cfg', vasp_dir='./')"
|
"plo_converter.generate_and_output_as_text('plo.cfg', vasp_dir='./')"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"PLOVASP created one shell with three orbitals, which are equally filled by 1/3, one electron in total. Additionally we calculated the density of states. Both in VASP and PLOVASP. The later stores the data in the file pdos_x.dat, which can be simply plotted with [matplotlib](https://matplotlib.org/). The result should look similar to:\n",
|
||||||
|
"\n",
|
||||||
|
"![](svo_dos.svg)\n",
|
||||||
|
"\n",
|
||||||
|
"Here the gray area highlights the energy window for the PLOs. The total DOS of VASP (blue) coincides with the PLO DOS in the window, as we re-orthonormalized the projector functions in the given window, picking up also Oxygen weight. This setting is closed to the result of maximally localized Wannier functions created with [wannier90](http://www.wannier.org/) without running the actual minimization of the spread. Note, for a proper comparison one can use the hydrogen projector in VASP by using the the line `LOCPROJ= 2 : d : Hy`, instead of `Pr`. \n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"## Converting to hdf5 file\n",
|
||||||
|
"\n",
|
||||||
|
"Finally we can run the VASP converter to create a h5 file:"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 10,
|
"execution_count": 4,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -161,19 +246,83 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
|
"# import VASPconverter\n",
|
||||||
|
"from triqs_dft_tools.converters.vasp_converter import *\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
"# create Converter\n",
|
"# create Converter\n",
|
||||||
"Converter = VaspConverter(filename = 'vasp')\n",
|
"Converter = VaspConverter(filename = 'vasp')\n",
|
||||||
"# run the converter\n",
|
"# run the converter\n",
|
||||||
"Converter.convert_dft_input()"
|
"Converter.convert_dft_input()"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"The resulting h5 file `vasp.h5` can now be loaded as sumk object via:"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 12,
|
"execution_count": 24,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"sk = SumkDFTTools(hdf_file='vasp.h5')"
|
"# SumK\n",
|
||||||
|
"from triqs_dft_tools.sumk_dft_tools import SumkDFTTools\n",
|
||||||
|
"\n",
|
||||||
|
"SK = SumkDFTTools(hdf_file='vasp.h5', use_dft_blocks = False)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Here one should carefully determine the block structure manually. This is important to find degenerate orbitals and spin-channels:"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 26,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"found 1 blocks of degenerate orbitals in shell 0\n",
|
||||||
|
"block 0 consists of orbitals:\n",
|
||||||
|
" up_2\n",
|
||||||
|
" up_0\n",
|
||||||
|
" up_1\n",
|
||||||
|
" down_2\n",
|
||||||
|
" down_1\n",
|
||||||
|
" down_0\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"Sigma = SK.block_structure.create_gf(beta=40)\n",
|
||||||
|
"SK.put_Sigma([Sigma])\n",
|
||||||
|
"G = SK.extract_G_loc()\n",
|
||||||
|
"SK.analyse_block_structure_from_gf(G, threshold = 1e-3)\n",
|
||||||
|
"for i_sh in range(len(SK.deg_shells)):\n",
|
||||||
|
" num_block_deg_orbs = len(SK.deg_shells[i_sh])\n",
|
||||||
|
" mpi.report('found {0:d} blocks of degenerate orbitals in shell {1:d}'.format(num_block_deg_orbs, i_sh))\n",
|
||||||
|
" for iblock in range(num_block_deg_orbs):\n",
|
||||||
|
" mpi.report('block {0:d} consists of orbitals:'.format(iblock))\n",
|
||||||
|
" for keys in SK.deg_shells[i_sh][iblock].keys():\n",
|
||||||
|
" mpi.report(' '+keys)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"This minimal example extracts the block structure by calculating once the local Green's functions and then finds degenerate orbitals with a certain threshold in `Gloc`. Afterwards the result is reported, where 1 block is found with size 6 (3x2 orbitals for spin), where a all 6 orbitals are marked as degenerate. This is indeed correct in cubic SrVO$_3$, as all 3 t$_{2g}$ orbitals are degenerate. Note: for a magnetic calculation one has to break the symmetry between up and down at this point manually. Moreover, one can reduce the threshold for example to `1e-5` and finds that then the degeneracy of the 3 t$_{2g}$ orbitals is not found anymore, resulting in only two degenerate blocks for spin up and down, each with size 3x3.\n",
|
||||||
|
"\n",
|
||||||
|
"Afterwards the exact same DMFT script as in the [Wien2k tutorial](../srvo3.html) can be used. For a more elaborate example including charge self-consistency take a look at the [VASP NiO example](../nio_csc.html)."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user