Update for hdf5 structure reference

- added missing corr to inequiv information
- added a Vasp specific section and added missing information
This commit is contained in:
Alexander Hampel 2020-08-04 10:51:01 +02:00
parent 5d406b22d9
commit 378f743b09
2 changed files with 68 additions and 31 deletions

View File

@ -6,7 +6,7 @@ hdf5 structure
All the data is stored using the hdf5 standard, as described also in the
documentation of the TRIQS package itself. In order to do a DMFT calculation,
using input from DFT applications, a converter is needed on order to provide
the necessary data in the hdf5 format.
the necessary data in the hdf5 format.
groups and their formats
------------------------
@ -17,7 +17,7 @@ DMFT calculations for all kinds of situations, e.g. d-p Hamiltonians, more than
one correlated atomic shell, or using symmetry operations for the k-summation.
We store all data in subgroups of the hdf5 archive:
Main data
Main data
^^^^^^^^^
There needs to be one subgroup for the main data of the
calculation. The default name of this group is `dft_input`. Its contents are
@ -31,56 +31,93 @@ k_dep_projection numpy.int
0 otherwise.
SP numpy.int 1 for spin-polarised Hamiltonian, 0 for paramagnetic Hamiltonian.
SO numpy.int 1 if spin-orbit interaction is included, 0 otherwise.
charge_below numpy.float Number of electrons in the crystal below the correlated orbitals.
Note that this is for compatibility with dmftproj.
charge_below numpy.float Number of electrons in the crystal below the correlated orbitals.
Note that this is for compatibility with dmftproj, otherwise set to 0
density_required numpy.float Required total electron density. Needed to determine the chemical potential.
The density in the projection window is then `density_required`-`charge_below`.
symm_op numpy.int 1 if symmetry operations are used for the BZ sums,
symm_op numpy.int 1 if symmetry operations are used for the BZ sums,
0 if all k-points are directly included in the input.
n_shells numpy.int Number of atomic shells for which post-processing is possible.
Note: this is `not` the number of correlated orbitals!
n_shells numpy.int Number of atomic shells for which post-processing is possible.
Note: this is `not` the number of correlated orbitals!
If there are two equivalent atoms in the unit cell, `n_shells` is 2.
shells list of dict {string:int}, dim n_shells x 4 Atomic shell information.
For each shell, have a dict with keys ['atom', 'sort', 'l', 'dim'].
shells list of dict {string:int}, dim n_shells x 4 Atomic shell information.
For each shell, have a dict with keys ['atom', 'sort', 'l', 'dim'].
'atom' is the atom index, 'sort' defines the equivalency of the atoms,
'l' is the angular quantum number, 'dim' is the dimension of the atomic shell.
e.g. for two equivalent atoms in the unit cell, `atom` runs from 0 to 1,
e.g. for two equivalent atoms in the unit cell, `atom` runs from 0 to 1,
but `sort` can take only one value 0.
n_corr_shells numpy.int Number of correlated atomic shells.
If there are two correlated equivalent atoms in the unit cell, `n_corr_shells` is 2.
corr_shells list of dict {string:int}, dim n_corr_shells x 6 Correlated orbital information.
For each correlated shell, have a dict with keys
['atom', 'sort', 'l', 'dim', 'SO', 'irep'].
n_corr_shells numpy.int Number of correlated atomic shells.
If there are two correlated equivalent atoms in the unit cell, `n_corr_shells` is 2.
n_inequiv_shells numpy.int Number of inequivalent atomic shells. Needs to be smaller than `n_corr_shells`.
The up / downfolding routines mediate between all correlated shells and the
actual inequivalent shells, by using the self-energy etc. for all equal shells
belonging to the same class of inequivalent shells. The mapping is performed with
information stored in `corr_to_inequiv` and `inequiv_to_corr`.
corr_to_inequiv list of numpy.int, dim `n_corr_shells` mapping from correlated shells to inequivalent correlated shells.
A list of length `n_corr_shells` containing integers, where same numbers mark
equivalent sites.
inequiv_to_corr list of numpy.int, dim `n_inequiv_shells` A list of length `n_inequiv_shells` containing list indices as integers pointing
to the corresponding sites in `corr_to_inequiv`.
corr_shells list of dict {string:int}, dim n_corr_shells x 6 Correlated orbital information.
For each correlated shell, have a dict with keys
['atom', 'sort', 'l', 'dim', 'SO', 'irrep'].
'atom' is the atom index, 'sort' defines the equivalency of the atoms,
'l' is the angular quantum number, 'dim' is the dimension of the atomic shell.
'SO' is one if spin-orbit is included, 0 otherwise, 'irep' is a dummy integer 0.
use_rotations numpy.int 1 if local and global coordinate systems are used, 0 otherwise.
rot_mat list of numpy.array.complex, Rotation matrices for correlated shells, if `use_rotations`.
dim n_corr_shells x [corr_shells['dim'],corr_shells['dim']] Set to the unity matrix if no rotations are used.
rot_mat list of numpy.array.complex, Rotation matrices for correlated shells, if `use_rotations`.
dim n_corr_shells x [corr_shells['dim'],corr_shells['dim']] These rotations are automatically applied for up / downfolding.
Set to the unity matrix if no rotations are used.
rot_mat_time_inv list of numpy.int, dim n_corr_shells If `SP` is 1, 1 if the coordinate transformation contains inversion, 0 otherwise.
If `use_rotations` or `SP` is 0, give a list of zeros.
n_reps numpy.int Number of irreducible representations of the correlated shell.
n_reps numpy.int Number of irreducible representations of the correlated shell.
e.g. 2 if eg/t2g splitting is used.
dim_reps list of numpy.int, dim n_reps Dimension of the representations.
e.g. [2,3] for eg/t2g subsets.
T list of numpy.array.complex, Transformation matrix from the spherical harmonics to impurity problem basis
dim n_inequiv_corr_shell x normally the real cubic harmonics).
[max(corr_shell['dim']),max(corr_shell['dim'])] This matrix is used to calculate the 4-index U matrix.
e.g. [2,3] for eg/t2g subsets.
T list of numpy.array.complex, Transformation matrix from the spherical harmonics to impurity problem basis
dim n_inequiv_corr_shell x normally the real cubic harmonics).
[max(corr_shell['dim']),max(corr_shell['dim'])] This matrix can be used to calculate the 4-index U matrix, not automatically done.
n_orbitals numpy.array.int, dim [n_k,SP+1-SO] Number of Bloch bands included in the projection window for each k-point.
If SP+1-SO=2, the number of included bands may depend on the spin projection up/down.
proj_mat numpy.array.complex, Projection matrices from Bloch bands to Wannier orbitals.
dim [n_k,SP+1-SO,n_corr_shells,max(corr_shell['dim']),max(n_orbitals)] For efficient storage reasons, all matrices must be of the same size
(given by last two indices).
dim [n_k,SP+1-SO,n_corr_shells,max(corr_shell['dim']),max(n_orbitals)] For efficient storage reasons, all matrices must be of the same size
(given by last two indices).
For k-points with fewer bands, only the first entries are used, the rest are zero.
e.g. if number of Bloch bands ranges from 4-6, all matrices are of size 6.
bz_weights numpy.array.float, dim n_k Weights of the k-points for the k summation.
hopping numpy.array.complex, Non-interacting Hamiltonian matrix for each k point.
dim [n_k,SP+1-SO,max(n_orbitals),max(n_orbitals)] As for `proj_mat`, all matrices have to be of the same size.
bz_weights numpy.array.float, dim n_k Weights of the k-points for the k summation. Soon be replaced by `kpt_weights`
hopping numpy.array.complex, Non-interacting Hamiltonian matrix for each k point.
dim [n_k,SP+1-SO,max(n_orbitals),max(n_orbitals)] As for `proj_mat`, all matrices have to be of the same size.
================= ====================================================================== =====================================================================================
Converter specific data
^^^^^^^^^^^^^^^^^^^^^^^
This data is specific to the different converters and stored in the `dft_input`
group as well.
For the Vasp converter:
================= ====================================================================== =====================================================================================
Name Type Meaning
================= ====================================================================== =====================================================================================
kpt_basis numpy.array.float, dim 3x3 Basis for the k-point mesh, reciprocal lattice vectors.
kpts numpy.array.float, dim n_k x 3 k-points given in reciprocal coordinates.
kpt_weights numpy.array.float, dim n_k Weights of the k-points for the k summation.
proj_or_hk string Switch determining whether the Vasp converter is running in projection mode `proj`, or
in Hamiltonian mode `hk`. In Hamiltonian mode, the hopping matrix is written in
orbital basis, whereas in projection mode hopping is written in band basis.
proj_mat_csc numpy.array.complex, Projection matrices from Bloch bands to Wannier orbitals for Hamiltonian based `hk`
dim approach. No site index is given, since hk is written in orbital basis. The last to
[n_k,SP+1-SO, n_corr_shells x max(corr_shell['dim']), max(n_orbitals)] indices are a square matrix rotating from orbital to band space.
dft_fermi_weights numpy.array.float, dim n_k x 1 x max(n_orbitals) DFT fermi weights (occupations) of KS eigenstates for each k-point for calculation
(stored in dft_misc_input) of density matrix correction.
band_window list of numpy.array.int , dim(SP+1-SO)x n_k x 2 Band windows as KS band indices in Vasp for each spin channel, and k-point. Needed for
(stored in dft_misc_input) writing out the GAMMA file.
Symmetry operations
^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^
In this subgroup we store all the data for applying the symmetry operations in
the DMFT loop (in case you want to use symmetry operations). The default name
of this subgroup is `dft_symmcorr_input`. This information is needed only if symmetry
@ -127,8 +164,8 @@ It is furthermore assumed that all k-points have equal weight in the k-sum.
Note that the input file should contain only the numbers, not the comments
given in above example.
The Hamiltonian matrices can be taken, e.g., from Wannier90, which contructs
the Hamiltonian in a maximally localised Wannier basis.
The Hamiltonian matrices can be taken, e.g., from Wannier90, which constructs
the Hamiltonian in a maximally localized Wannier basis.
Note that with this simplified converter, no full charge self consistent
calculations are possible!

View File

@ -109,7 +109,7 @@ class SumkDFT(object):
# optional properties to load
# soon bz_weights is depraced and replaced by kpt_weights, kpts_basis and kpts will become required to read soon
optional_things_to_read = ['proj_mat_csc', 'proj_or_hk', 'kpts_basis','kpts','kpt_weights', 'kpt_basis']
optional_things_to_read = ['proj_mat_csc', 'proj_or_hk', 'kpt_basis','kpts','kpt_weights']
subgroup_present, self.optional_values_not_read = self.read_input_from_hdf(subgrp=self.dft_data, things_to_read=optional_things_to_read)
if self.symm_op: