mirror of
https://github.com/triqs/dft_tools
synced 2024-09-12 05:38:31 +02:00
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:
parent
5d406b22d9
commit
378f743b09
@ -6,7 +6,7 @@ hdf5 structure
|
|||||||
All the data is stored using the hdf5 standard, as described also in the
|
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,
|
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
|
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
|
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.
|
one correlated atomic shell, or using symmetry operations for the k-summation.
|
||||||
We store all data in subgroups of the hdf5 archive:
|
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
|
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
|
calculation. The default name of this group is `dft_input`. Its contents are
|
||||||
@ -31,56 +31,93 @@ k_dep_projection numpy.int
|
|||||||
0 otherwise.
|
0 otherwise.
|
||||||
SP numpy.int 1 for spin-polarised Hamiltonian, 0 for paramagnetic Hamiltonian.
|
SP numpy.int 1 for spin-polarised Hamiltonian, 0 for paramagnetic Hamiltonian.
|
||||||
SO numpy.int 1 if spin-orbit interaction is included, 0 otherwise.
|
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.
|
charge_below numpy.float Number of electrons in the crystal below the correlated orbitals.
|
||||||
Note that this is for compatibility with dmftproj.
|
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.
|
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`.
|
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.
|
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.
|
n_shells numpy.int Number of atomic shells for which post-processing is possible.
|
||||||
Note: this is `not` the number of correlated orbitals!
|
Note: this is `not` the number of correlated orbitals!
|
||||||
If there are two equivalent atoms in the unit cell, `n_shells` is 2.
|
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.
|
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'].
|
For each shell, have a dict with keys ['atom', 'sort', 'l', 'dim'].
|
||||||
'atom' is the atom index, 'sort' defines the equivalency of the atoms,
|
'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.
|
'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.
|
but `sort` can take only one value 0.
|
||||||
n_corr_shells numpy.int Number of correlated atomic shells.
|
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.
|
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.
|
n_inequiv_shells numpy.int Number of inequivalent atomic shells. Needs to be smaller than `n_corr_shells`.
|
||||||
For each correlated shell, have a dict with keys
|
The up / downfolding routines mediate between all correlated shells and the
|
||||||
['atom', 'sort', 'l', 'dim', 'SO', 'irep'].
|
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,
|
'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.
|
'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.
|
'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.
|
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`.
|
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.
|
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.
|
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.
|
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.
|
e.g. 2 if eg/t2g splitting is used.
|
||||||
dim_reps list of numpy.int, dim n_reps Dimension of the representations.
|
dim_reps list of numpy.int, dim n_reps Dimension of the representations.
|
||||||
e.g. [2,3] for eg/t2g subsets.
|
e.g. [2,3] for eg/t2g subsets.
|
||||||
T list of numpy.array.complex, Transformation matrix from the spherical harmonics to impurity problem basis
|
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).
|
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.
|
[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.
|
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.
|
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.
|
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
|
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).
|
(given by last two indices).
|
||||||
For k-points with fewer bands, only the first entries are used, the rest are zero.
|
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.
|
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.
|
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.
|
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.
|
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
|
Symmetry operations
|
||||||
^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^
|
||||||
In this subgroup we store all the data for applying the symmetry operations in
|
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
|
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
|
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
|
Note that the input file should contain only the numbers, not the comments
|
||||||
given in above example.
|
given in above example.
|
||||||
|
|
||||||
The Hamiltonian matrices can be taken, e.g., from Wannier90, which contructs
|
The Hamiltonian matrices can be taken, e.g., from Wannier90, which constructs
|
||||||
the Hamiltonian in a maximally localised Wannier basis.
|
the Hamiltonian in a maximally localized Wannier basis.
|
||||||
|
|
||||||
Note that with this simplified converter, no full charge self consistent
|
Note that with this simplified converter, no full charge self consistent
|
||||||
calculations are possible!
|
calculations are possible!
|
||||||
|
@ -109,7 +109,7 @@ class SumkDFT(object):
|
|||||||
|
|
||||||
# optional properties to load
|
# optional properties to load
|
||||||
# soon bz_weights is depraced and replaced by kpt_weights, kpts_basis and kpts will become required to read soon
|
# 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)
|
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:
|
if self.symm_op:
|
||||||
|
Loading…
Reference in New Issue
Block a user