3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-22 12:23:41 +01:00

Bugfix for analyse_block_structure in sumk_dft

This caused inconsistencies between the shapes of Hloc and density_matrix,
since they were in the shape of n_corr_shells vs n_inequiv_shells, respectively.
This commit is contained in:
phibeck 2022-02-18 16:38:01 -05:00 committed by Alexander Hampel
parent 3fd1295b91
commit e2b9a94297

View File

@ -851,11 +851,11 @@ class SumkDFT(object):
If include_shells is not provided all correlated shells will be analysed. If include_shells is not provided all correlated shells will be analysed.
dm : list of dict, optional dm : list of dict, optional
List of density matrices from which block stuctures are to be analysed. List of density matrices from which block stuctures are to be analysed.
Each density matrix is a dict {block names: 2d numpy arrays}. Each density matrix is a dict {block names: 2d numpy arrays} for each correlated shell.
If not provided, dm will be calculated from the DFT Hamiltonian by a simple-point BZ integration. If not provided, dm will be calculated from the DFT Hamiltonian by a simple-point BZ integration.
hloc : list of dict, optional hloc : list of dict, optional
List of local Hamiltonian matrices from which block stuctures are to be analysed List of local Hamiltonian matrices from which block stuctures are to be analysed
Each Hamiltonian is a dict {block names: 2d numpy arrays}. Each Hamiltonian is a dict {block names: 2d numpy arrays} for each inequivalent shell.
If not provided, it will be calculated using eff_atomic_levels. If not provided, it will be calculated using eff_atomic_levels.
""" """
@ -871,8 +871,6 @@ class SumkDFT(object):
for ish in range(self.n_inequiv_shells)] for ish in range(self.n_inequiv_shells)]
if hloc is None: if hloc is None:
hloc = self.eff_atomic_levels() hloc = self.eff_atomic_levels()
H_loc = [hloc[self.corr_to_inequiv[ish]]
for ish in range(self.n_corr_shells)]
if include_shells is None: if include_shells is None:
include_shells = list(range(self.n_inequiv_shells)) include_shells = list(range(self.n_inequiv_shells))
@ -882,7 +880,7 @@ class SumkDFT(object):
n_orb = self.corr_shells[self.inequiv_to_corr[ish]]['dim'] n_orb = self.corr_shells[self.inequiv_to_corr[ish]]['dim']
# gives an index list of entries larger that threshold # gives an index list of entries larger that threshold
dmbool = (abs(dens_mat[ish][sp]) > threshold) dmbool = (abs(dens_mat[ish][sp]) > threshold)
hlocbool = (abs(H_loc[ish][sp]) > threshold) hlocbool = (abs(hloc[ish][sp]) > threshold)
# Determine off-diagonal entries in upper triangular part of # Determine off-diagonal entries in upper triangular part of
# density matrix # density matrix