Skip to content

Commit 9ae87de

Browse files
committed
[feat] add dc_orb_shift param to allow orbital dependent shift in impurity levels
1 parent 0e9adbf commit 9ae87de

5 files changed

Lines changed: 34 additions & 3 deletions

File tree

python/solid_dmft/dmft_tools/initial_self_energies.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,27 @@ def calculate_double_counting(sum_k, density_matrix, general_params, advanced_pa
162162
mpi.report('DC for shell {} and block {} = {}'.format(icrsh, spin, dc_per_spin[0][0]))
163163
mpi.report('DC energy for shell {} = {}'.format(icrsh, energy_per_shell))
164164

165+
if advanced_params['dc_orb_shift'] != 'none':
166+
mpi.report('adding an extra orbital dependent shift per impurity')
167+
tot_norb = 0
168+
dc_orb_shift = []
169+
dc_orb_shift_orig = deepcopy(advanced_params['dc_orb_shift'])
170+
for icrsh in range(sum_k.n_inequiv_shells):
171+
tot_norb += sum_k.corr_shells[icrsh]['dim']
172+
dc_orb_shift.append(dc_orb_shift_orig[:sum_k.corr_shells[icrsh]['dim']])
173+
del dc_orb_shift_orig[:sum_k.corr_shells[icrsh]['dim']]
174+
175+
dc_orb_shift = np.array(dc_orb_shift)
176+
dc = []
177+
for icrsh in range(sum_k.n_inequiv_shells):
178+
mpi.report(f'shift on imp {icrsh}: {dc_orb_shift[icrsh,:]}')
179+
dc.append({})
180+
for spin, dc_per_spin in sum_k.dc_imp[sum_k.inequiv_to_corr[icrsh]].items():
181+
dc[icrsh][spin] = dc_per_spin + np.diag(dc_orb_shift[icrsh,:])
182+
183+
for ish in range(sum_k.n_corr_shells):
184+
sum_k.dc_imp[ish] = dc[sum_k.corr_to_inequiv[ish]]
185+
165186
return sum_k
166187

167188

python/solid_dmft/dmft_tools/interaction_hamiltonian.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ def _generate_four_index_u_matrix(sum_k, general_params, icrsh):
367367
# the order for the cubic orbitals is given by the convention. The TRIQS
368368
# convention is as follows ("xy","yz","z^2","xz","x^2-y^2")
369369
# this is consistent with the order of orbitals in the VASP interface
370-
# but not necessarily with wannier90, qe, and wien2k!
370+
# but not necessarily with wannier90, qe, and wien2k!
371371
# This is also true for the f-shell.
372372
Umat_full = util.U_matrix_slater(l=sum_k.corr_shells[ish]['l'],
373373
radial_integrals=slater_integrals, basis='spherical')

python/solid_dmft/read_config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
* density_density: used for full d-shell or eg- or t2g-subset
5555
* kanamori: only physical for the t2g or the eg subset
5656
* full_slater: used for full d-shell or eg- or t2g-subset
57+
* ntot: U/2 (Ntot^2 - Ntot) interaction
58+
* simple_intra: density-density like but only intra orbital with given U value (no rotations applied)
5759
* crpa: use the cRPA matrix as interaction Hamiltonian
5860
* crpa_density_density: use the density-density terms of the cRPA matrix
5961
* dynamic: use dynamic U from h5 archive
@@ -401,6 +403,8 @@
401403
dc_fixed_occ : list of float, optional, default= 'none'
402404
If given, the occupation for the DC for each impurity is set to the provided value.
403405
Still uses the same kind of DC!
406+
dc_orb_shift : list of float, optional, default= 'none'
407+
extra potential shift per orbital per impurity added to the DC
404408
dc_U : float or comma seperated list of floats, optional, default= general_params['U']
405409
U values for DC determination if only one value is given, the same U is assumed for all impurities
406410
dc_J : float or comma seperated list of floats, optional, default= general_params['J']
@@ -871,6 +875,9 @@
871875
'dc_fixed_occ': {'converter': lambda s: list(map(float, s.split(','))),
872876
'used': True, 'default': 'none'},
873877

878+
'dc_orb_shift': {'converter': lambda s: list(map(float, s.split(','))),
879+
'used': True, 'default': 'none'},
880+
874881
'dc_nominal': {'converter': BOOL_PARSER, 'used': True, 'default': False},
875882

876883
'dc_U': {'converter': lambda s: list(map(float, s.split(','))),

test/python/svo_cthyb_basic_tf/dmft_config.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,7 @@ fit_max_moment = 4
4545
fit_min_w = 4
4646
fit_max_w = 10
4747

48+
[advanced]
49+
dc_orb_shift = -0.1,0.2,0.1
50+
4851

test/python/test_read_config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test_config_file_1():
105105
'mu_gap_gb2_threshold': 'none',
106106
'calc_mu_method': 'dichotomy'},
107107
'advanced': {'dc_fixed_value': 'none', 'dc_fixed_occ': 'none',
108-
'dc_nominal': False,
108+
'dc_nominal': False, 'dc_orb_shift': 'none',
109109
'dc_factor': 'none', 'dc_J': [2.0], 'dc_U': [2.0],
110110
'pick_solver_struct': 'none',
111111
'map_solver_struct': 'none'},
@@ -227,7 +227,7 @@ def test_config_file_2():
227227
'mu_gap_gb2_threshold': 'none',
228228
'calc_mu_method': 'dichotomy'},
229229
'advanced': {'dc_fixed_value': 'none', 'dc_fixed_occ': 'none',
230-
'dc_nominal': False,
230+
'dc_nominal': False, 'dc_orb_shift': 'none',
231231
'dc_factor': 'none', 'dc_J': [1.0], 'dc_U': [5.5],
232232
'map_solver_struct': {('ud_0', 0): ('up_0', 0)},
233233
'pick_solver_struct': 'none',

0 commit comments

Comments
 (0)